iOS日々の学び
他のオブジェクトとのマージンを確認する方法
Interface Builder
- オブジェクトを選択状態にする
-
optionキー
を押しながらカーソルをオブジェクトの外側へ移動させる
特定のオブジェクトへカーソルを合わせると、そのオブジェクトまでのマージンが表示される
オブジェクト同士のAlignment制約
Interface Builder
-
shiftキー
を押しながら複数オブジェクトを選択 -
Alignment
でおしりを揃えたりできる
SharedSequenceってなに?
'Driver<String>' (aka 'SharedSequence<DriverSharingStrategy, String>')
つまり
- Driver = SharedSequence
- <String> = <DriverSharingStrategy, String>
simulatorでネットワークエラー状態を再現する方法
ふつうにmacのWi-FiをOFFにする
参照したけど今回使わなかったもの
Network Link ConditionerをONにすると、シミュレーターのみならずMacのネットワークも影響を受ける
Xcode13で画面固定の設定方法
- Targets > General > Device Orientation > Portrait にチェック
- Targets > Info > Supported interface orientations (iPhone) > Item 1, Item 2を削除
参照した記事
プロジェクトの言語を日本語にする設定
-
project.pbxproj
を開く
open <プロジェクト名>.xcodeproj/project.pbxproj
- Region で検索。
-
developmentRegion = ja
に書き換える -
knownRegions
にja,
を追加
developmentRegion = ja;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
ja,
);
以上
カスタムフォントの追加方法
LaunchScreen.storyboard
に追加したカスタムフォントがシミュレータで反映されない問題
-> 調査中。スプラッシュ時点ではカスタムフォントは読み込まれていない可能性を感じている。
Xcode エリアの名前
[WIP] modalPresentationStyle の挙動まとめ
概要
viewDidLoad
内などに以下のように記述し、表示スタイルを指定することができる。
modalPresentationStyle = .fullScreen
種類
スタイル | 挙動 |
---|---|
automatic | システムが選択するデフォルトスタイル。ほとんどのViewControllerでは、.pageSheet スタイルにマップするが、一部のシステムViewControllerでは別のスタイルにマップする場合がある。 |
none | ---- |
fullScreen | 全画面表示 |
pageSheet | 下層のコンテンツを部分的にカバーする表示スタイル。コンテンツはおおよそ1ページ分の大きさで、高さが幅よりも大きくなる。実際の面積は、デバイスの画面サイズや方向など、いくつかの要因によって異なる。 |
formSheet | ---- |
currentContext | ---- |
custom | ---- |
overFullScreen | 遷移元のViewControllerがView階層から削除されず、遷移先のViewControllerが最前面に表示される。そのため、遷移先が透明なViewの場合、下のコンテンツが透けて見える。 |
overCurrentContext | 遷移元のViewControllerがView階層から削除されず、definesPresentationContext プロパティがtrueであるViewControllerの上に表示される。そのため、遷移先が透明なViewの場合、下のコンテンツが透けて見える。 |
popover | 背景のコンテンツは暗くなり、ポップオーバーの外側をタップすると、ポップオーバーが解除される。タップでポップオーバーを解除したくない場合は、関連する UIPopoverPresentationController オブジェクトの passthroughViews プロパティに一つまたは複数のビューを割り当てることができ、これは popoverPresentationController プロパティから取得することができる。iOS 13 以降では、水平または垂直にコンパクトな環境に対して、このオプションは .formSheet と同じように動作。iOS 12およびそれ以前では- 水平にコンパクトな環境では、このオプションは .fullScreen と同じように動作。- 水平方向が通常で垂直方向がコンパクトな環境では、このオプションは .formSheet と同じように動作。 |
blurOverFullScreen | ---- |
参照(挙動)
公式ドキュメント
modalTransitionStyle の挙動まとめ
概要
viewDidLoad
内などに以下のように記述し、遷移アニメーションのスタイルを指定することができる。
modalTransitionStyle = .crossDissolve
種類
スタイル | 挙動 |
---|---|
coverVertical | 画面の下部から上にスライドイン。デフォルト遷移スタイル |
flipHorizontal | 水平3Dフリップ(表裏反転) |
crossDissolve | ふわっと自然にフェードイン |
partialCurl | ページめくり |
※partialCurl
は、親ViewControllerがフルスクリーンビューを表示しており、modalPresentationStyle = .fullScreen
を使用している場合にのみサポートされている。
参照
公式ドキュメント
Simulatorを任意の位置情報に設定する方法
IB上でオブジェクトを選択しているのにインスペクタエリアにNo Selectionと表示される
参照
UIButtonのイメージとテキストの間のマージンを調整したい
Image Insets, Title Insetsの値を変更する
参照
UIStackViewのマージンがLayout Marginsで指定した値と異なっているときに確認すること
StackViewのAlignmentがFillになっているか確認する!
-> ここがLeading, Center, Trailingになっているとずれてしまう。
-> 例えば、 Label を中央揃えにしたいときは、StackViewではなくLabelのAlignmentで設定しよう
イメージのカラーを変更したい場合の登録方法
Image Set > Render As > Template Image にする
-> これで、IBやコードでTint Color を変更するとイメージカラーを変更することができる
参考
画像形式の使い分け
画像形式 | 特徴 |
---|---|
アイコン画像に最適。ベクター画像(Single Scale)として設定できる。 | |
PNG | ベタ塗り中心のイラストやロゴ、テキストのスクリーンショットなどに最適。 |
JPEG | 写真など色数の非常に多い画像に最適。3つのサイズ(x1,x2,x3)を用意する。 |
自分の会社では、基本的にアイコン画像、ベタ塗り中心のイラストなどはPDF、写真はJPEG形式でインポートする。
参考になった記事
前の画面へ戻るコード
XibView の見た目をiPhone型から四角形に変更する方法
Show the Attributes Inspector > Simulated Metrix > Size > Freeform
Before
After
ジェスチャーに干渉して欲しくないView の設定
今回は、ImageViewのタップジェスチャーを設定するので、その上部にあるGradientViewは遮られないようにしたい。
設定
Show the Attributes Inspector > Interaction > User Interaction Enabledのチェックを外す
ちなみに、この設定により、GradientViewのレイヤーに配置しているラベルもUser Interaction Enabledがfalseになる。
Viewのライフサイクル
awakeFromNib()
- IBやnibファイルがロードされた直後に1度だけ呼ばれる(viewDidLoadのようなタイミングか)
Xcodeテンプレートファイルの追加方法
手順
- Xcodeアプリのテンプレートフォルダへ移動
※Xcode_13.4.app
部分は自分のXcodeアプリの名前にします
cd /Applications/Xcode_13.4.app/Contents/Developer/Library/Xcode/Templates
- カレントディレクトリをFinderで開く
open .
- File Templates内にXcodeテンプレートファイルのフォルダを展開する
テンプレートファイルの追加完了
使ってみる
新規ファイルのテンプレート選択肢に表示されました!やったね!!
参考記事
[WIP] PHPickerとUIImagePicker の特徴まとめ
PHPicker
- 外部の写真フォルダを開いているのと同じ状態なのでアクセスへの許可が不要(ここちゃんと調べる)
- 選択した画像のみアプリへ情報を送ることができる
- 2021 WWDCにプロセスについて説明あるので見る
UIImagePicker
- アプリ内で写真フォルダを開くので写真フォルダへのアクセスに許可が必要
- カスタムしやすい
IB上でテキストの改行をする方法
Option
+ Enter
参照
[WIP] Universal Linksの設定
- ADP側のApp IDの設定で、「Associated Domain」にチェックを入れる(←忘れずに!)
- Xcode の設定
- Target > Signing&Capabilities > Associated Domains > Domains にドメインを追加
- AppDelegate にユニバーサルリンクのハンドリングを記述
- サーバーサイドの設定
-
apple-app-site-association
ファイルを作成- (Team ID は Apple Developer Program 上から確認できる)
- 作成したファイルを配置する
- Webサーバーの設定を確認
-
Deprecated の確認方法
- Deprecationの警告は、Deployment TargetがAPIが廃止されたバージョンより高い場合にのみ表示される。
- したがって、Deployment Targetを一時的に最新の iOS バージョンに設定すると、現在までのすべての非推奨の警告がコンパイラの警告として表示されるようになるはず。
手順
-
Project > Deployment Target > iOS Deployment Target を最新のバージョンに設定
-
すべてのDeprecationに対応後、Deployment Targetを以前のバージョンに戻す。
参照
デベロッパモードの設定方法
iPhone コントロールセンターに画面収録ボタンを追加する方法
会社のADPにある証明書およびProvisioning Profile の更新をした後、実機ビルドしたら Certificate に自分の名前の証明書が生成されている。その証明書を revoke したら実機ビルドができなくなってしまったとき
対応1
状況
会社のApple Developer Program の Development 証明書 に自分の名前の証明書が発行されている
原因
実機ビルドするときに Provisioning Profile がなく、紐付け先の証明書もないため生成されてしまった。
対応
実機ビルドする前に fastlane match を実行する。
生成されてしまった自分の名前の証明書は削除する。
対応2
状況
自分の名前の証明書を削除し、fastlane match を実行。
All required keys, certificates and provisioning profiles are installed 🙌
と表示され、完了したのに Xcode で実機ビルドしようとすると証明書のエラーになる。
どうやら先ほど revoke した自分の名前の証明書を参照してしまっている。
状況・対応
KeychainAccess に先ほどrevoke した自分の名前の証明書が残っており、それが参照されてしまっているので証明書をKeychainAccess から削除する。
- キーチェーンアクセスを開く
- 証明書名(自分の名前)、有効期限から先ほどrevoke した証明書を探し削除する
iPhoneでメモリーリークを簡単に検知する方法
- 設定アプリ > デベロッパ > Hang Detection をオンにし、一番厳しい(?)レベルの250ms に設定する
- Monitored Apps に記載されているアプリを起動している際に、指定した基準でメインスレッドに長く待機した(?) 画面で診断を出してくれます。
参照
輸出コンプライアンスの暗号化の質問を毎回聞かれないようinfo.plistに設定する方法
参照
iOS version market share(official)
Simulator にファイルを追加する方法
-
MacのFinderで、ファイルを選択
-
共有ボタンをクリック
-
共有先リストから「Simulator」を選択
-
ドロップダウンリストからデバイスを選ぶ
-
Simulatorの「ファイル」アプリが開かれるので、ファイルを保存する場所を指定して保存ボタンをクリック
〜完了〜