iOS関連のことを調べてみた2021年05月13日

iOS関連のことを調べてみた2021年05月13日

【Swift】画面遷移で責務分離する

#はじめに
今回は、ViewControllerで画面遷移をおこなうときに責務を分離して、変更に強くなるようなコードを紹介したいと思います。
以下のようなアプリを例として作ってみたいと思います。

![ezgif.com-gif-maker (2).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/954451/33a38e1a-a207-ca33-13b3-ab6f583b28fd.gif)

#GitHub

https://github.com/0429oonishi/ScreenTransition-practice

#共通部分
以下のような階層にしました
![ScreenShot 2021-05-13 8.03.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/954451/470ec79a-2420-fd79-6bdb-02277701f468.png)

“`swift:User
struct User

元記事を表示

【iOS】Safariの広告をブロックしたい

#hostsを編集。【要牢破り】

#### hostsファイル
[**hosts**](https://ja.m.wikipedia.org/wiki/Hosts)ファイルは[DNS](https://ja.m.wikipedia.org/wiki/Domain_Name_System)より優先されるので代替サーバーのアドレスを記載したりしますが、目的のサーバーをデバイス自身にする事で、ネット上にサーバーが見つからないようにできます。

例えば[**Qiita**](https://qiita.com/)のアドレスを次のようにhostsに書き加えると、Qiitaにアクセスできなくなります。
`
127.0.0.1 localhost
::1 localhost
127.0.0.1 qiita.com
::1 qiita.com`

解説

– IPv4のアドレス`127.0.0.1`とIPv6のアドレス`::1`を`localhost`として宣言してるので、`

元記事を表示

週刊 DICOMデコーダーを創る (2)

##本日はtag, VR, lengthを読み取ってみる
需要の程は不明ですが,知識の整理も兼ねて今日も作っていきます.

今日はtag, VR, 値長さを読み取るところまでやってみます.
前回はViewController.swiftにまとめていましたが,本格的に読み取り始めることにするので,新たにDicomDataクラスを作成します.

“`DicomData.swift
class DicomData{

var dicomData : Data!

init(withData data:Data) {
dicomData = data
// dicomデータかチェック
// ヘッダは128バイトのファイルプリアンブル
// 続く4バイトにプレフィックスが続く
if dicomData.count < 132{ print("file size error") return } if d

元記事を表示

iOS で体温記録する

体調管理の一環で、体温を記録しようと思っても、
どのアプリを選んだら良いか迷ってしまう、という私のための記事です。

↓こんなことがやりたい
![ios_shortcut_011.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59810/60165a8d-f32f-53bf-0ef0-565d142e6a6a.jpeg)

> **おことわり。**
> 体温情報は、個人の健康に関連する機微情報の一つだと考えています。どこに保存すべきか、そもそも保存するべきかの判断は、個々人で配慮いただければと思います。本記事の趣旨としては、iOS ショートカットでこんな使い方もできる、というアイデアの一例のご紹介です。

閑話休題。

いわゆる普通の体温計 (水銀じゃなくても) で体温測るのですが、記録をどこに残そうか、そのためにわざわざアプリ入れるのも、高機能な体温計を探すのもなぁ・・

そうだ、ヘルスケアアプリに直で記録してしまえ。

iPhone などの iOS の機能の **ショートカット** と **ヘルス

元記事を表示

SwiftUIで書くiOSアプリハンズオン(QiitaClientを作ってみよう)

SwiftUIを使ったハンズオン用に記事を作成しました

## 使用するAPI
今回はQiitaAPiを題材とします。([ドキュメント](https://qiita.com/api/v2/docs))

登録不要で使えて、例えば、 https://qiita.com//api/v2/items で、投稿を取得できます。

“`javascript
[{
rendered_body: “…”,
coediting: false,
comments_count: 0,
created_at: “2017-11-09T22:50:51+09:00”,
group: null,
id: “fe412a67b64e793d138b”,
likes_count: 0,
private: false,
reactions_count: 0,
tags: [{
name: “processing”,
versions: []
},
{

元記事を表示

Flutter flutter_pdfview 使い方

#内容
flutter_pdfviewの使い方の忘却録。

PDFViewのプロパティとかは後で、追記する予定。

#開発環境

PC : macOS Big Sur
エディター : Visual Studio Code

Flutter 1.22.1
flutter_pdfview 1.0.4

#コード

まずは、pubspec.yamlにパッケージを追加
あとは、読み込みたいPDFファイルも追加

“`pubspec.yaml
dependencies:
flutter:
sdk: flutter
flutter_pdfview: ^1.0.4 <- 追加 ・ ・ ・ assets: - sample.pdf <- 追加 ``` ※Info.plistの修正は今回は必要ないので、追記しない ###●ファイルパスを使用する方法 サンプルではassetsフォルダのファイルを読み込んで、ローカルに保存し、パスを指定している。 ```PDFScreen.dart class PDFScreen ext

元記事を表示

Android, iOSで文字の幅を取得する方法

# Android

“`test.kt
val paint = TextPaint().also {
it.textSize = 10
if (!isInEditMode) {
it.typeface = ResourcesCompat.getFont(context, R.font.your_font)
}
}
paint.measureText(“hoge”)
“`

# iOS

“`UIFont+.swift
import UIKit

extension UIFont {
/// テキストのwidthを取得する
func measureText(text: String) -> CGFloat {
let str = NSString(string: text)
return str.size(withAttributes: [.font: self]).width
}
}
“`

“`test.swift
let font = UIFont(name:”your_fo

元記事を表示

SwiftUI Tutorialsの解説と振り返り

# この記事は投稿は何?
Appleの[SwiftUI Tutorials](https://developer.apple.com/tutorials/swiftui/)を一通り実践したので、振り返ります。

## 実行環境
macOS 11.3.1
Xcode 12.5
Swift 5.4

# SwiftUI Tutorials
全部で3つのチャプターから構成されます。
それぞれのチャプターは、3つのセクションで構成されています。
ここでは最初のチャプターを振り返ります。

## Section 1
[Create a New Project and Explore the Canvas]()では、ビューを構築するための基本的な方法を学びます。
下図は、このSection1で作成したビューをツリー構造にしたものです。

![SwiftUI Tutorials1.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70476/3269205a-8d55-b816-f513-98164dbfc987.j

元記事を表示

Swift だけで Unity の iOS の Native Plugin を作る

# Swift だけで Unity の iOS の Native Plugin を作る
* Unity は Native Plugin を作成することで、Unity から提供されていない、OS 固有の機能を使用することができます
* 例えば iOS では、Bluetooth や MP4 動画の作成、アルバムの利用などが出来るようになります
* これらの Native の機能を Swift で実装し、C# から呼び出す手順です
* Swift Package Manager (以下 SwiftPM) を使って、Framework を作成し、Unity に組み込みます
* ついでに、ライブラリの開発用の Native のアプリターゲットを作成します
* __Framework 化するメリット__
* PostProcess の設定が不要です
* Unity の Inspector 上で Embed の設定が完了します
* 合わせて Native でアプリターゲットを実装する事で、動作確認のために Unity のビルドをせずに、ライブラリの開発が可能です
* 今回の話

元記事を表示

【Swift】UserDefaultsを扱いやすくする

#はじめに
今回はUserDefaultsをジェネリクスとプロトコルを使って少し工夫します。

#やりたいこと
普通は以下のように使うと思います。

“`swift
UserDefaults.standard.set(“サンプル”, forKey: “sampleKey”) // 書き込み
let text = UserDefaults.standard.string(forKey: “sampleKey”) // 読み込み
“`

今回は以下のように、forKeyを工夫してアクセスしやすくします。

“`swift
let userDefault = UserDefault()
userDefault.set(true, forKey: .dog)
let bool = userDefault.bool(forKey: .dog)
“`

一番簡単なのは、以下のようにStringを拡張する方法です。

“`swift
extension String {
static var dog: String { return

元記事を表示

アプリ開発の勉強記録1

###スタンフォード大学の講義
– SwiftUIによるアプリ開発
– ある程度何らかのプログラミング言語を知っている人向け
– 1〜2時間の講義が14回(上がっている動画をカウントした)
– 音声:英語、字幕:英語

Lecture 1: Course Logistics and Introduction to SwiftUI

###内容
– やる:Swift言語、関数型プログラミング、リアクティブUI開発(MVVM含)
– やらない:UIKit、テスト手法
– Xcodeインストールし、He

元記事を表示

【Guideline 2.1 – Information Needed】IDFA関連のApple審査リジェクト対処法

アップデート時にAppleの審査で、「Guideline 2.1 – Information Needed」によってリジェクトされました。
「情報が足りない」という内容で、今回はiOS14.5で必須となっているIDFA取得に関連していました。
同様のリジェクトを受ける可能性がある方もいると思うので、記録しておきます。

## Guideline 2.1 – Information Needed
「Information Needed」についたコメントは以下の通りです。
>We’re looking forward to completing the review of your app, but we need more information to continue. Specifically, we noticed that your app uses the AppTrackingTransparency framework, but we haven’t been able to locate the App Tracking Transparency permission r

元記事を表示

【Swift】RxSwift勉強してみたPart9

#はじめに
[前回](https://qiita.com/REON/items/8ded3fcc1151d5776da8)
今回はOperatorをいくつか練習していきます

#Operators

##Filtering Operators

###ignoreElements
onNextを無視する

“`swift
let publishSubject = PublishSubject()
let disposeBag = DisposeBag()
publishSubject
.ignoreElements()
.subscribe { _ in
print(“subscription is called”)
}
.disposed(by: disposeBag)

publishSubject.onNext(“1”) // 呼ばれない
publishSubject.onNext(“2”) // 呼ばれない
publishSubject.onNext(“3”) // 呼ばれない
publishSubject.on

元記事を表示

【Swift】AlamofireでAPI通信をする

#はじめに
今回はQiitaAPIを叩いてAlamofireで通信していみたいと思います。

#作るもの

![ScreenShot 2021-05-11 3.31.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/954451/4ecaffea-f77c-7d98-3d53-14f7bc062a76.png)

#GitHub

https://github.com/0429oonishi/Alamofire-practice

#実装

モデル

“`swift
struct Article: Codable {
let title: String
let user: User
}

struct User: Codable {
let id: String
}
“`

コントローラー

“`swift
final class ArticleListViewController: UIViewController {

@IBOutlet privat

元記事を表示

週刊 DICOMデコーダーを創る (1) 創刊号

##DICOMデコーダーの作成
医療用画像を扱う上でDICOMは避けては通ることができない形式です.
近年はPythonなど様々な言語で使用可能なDICOMプラグインが登場しているし,そもそもDICOM→扱いやすい形式へ変換可能なソフトウェアはフリーでもたくさんある.なので,今更自力でDICOMを表示することに需要はないかもしれない・・・

DICOM規格は経年的にどんどん膨れ上がっており,その全体を理解することや,すべてを実装することは個人の力では到底できない.(少なくとも自分には)(なのでライブラリを使え,と言う話だが・・・)
そんな中でも,**DICOMを実装したい!!と考えている人がいるはず!**と期待し,少しでも誰かの役に立つといいなと思い,DICOMファイルのデコーダーの基礎部分を何回かに分けて実装したいと思います.(最後にいきなりズルしてますが)

##DICOMデータ
DICOMデータは1つのファイルに

1. 患者名,患者ID,生年月日,年齢,性別など患者情報
1. 検査方法(CT, レントゲン, エコー, カテーテル, MRI, …),検査日,検査時間,使用した

元記事を表示

NavigationBarのボタンの位置を左右に動かす方法

こんにちは!

最近のアプリでよく見る、NavigationBarのleftやrightにボタンを複数追加しているようなUI、
実際あの手のUIを作る場合、Customで作るかそれっぽいのをViewで作ったりなどなど、ちょっと手間のかかるやり方があったりしますよね。

今回はそんなことしないで済む方法を見つけたので、ちょっと裏技的な感じになるのかもしれませんが、似たような記事がなかったので、書くことにしました。実装の参考にして頂ければと思います。

## 結論
– ButtonのItemImageのInsetsを調節すればそれなりに見える

## 調べたこと

いつからか正確にはわかりませんがNavigationBarのItemを複数設置する場合画像のようになっておりまして
UIButtonBarStackViewというViewが存在するので何も考えずに、 BarButtonItemにButtonを追加していくと、自動的にボタン同士のmarginが決まってしまいます。
(画像の青くなっているものがUIButtonBarStackViewです)

元記事を表示

XCTUnwrapを使ってUnitTestのunwrapをすっきり書く

# 概要

Xcode11以降に追加された`XCTUnwrap`を使ってテストコード中のOptional値のunwrapをスッキリ書く方法の紹介です。

## XCTUnwrapとは

公式ドキュメントには以下のような記載があります
https://developer.apple.com/documentation/xctest/3380195-xctunwrap

“`
Asserts that an expression is not nil, and returns the unwrapped value.
“`

ざっくり言えば「unwrapと`XCTAssertNotNil`」という感じです。

## どんなときに有効か

unwrapしたオブジェクトを計算に使いたいケースで有効。
unwrapしたオブジェクトが「`nil`であるかどうか」をテストしたいケースには向かない。

以下に具体例。

# 一般的なUnitTest中のunwrapの書き方(XCTUnwrapを使わない書き方)

“`swift

func testSample() {
let stri

元記事を表示

画像のヒストグラムを作る(2) (モノクローム画像編)

#画像のヒストグラムを作る(2) (グレイスケール)

昨日の続きです.

https://qiita.com/STrizzle-Naoki/items/4430fb4bfaa0cf40162f

昨日使用したvImageHistogramCalculation_ARGB8888ですが,Appleのレファレンスを参照すると,Planar8用のメソッドがあったので,今日はこれを使用してグレイスケール画像のヒストグラムを作成します.

> [vImageHistogramCalculation_Planar8(_:_:_:)](“https://developer.apple.com/documentation/accelerate/1544353-vimagehistogramcalculation_plana”)
> Calculates the histogram of a Planar8 image.

“`Swift
func vImageHistogramCalculation_Planar8(_ src: UnsafePointer,

元記事を表示

SwiftUIに内包されているStructまとめ – ViewLayout編

# はじめに
SwiftUIフレームワークに内包されている構造体の内、頻繁に利用する構造体を備忘録的にまとめようと思います。

* Views
* [Controls](https://qiita.com/yutaIke/items/a9fcda756eba4ff26900)
* Layout ☆本記事ではここが対象
* Paints
* Other
* Modifiers
* Controls
* Effects
* Layout
* Text
* Image
* List
* Styles
* Accessibility
* Events
* Gestures
* Shape Modifiers
* Other

など
今後残りの部分についてもまとめていければと思っています。

また、端末で動作確認できるようにもしているので、もし興味があればローカルで端末にビルドいただければと思います。
[ソースコード](https://github.com/YutaIke/swift-checking)
[iOS] RootViewControllerを実装して画面を切り替えてみた

#はじめに
アプリ開発において、ログイン/ログアウトによって画面を切り替えたい状況に至ったので、UIWindowのrootViewControllerを使ってアプリのどこからでも画面を切り替えられるようにしてみました。
下記GIF画像のようにアプリの画面切り替えを実装します。
switch_screen.gif

#環境
[Xcode] Version 12.4
[Swift] Version 5.3.2
[iOS] 14.4
[MacOS] 10.15.7 

#実装手順
1.UIWindowのrootViewControllerに設定するための、RootViewControllerを作成

どうやらrootViewControllerを直接切り替えることはあまり推奨されていないようです。よってrootViewCo

元記事を表示

OTHERカテゴリの最新記事