読むところ
About App Development with UIKit
お願い
初心者なりの解釈を多数書いているので、もし指摘事項ありましたらお気軽にコメントでいただけると幸いです。(むしろそのためにQiitaに投稿しているので)
ドキュメントを読んで得た新しい学び
- App Bundleという概念の存在
- App BundleにStoryBoardファイルが入っていること
-
LaunchScreen.storyboard
はアプリが準備中のときにだけ立ち上がるようになっている(かも) -
Info.plist
のplistはプロパティリストの略である - UIKitにはMVCを始めとする数々の設計思想がある。
(補足)ドキュメントメモ
Overview
Xcodeがアプリのビルドをするときに、App Bundleというものが作成されるようです。Bundle IDなど度々Bundleという言葉が登場していたのでそれのことなのでしょうか。そもそもApp Bundleという抽象的な位置づけを理解する必要がありそうです。
App Bundleはアプリに関連付けられたResourceというものと、コードを含んだ構造化されたディレクトリで、いわゆるXcodeのProject Navigatorに出ている構造がそのまま反映されているのだと思います。App Bundleの構造はXcodeがよしなに処理してくれるので気にしなくてもよさそうです。(逆にログから読み解くときは必要になるということなのかもしれません。)
Resourceは下記を含んでいます。
- Image Assets
- StoryBoardファイル
- 文字列ファイル
- アプリのメタデータ
StoryBoardのファイルはApp Bundleにそのまま保存されているのでしょうか。あまりそういうイメージがなかったので少し驚きました。(Xcodeがビルドしている段階でバイナリに変換されているものだとてっきり思っていました。)
アプリのメタデータはInfo.plist
も該当するのでしょうか。
Required Resources
App iconsとLaunch screen storyboardは必須のリソースだそうです。
あまり重要ではないですが、誤ってAssetsの中にあるApp iconを削除してしまったとき、ビルドできなくて怒られたことを思い出しました。
App icons
App iconsはホームスクリーンだけではなく、設定アイコンと他のアプリで起動するときに表示できるようですね。
App iconで気にすべきところは
- 複数の場所にアイコンが設置されること
- 複数のデバイスにアイコンが設置されること
- 複数のアプリアイコン
ですね。凝ったユーザー体験を提供しようとするとこれらのことを気にしたほうがよさそうです。
Launch screen storyboard
LaunchScreen.storyboard
は下記の目的で使用されます。
- 初期のUI
- スプラッシュスクリーン
- 実際のUIの簡易版 (a simplified version of your actual interface)
アイコンをタップするとこのスクリーンが表示されてユーザーにアプリが立ち上げ中であることを知らせることができる。
アプリの準備が完了したとき、自動的にこのスクリーンを隠して実際のUIを表示するようになる。
ここに書いてあることは抽象的ですが、おそらくアプリが準備中であることをシステムに通知できる仕組みがあるということを示唆していますね。AppDelegate
などにそのようなカスタムメソッドがあるのかもしれません。
また、簡易版のUIを表示する目的で使用されることがあるようですが、具体例がなかなか思いつかないですね。
Required App Metadeta
システムはApp Bundleの中にあるInfo.plist
からアプリの設定やどのような情報を扱えるか (capability) を引き出してきます。
ハードウェアの適用やシステムのフレームワークを使うかどうかを記述できます。
ここで記述された要件を満たしていないハードウェアからは、AppStoreからインストールすることすらできなくなるようです。独自デバイスを提供するAppleならではの良い仕様ですね。
※.plist
は"property list"の略称らしいです。
Code Structure of a UIKit app
UIKitは以下を担います。
- システムとのインタラクション
- メインイベントループの実行
- スクリーンへの表示
また、UIKitが提供するオブジェクトは、改良することも視野にいれて提供されているようです。
当たり前ですが、提供者のスタンスは知っておくべきですね。
UIKitのアプリはMVCに基づいて設計されています。
UIKitアプリの構造の図
この図と説明を見る通り、
それぞれのオブジェクトはしっかりと区分けされているようですね。今後の実装ではそれぞれのオブジェクトがMVCを前提に提供されていることは意識したほうが良さそうですね。たとえコード全体のアーキテクチャパターンがMVCではなくてでもです。
また、この図で黄、赤、青で色分けされている分類の通り、カスタムするためのものか、システムのものなのか、はたまた両方できるのか、意識することも重要そうですね。
UIWindow
の存在は知っていましたが、この図だとカスタムすることはできないようです。カスタムできるものなのかもと思っていたので今後は割り切ったほうが良さそうです。UIApplication
もアプリの状態を取得するときに使っていた経験の通り、システムとやりとりをするときに使うためだけのもののようですね。
UIDocument
はディスクに保存するためのデータを管理するためのオブジェクトだそうです。図にあるようにUIKit上にのっているので、スムーズな実装のために使うことがありそうです。
Foundation Frameworkはオブジェクトの表現を定義したり、Swift Standard LibraryではFoundationと同じ型が利用できるような仕組みを提供しています。
UIKitにあるもので特筆すべきものとして、UIView
とUIApplication
があります。
UIView
は(UIとして)レスポンシブルなコンテンツを表示するのはもちろん、UIView
をレンダリングをするときにMetalのようなフレームワークを使用する事が可能なようです。ゲームエンジンもこの仕組みを使用しているかもしれないですね。
UIApplicaiton
はメインのイベントループを実行したり、アプリ全体のライフサイクルを管理してくれます。
次回はProtecting the User’s Privacy
を読みます。お楽しみに。