Open36

iOS日々の学び

JuliennuJuliennu

他のオブジェクトとのマージンを確認する方法

Interface Builder

  • オブジェクトを選択状態にする
  • optionキーを押しながらカーソルをオブジェクトの外側へ移動させる


    特定のオブジェクトへカーソルを合わせると、そのオブジェクトまでのマージンが表示される
JuliennuJuliennu

オブジェクト同士のAlignment制約

Interface Builder

  • shiftキーを押しながら複数オブジェクトを選択
  • Alignmentでおしりを揃えたりできる
JuliennuJuliennu

SharedSequenceってなに?

'Driver<String>' (aka 'SharedSequence<DriverSharingStrategy, String>')

つまり

  • Driver = SharedSequence
  • <String> = <DriverSharingStrategy, String>
JuliennuJuliennu

Xcode13で画面固定の設定方法

  • Targets > General > Device Orientation > Portrait にチェック
  • Targets > Info > Supported interface orientations (iPhone) > Item 1, Item 2を削除

参照した記事

https://ios-docs.dev/rotate/

JuliennuJuliennu

プロジェクトの言語を日本語にする設定

  • project.pbxprojを開く
open <プロジェクト名>.xcodeproj/project.pbxproj
  • Region で検索。
  • developmentRegion = ja に書き換える
  • knownRegionsja, を追加
developmentRegion = ja;
hasScannedForEncodings = 0;
knownRegions = (
	en,
	Base,
         ja,
);

以上

Hidden comment
Hidden comment
JuliennuJuliennu

[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 ----

参照(挙動)

https://medium.com/@ryu1sazae/modal-presentation-in-ios-e1fa6d89df24#:~:text=modalPresentationStyle is the property of,of the presented view controller.

公式ドキュメント

https://developer.apple.com/documentation/uikit/uimodalpresentationstyle

JuliennuJuliennu

modalTransitionStyle の挙動まとめ

概要

viewDidLoad内などに以下のように記述し、遷移アニメーションのスタイルを指定することができる。

modalTransitionStyle = .crossDissolve

種類

スタイル 挙動
coverVertical 画面の下部から上にスライドイン。デフォルト遷移スタイル
flipHorizontal 水平3Dフリップ(表裏反転)
crossDissolve ふわっと自然にフェードイン
partialCurl ページめくり

partialCurlは、親ViewControllerがフルスクリーンビューを表示しており、modalPresentationStyle = .fullScreenを使用している場合にのみサポートされている。

参照

https://superhahnah.com/swift-modal-transition-style/

公式ドキュメント

https://developer.apple.com/documentation/uikit/uimodaltransitionstyle

Hidden comment
Hidden comment
Hidden comment
JuliennuJuliennu

UIStackViewのマージンがLayout Marginsで指定した値と異なっているときに確認すること

StackViewのAlignmentがFillになっているか確認する!
-> ここがLeading, Center, Trailingになっているとずれてしまう。
-> 例えば、 Label を中央揃えにしたいときは、StackViewではなくLabelのAlignmentで設定しよう

JuliennuJuliennu

画像形式の使い分け

画像形式 特徴
PDF アイコン画像に最適。ベクター画像(Single Scale)として設定できる。
PNG ベタ塗り中心のイラストやロゴ、テキストのスクリーンショットなどに最適。
JPEG 写真など色数の非常に多い画像に最適。3つのサイズ(x1,x2,x3)を用意する。

自分の会社では、基本的にアイコン画像、ベタ塗り中心のイラストなどはPDF、写真はJPEG形式でインポートする。

参考になった記事

https://lovemac.jp/5045#merihari-toc-item-3

JuliennuJuliennu

XibView の見た目をiPhone型から四角形に変更する方法

Show the Attributes Inspector > Simulated Metrix > Size > Freeform

Before

After

JuliennuJuliennu

ジェスチャーに干渉して欲しくないView の設定

今回は、ImageViewのタップジェスチャーを設定するので、その上部にあるGradientViewは遮られないようにしたい。

設定

Show the Attributes Inspector > Interaction > User Interaction Enabledのチェックを外す

ちなみに、この設定により、GradientViewのレイヤーに配置しているラベルもUser Interaction Enabledがfalseになる。

JuliennuJuliennu

Viewのライフサイクル

awakeFromNib()

  • IBやnibファイルがロードされた直後に1度だけ呼ばれる(viewDidLoadのようなタイミングか)
Hidden comment
JuliennuJuliennu

Xcodeテンプレートファイルの追加方法

手順

  1. Xcodeアプリのテンプレートフォルダへ移動
    Xcode_13.4.app 部分は自分のXcodeアプリの名前にします
cd /Applications/Xcode_13.4.app/Contents/Developer/Library/Xcode/Templates
  1. カレントディレクトリをFinderで開く
open .
  1. File Templates内にXcodeテンプレートファイルのフォルダを展開する

テンプレートファイルの追加完了

使ってみる

新規ファイルのテンプレート選択肢に表示されました!やったね!!

参考記事

https://yamatooo.blog/entry/2021/03/04/083000

JuliennuJuliennu

[WIP] PHPickerとUIImagePicker の特徴まとめ

PHPicker

  • 外部の写真フォルダを開いているのと同じ状態なのでアクセスへの許可が不要(ここちゃんと調べる)
  • 選択した画像のみアプリへ情報を送ることができる
  • 2021 WWDCにプロセスについて説明あるので見る

https://developer.apple.com/videos/play/wwdc2021/10046/

UIImagePicker

  • アプリ内で写真フォルダを開くので写真フォルダへのアクセスに許可が必要
  • カスタムしやすい
JuliennuJuliennu

[WIP] Universal Linksの設定

https://grandbig.github.io/blog/2017/12/02/universallink/

  • ADP側のApp IDの設定で、「Associated Domain」にチェックを入れる(←忘れずに!)
  • Xcode の設定
    • Target > Signing&Capabilities > Associated Domains > Domains にドメインを追加
    • AppDelegate にユニバーサルリンクのハンドリングを記述
  • サーバーサイドの設定
    • apple-app-site-association ファイルを作成
      • (Team ID は Apple Developer Program 上から確認できる)
    • 作成したファイルを配置する
    • Webサーバーの設定を確認
JuliennuJuliennu

Deprecated の確認方法

  • Deprecationの警告は、Deployment TargetがAPIが廃止されたバージョンより高い場合にのみ表示される。
  • したがって、Deployment Targetを一時的に最新の iOS バージョンに設定すると、現在までのすべての非推奨の警告がコンパイラの警告として表示されるようになるはず。

手順

  • Project > Deployment Target > iOS Deployment Target を最新のバージョンに設定

  • すべてのDeprecationに対応後、Deployment Targetを以前のバージョンに戻す。

参照

https://developer.apple.com/forums/thread/28480
https://hachinobu.hateblo.jp/entry/20121213/1355375171

JuliennuJuliennu

会社の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 した証明書を探し削除する