UIKitおよびXcodeがiOSまたはtvOSアプリ向けに提供する基本的なサポートについて説明します。
概要
UIKitフレームワークは、iOSおよびtvOSアプリの構築に必要な中核オブジェクトを提供します。これらのオブジェクトを使って、コンテンツをスクリーンに表示し、そのコンテンツを操作して、システムとのインタラクションを管理します。アプリはその基本的な動作にUIKitを利用します。UIKitには、特定のニーズに合わせてその動作をカスタマイズするためのさまざまな方法が備わっています。
重要
iOSまたはtvOSアプリの開発を始めるときは必ず、Appleの統合開発環境であるXcodeでプロジェクトを作成してください。Xcodeが手元にない場合は、App Storeからダウンロードできます。developer.apple.com/jp/から最新バージョンをダウンロードすることもできます。
Xcodeが提供するテンプレートプロジェクトは、あらゆるアプリ制作の出発点として利用できます。例として、図1に、XcodeでSingle View アプリテンプレートを使って作成したアプリの構造を示します。このテンプレートプロジェクトでは表示するユーザーインターフェイスを最小限に抑えているため、プロジェクトをすぐに構築および実行して、その結果をデバイスまたはシミュレータで確認できます。
アプリのビルドでは、Xcodeがソースファイルをコンパイルし、プロジェクト用のApp Bundleを作成します。App Bundleは構造化されたディレクトリで、コードとアプリに関連付けられたリソースを含んでいます。リソースには、コードをサポートする画像アセット、Storyboardファイル、文字列ファイル、アプリのメタデータなどが含まれます。App Bundleの構造は重要ですが、リソースを配置すべき場所はXcodeが知っているため、ここでは心配する必要はありません。
必須のリソース
すべてのUIKit アプリに以下のリソースが必要です。
-
アプリアイコン
-
起動画面Storyboard
アプリアイコンは、ホーム画面や「設定」などあらゆる場所に表示され、そこでは作成するアプリを他のアプリと区別する必要があります。アイコンはさまざまな場所およびデバイスで使用されるため、XcodeプロジェクトのアプリIcon画像アセットで各々のバージョンのアプリアイコンを指定します。アプリアイコンは、ユーザーがホーム画面でアプリをすぐに識別できるような特徴を持つ必要がありますが、アイコンの細部を変化させて、場所によってそれぞれ異なる画像サイズに対応させることができます。
Launch
ファイルはアプリの最初のユーザーインターフェイスを構成するもので、スプラッシュ画面または実際のインターフェイスの簡易版のいずれかになります。ユーザーがアプリのアイコンをタップすると、起動画面がただちに表示され、アプリが現在起動中であることをユーザーに知らせます。また、起動画面は初期化中のアプリを隠すカバーの役割も果たします。アプリの準備が完了すると、起動画面が非表示になり、アプリの実際のインターフェイスが表示されます。
必須のアプリメタデータ
システムは、アプリの構成と機能に関する情報をApp Bundleの情報プロパティリスト(Info
)ファイルから取得します。Xcodeは、すべての新規プロジェクトテンプレートで事前に設定済みのファイルを提供しますが、多くの場合、何らかの修正が必要になります。たとえば、アプリが特定のハードウェアに依存しているか、特定のシステムフレームワークを利用している場合は、これらの機能に関連する情報をこのファイルに追加する必要があります。
Info
ファイルに対する一般的な修正事項の1つに、アプリのハードウェアおよびソフトウェア要件の宣言があります。これらの要件を宣言することで、作成するアプリの実行に何が必要かをシステムに伝えます。たとえば、ナビゲーションアプリは、ターンバイターンの経路案内を行うためにGPSハードウェアが存在していることを要件とします。App Storeでは、アプリの要件を満たしていないデバイス上にアプリがインストールされないように対策を講じています。
Info
ファイルに含めることができるキーの詳細については、「情報プロパティリストキーのリファレンス(英語)」を参照してください。
UIKit アプリのコード構造
UIKitは、アプリの中核を成すオブジェクトを多数提供します。これには、システムとのインタラクション、アプリのメインイベントループの実行、コンテンツをスクリーンに表示するオブジェクトが含まれます。これらのオブジェクトのほとんどはそのまま使えますが、若干の修正が必要なこともあります。アプリの実装にあたっては、どのオブジェクトをいつ修正すべきかを理解しておくことが重要です。
UIKit アプリの構造はModel(モデル)-View(ビュー)-Controller(コントローラ)(MVC)設計パターンに基づいており、オブジェクトはその役割別に分離して実装されます。モデルオブジェクトはアプリのデータとビジネスロジックを管理し、ビューオブジェクトは、データのビジュアル表現を提供します。コントローラオブジェクトは、モデルオブジェクトとビューオブジェクト間のブリッジとしての役割を果たし、適切な時にそれらのオブジェクト間でデータを移動させます。
図4は、典型的なUIKit アプリの構造を示しています。アプリのデータ構造を表すモデルオブジェクトは各自で指定します。ビューオブジェクトのほとんどはUIKitから提供されますが、必要に応じて各自のデータのカスタムビューを定義することもできます。データオブジェクトとUIKitビューの間のデータ交換はビューコントローラとアプリデリゲートオブジェクトが調整します。
UIKitおよびFoundationフレームワークは、アプリのモデルオブジェクトの定義に使う基本型の多くを備えています。UIKitは、ディスクベースのファイルに属するデータ構造を整理するためのUIDocument
(英語)オブジェクトを提供し、Foundationフレームワークは、文字列、数値、配列などのデータ型を表す基本オブジェクトを定義します。Swift標準ライブラリ(英語)には、Foundationフレームワークで提供されているのと同じデータ型の多くが用意されています。
UIKitはアプリのコントローラおよびビューレイヤに存在するほとんどのオブジェクトを提供します。具体的には、コンテンツのスクリーン表示をほとんど処理するUIView
(英語)クラスを定義しています(Metalやほかのシステムフレームワークを使ってコンテンツをスクリーンに直接、レンダリングすることもできます)。UIApplication
(英語)オブジェクトはアプリのメインイベントループを実行し、アプリのライフサイクル全体を管理します。