Start Developing iOS Apps Today(sup.9)〜アプリのコアオブジェクトを知る

2013. 01. 02
UIKitフレームワークは全てのアプリの基盤を提供しますが、貴方のアプリの固有の動作の定義をするのはカスタムオブジェクトです。
貴方のアプリはイベントループの管理と主要なiOSとの相互通信を行う、僅かな特定のUIKitオブジェクトで構成されます。
サブクラス化やデリゲーション、その他の技術の組み合わせによって、貴方のアプリを実装するためにUIKitによって定義されたデフォルトの動作を変更します。

UIKitオブジェクトのカスタマイズに加え、他のオブジェクトの鍵となる設定を提供または定義する責任もあります。
オブジェクトの最も重要な設定はアプリのデータモデルで、その定義は完全に貴方の責任になります。
またユーザインターフェイスのオブジェクトの設定も提供する必要があります。
幸いUIKitは、貴方のインターフェイスを簡単に定義するための多数のクラスを提供しています。
出荷可能なアプリを提供するため、コードに加え、必要なリソースやデータファイルを提供しなければなりません。

iOSアプリケーションプログラミングガイド』は、この記事で触れている多くのトピックの詳細を説明しています。



●アプリのコアオブジェクト

アプリがユーザによって起動した時から終了する時まで、UIKitフレームワークはアプリのコアとなる動作のほとんどを管理します。
アプリの心臓部はUIApplicationオブジェクトで、システムからのイベントを受信し、処理を行う貴方のカスタムコードにディスパッチします。
その他のUIKitクラスもアプリの動作の管理部分で役割を果たしており、これらのクラスの全てが詳細を処理する貴方のカスタムコードを呼び出すのと同様の方法を持っています。

UIKitオブジェクトが貴方のカスタムコードとどのように連携するのかを理解するには、iOSアプリを構成するオブジェクトについて少し理解することが助けになります。
図1はiOSアプリで最も一般的に見られるオブジェクトを示し、表1は各オブジェクトの役割を説明しています。
図を見ると分かるように、iOSアプリはモデル-ビュー-コントローラのデザインパターンを中心に構成されています。
このパターンは、データの表示に使用するビューからモデルのデータオブジェクトを分離しています。
この分離は必要に応じてビューのスワップアウトを可能にすることによってコードの再利用を促進し、ユニバーサルアプリ(iPadとiPhoneの両方で実行することができるアプリ)を生成する際に特に有効です。

図1 iOSアプリのキーオブジェクト

core_objects_2x.png


表1 iOSアプリのオブジェクトの役割

オブジェクト説明
UIApplicationオブジェクトUIApplicationオブジェクトは基本的にサブクラスかせずに使用します。
このコントローラオブジェクトはアプリのイベントループを管理し、他の高レベルのアプリの動作を調整します。
貴方が独自にカスタマイズしたアプリレベルのロジックはアプリのデリゲートオブジェクトに存在し、このオブジェクトと連携して動作します。
アプリのデリゲートオブジェクトアプリのデリゲートは通常UIApplicationMain関数によって、アプリの起動時に生成されるカスタムオブジェクトです。
このオブジェクトの主な仕事は、アプリ内の状態遷移を処理することです。
例えば、このオブジェクトは起動時の初期化と、バックグラウンドとの行き来の遷移を処理を担当しています。
iOS 5以降では、アプリに関連する他のイベントの処理にアプリのデリゲートを使用することができます。
Xcodeのプロジェクトテンプレートは、UIResponderのサブクラスとしてアプリのデリゲートを宣言します。
UIApplicationオブジェクトがイベントを処理しない場合、その処理をアプリのデリゲートにディスパッチします。
ドキュメントとデータモデルオブジェクトデータモデルオブジェクトはアプリ固有のもので、アプリのコンテンツを格納します。
例えば、銀行取引アプリは金融取引を含むデータベースを格納するのに対し、描画アプリは画像オブジェクトまたは画像を生成する描画コマンドのシーケンスを格納します。
(描画コマンドの場合、画像オブジェクトは画像データのコンテナであるため、データオブジェクトのままです。)
またアプリは、データモデルオブジェクトの一部または全部を管理するドキュメントオブジェクト(UIDocumentのカスタムサブクラス)を使用することができます。
ドキュメントオブジェクトは、必須ではありませんが単一ファイルまたはファイルパッケージに属するデータをグループ化する便利な方法を提供しています。
ドキュメントについての詳細は『ドキュメントベースのデータモデルの定義』を参照してください。
ビューコントローラオブジェクトビューコントローラオブジェクトは、画面上でのアプリのコンテンツの表示を管理します。
ビューコントローラは単一のビューと、そのサブビューのコレクションを管理します。
提供されると、ビューコントローラがアプリのウィンドウに設置することで、ビューが表示されます。
UIViewControllerクラスは、全てのビューコントローラオブジェクトの基本クラスです。
ビューを読み込んで表示し、デバイスの回転に応じてビューを回転させたり、いくつかの他の標準的なシステムの動作のための機能をデフォルトで提供します。
UIKitと他のフレームワークは、イメージピッカーやタブバーインターフェイス、ナビゲーションインターフェイスなど、標準的なシステムのインターフェイスを実装するため、追加のビューコントローラを定義しています。
UIWindowオブジェクトUIWindowオブジェクトは、画面上の1つ以上のビューの表示を調整します。
ほとんどのアプリはメイン画面のコンテンツを表示するウィンドウを1つだけ持ちますが、外部ディスプレイにコンテンツを表示するために追加のウィンドウを持つ場合があります。
アプリのコンテンツを変更するには、対応するウィンドウに表示されているビューを変更するためにビューコントローラを使用します。
ウィンドウ自体を置換することはありません。
更にビューをホスティングするため、ウィンドウはビューとビューコントローラにイベントを送信するUIApplicationオブジェクトと連携します。
ビュー、コントロール、レイヤオブジェクトビューとコントロールは、アプリのコンテンツの視覚表現を提供します。
ビューは指定された矩形領域内にコンテンツを描画し、その領域内のイベントに応答するオブジェクトです。
コントロールはボタンやテキストフィールド、トグルスイッチなど、よく知られているインターフェイスオブジェクトを実装するための、応答可能なビューの特殊な種類です。
UIKitフレームワークは、コンテンツの多くの種類を表示するための標準的なビューを提供します。
またUIView(またはその子孫)を直接サブクラス化することによって、独自のカスタムビューを定義することができます。
ビューやコントロールを組み込むことに加えて、アプリもビューやコントロール階層にCore Animationレイヤを組み込むことができます。
レイヤオブジェクトは視覚的コンテンツを表示する実際のデータオブジェクトです。
ビューはそれらのコンテンツのレンダリングするために、裏舞台でレイヤオブジェクトを多用しています。
またインターフェイスにカスタムのレイヤオブジェクトを追加し、複雑なアニメーションや他の種類の洗練された視覚効果を実装することもできます。

あるiOSアプリを別のアプリと区別するのは、管理するデータ(と対応するビジネスロジック)と、ユーザにデータをどのように表示するかです。
ほとんどのUIKitオブジェクトとの相互作用は貴方のアプリを特徴付けるものではありませんが、動作を洗練するのに役立ちます。
例えばアプリのデリゲートのメソッドは、アプリが状態を変化させた時にカスタムコードが適切に応答できるよう、貴方に知らせます。



●データモデル

アプリのデータモデルはデータ構造と、データを整合性のある状態で維持するために必要なビジネスロジックから構成されます。
データモデルは、アプリのユーザインターフェイスから完全に分離して設計することはできません。
ただし、データモデルオブジェクトは独立して実装しなければならず、特定のビューまたはビューコントローラの存在に依存してはいけません。
ユーザインターフェイスからデータの独立性を維持すると、
簡単 実装 ユニバーサルアプリ(iPadとiPhoneの両方で実行できるもの)の実装が容易になり、また後で簡単にコードの一部を再利用することができます。

まだデータモデルを定義していない場合、iOSのフレームワークはそのための手助けを提供します。
以下の項では、データモデルの特定の種類を定義する際に使用することができる技術のいくつかを紹介します。


カスタムデータモデルの定義

カスタムデータモデルを定義する場合、任意の高レベルの構造を表現するためにカスタムオブジェクトを生成しますが、システムが提供する単純なデータ型を利用します。
Foundationフレームワークは、単純なデータ型の文字列や数値、その他の型をオブジェクト指向の方法で管理する多くのオブジェクトを提供しています。
新規にオブジェクトを定義する際はこれらのオブジェクトを使用するのが望ましく、時間を節約することになり、多くの他のシステムルーチンは組み込みのオブジェクトを使用すると想定しています。

表2 Foundationフレームワークのデータクラス

データクラス説明
文字列とテキストNSString (NSMutableString)
NSAttributedString
(NSMutableAttributedString)
iOSの文字列はUnicodeに基づいています。
文字列クラスは様々な方法で文字列の生成および操作のサポートを提供しています。
属性付き文字列クラスは定型化されたテキストをサポートし、Core Textとの組み合わせでのみ使用されます。
数値NSNumber
NSDecimalNumber
NSIndexPath
コレクション内に数値を格納したい場合は数値オブジェクトを使用します。
NSNumberクラスは整数や浮動小数点、ブール値、そしてchar値を表すことができます。
NSIndexPathクラスには一連の番号が格納されており、しばしば階層的なリストで多層選択を指定するために使用されます。
生のバイト列NSData (NSMutableData)
NSValue
生のバイトストリームを格納する必要がある場合は、データオブジェクトを使用します。
またデータオブジェクトは一般的にアーカイブ形式でオブジェクトを格納するために使用されます。
NSValueクラスは通常(カテゴリを使用して)拡張され、点や矩形のような一般的なデータ型のアーカイブに使用されます。
日付と時刻NSDate
NSDateComponents
タイムスタンプやカレンダーの日付、その他時間関連の情報を格納するためには日付オブジェクトを使用します。
URLNSURLネットワークリソースへの参照に使用する従来の方法に加えて、iOSのURLはファイルへのパスを格納するための望ましい方法です。
NSURLクラスはファイル関連の属性の取得と設定のサポートを提供します。
コレクションNSArray (NSMutableArray)
NSDictionary (NSMutableDictionary)
NSIndexSet
(NSMutableIndexSet)
NSOrderedSet
(NSMutableOrderedSet)
NSSet (NSMutableSet)
コレクションは関連するオブジェクトを一箇所にまとめてグループにするために使用します。
Foundationフレームワークは、いくつかの異なる種類のコレクションクラスを提供します。

データ関連のオブジェクトに加えて、通常のデータ型を管理するためのiOSフレームワークによって使用される、いくつかの一般的な他のデータ型があります。
独自のカスタムオブジェクトで類似したデータ型を表すには、以下のようなデータ型の使用を推奨します。

  • NSInteger/NSUInteger
    アーキテクチャに基づいたサイズの整数を定義する、符号付きおよび符号無しのスカラ整数を抽象化したものです。

  • NSRange
    一連の連続した部分の定義に使用する構造体です。
    例えば、文字列内の選択された文字を定義する範囲に使用することができます。

  • NSTimeInterval
    指定した時間間隔の(整数または小数の)秒数です。

  • CGPoint
    位置を定義するxとyの座標値です。

  • CGSize
    水平方向と垂直方向の大きさのセットを定義する座標値です。

  • CGRect
    矩形領域を定義する座標値です。

もちろんカスタムオブジェクトを定義する際に、常にクラスの実装に直接スカラ値を組み込むことができます。
実際、カスタムデータオブジェクトはメンバ変数にスカラ値とオブジェクト型を混在させることができます。
リスト1は、画像のコレクション用のサンプルクラスの定義を示しています。
このインスタンス内のクラスは、画像の配列と選択項目を表す配列のインデックスのリストが含まれています。
またクラスにはコレクションのタイトル用の文字列と、コレクションが現在編集可能かどうかを示すスカラのブール変数が含まれています。

リスト1 カスタムデータオブジェクトの定義

@interface PictureCollection : NSObject

@property (nonatomic, copy) NSString * title;
@property (nonatomic) BOOL editable;
@property (nonatomic, readonly) NSOrderedSet* pictures;
@property (nonatomic) NSMutableIndexSet *selection;

// Method definitions...

@end

カスタムオブジェクトにアンドゥ処理が必要かどうかを検討してください。
アンドゥを支援することは、貴方のオブジェクトに加えられた変更を奇麗に取り消すことができることを意味します。
貴方のオブジェクトが複雑なビジネスロジックを含んでいる場合、簡単にアンドゥすることができる方法をロジックに織り込む必要があります。
貴方のカスタムオブジェクトにアンドゥのサポートを実装するためのいくつかのヒントをここに示します。

  • オブジェクトへの変更が対称であるかを確認する必要があるようにメソッドを定義してください。
    例えば項目を追加するメソッドを定義する場合、同様の方法で項目を削除するためのメソッドを持っていることを確認してください。

  • メンバ変数の値を変更するために使用するコードから、ビジネスロジックを括り出してください。

  • 多段階のアクションでは、段階ごとにグループにし、現在のNSUndoManagerオブジェクトを使用してください。

Core Dataを使用した構造化データモデルの定義

Core Dataはスキーマ駆動のオブジェクトグラフの管理と永続化のためのフレームワークです。
基本的に、Core Dataは(モデル-ビュー-コントローラデザインパターンの観念での)モデルオブジェクトを保存し、それらから再度取得するのに役立ちます。
これはアーカイブに似ていますが、Core Dataはそれよりも遥かに多い機能を提供します。

  • Core Dataはモデルオブジェクトへの全ての変更を管理するための基盤を提供します。
    これによりアンドゥとリドゥ、およびオブジェクト間の相互関係を保持するための自動サポートを提供します。

  • iOSアプリにとって非常に重要な、任意の時間にメモリ内のモデルオブジェクトのサブセットだけを保持することができます。

  • モデルオブジェクトの記述にスキーマを使用します。
    GUIベースのエディタでモデルクラス(と、それらの間の関係を含む)の主要な機能を定義します。
    このスキーマはデフォルト値と属性値の検証の設定を含め、多量の基本的な機能を『何もせずとも』提供します。

  • オブジェクトの編集セットを個別に保持することができます。
    個別のセットは、例えばユーザが他のビューで表示されているデータに影響を与えること無く、あるビューで破棄される可能性のある編集を行いたい場合に役立ちます。

  • データストアのバージョン管理と移行のための基盤を持っています。
    バージョン管理は、簡単に古いバージョンのユーザファイルを現在のバージョンに更新することができます。

  • iCloudにデータを格納し、複数のデバイスからアクセスすることができます。

ドキュメントベースのデータモデルの定義

ドキュメントベースのデータモデルは、アプリによるファイルのディスクへの書き込みを管理する便利な方法です。
このデータモデルの種類では、ディスク上の単一ファイル(またはファイルパッケージ)の内容を表すために、ドキュメントオブジェクトを使用します。
ドキュメントオブジェクトはファイルの内容の読み込みや書き込みに対する責任があり、アプリのビューコントローラと連携して画面上のドキュメントの内容を表示します。
従来のドキュメントオブジェクトの用途は、ユーザデータを格納するファイルの管理でした。
例えば、テキストファイルを生成および管理するアプリでは、各テキストファイルを管理するために個別のドキュメントオブジェクトを使用していました。
一方、ファイルによってバックアップされている非公開のアプリデータも、ドキュメントオブジェクトを使用することができました。

図2にアプリのデータモデル内のドキュメントとファイル、そしてオブジェクト間の典型的な関係を示しています。
いくつかの例外はありますが、各ドキュメントは自己完結型であり、他のドキュメントと直接相互通信することはありません。
ドキュメントは単一ファイル(またはファイルパッケージ)で管理され、ファイル内で見つけた全てのデータの内容がメモリ内に生成されます。
各ファイルの内容は唯一であるため、各ドキュメントに関連付けられたデータ構造も唯一です。

図2 ファイルのコンテンツの管理にドキュメントを使用

document_model_2x.png

iOSアプリでドキュメントオブジェクトを実装するにはUIDocumentクラスを使用します。
このクラスは、ドキュメントのファイル管理を処理するために必要な、基本的な基盤を提供します。
UIDocumentのその他の利点は以下の通りです。

  • 適切な時期にドキュメントの内容の自動保存のサポートを提供します。

  • iCloudに格納されたドキュメントに必要なファイル管理の調整を処理します。
    またバージョンの競合を解決するフックも提供します。

  • アンドゥ操作のサポートを提供します。

アプリのドキュメントが必要とする特定の動作を実装するために、UIDocumentをサブクラス化する必要があります。



●ユーザインターフェイス

全てのiOSアプリはコンテンツを表示するために、少なくとも1つのウィンドウと1つのビューを持っています。
ウィンドウはコンテンツを表示するための領域を提供する、UIWindowクラスのインスタンスです。
ビューはコンテンツの描画(とタッチイベントの処理)を管理する責任がある、UIViewクラスのインスタンスです。
ビューオブジェクトを使用してインターフェイスを構築する場合、アプリのウィンドウには当然複数のビューオブジェクトが含まれます。
OpenGL ESを使用してインターフェイスを構築する場合、通常は単一のビューを持ち、コンテンツのレンダリングにそのビューを使用します。

またビューコントローラは、アプリのユーザインターフェイスで非常に重要な役割を果たしています。
ビューコントローラはUIViewControllerクラスのインスタンスで、単一のビューのセットを管理する責任があり、それらのビューとアプリの他の部分の間との相互通信を行います。
iOSアプリはコンテンツを表示するための空間の量が限られており、またビューコントローラはあるビューコントローラからビューをスワップアウトし、それらと別のビューコントローラのビューを置換するために必要な基盤を提供します。
したがって、あるコンテンツの型から別の型への遷移を実装するには、ビューコントローラが必要になります。

ビューコントローラオブジェクトは、常に自己完結型のユニットとして考える必要があります。
所有しているビューの生成と破棄を処理し、画面上への表示を処理し、ビューとアプリ内の他のオブジェクトとの間の相互通信を調整します。


UIKitのビューを使用したインターフェイスの構築

描画にUIKitのビューを使用するアプリは、基本的なインターフェイスを手早く組み立てることができるため、簡単に生成することができます。
UIKitフレームワークは、データを整理して表示するための多くの種類のビューを提供しています。
コントロール(ビューの特殊な種類)は、ユーザが適切なアクションを行う度にカスタムコードを実行するため、組み込みのメカニズムを提供しています。
例えば、ボタンをクリックするとボタンに関連付けられたアクションメソッドが呼び出されます。

UIKitのビューを基にしたインターフェイスの利点は、Xcodeに組み込まれているビジュアルインターフェイスエディタであるInterface Builderを使用して、グラフィカルにそれらを組み立てることができるということです。
Interface Builderは、貴方のインターフェイスを構築するのに必要なビューやコントロール、そしてその他のオブジェクトを標準のライブラリで提供します。
ライブラリからこれらのオブジェクトをドラッグした後、作業面上にドロップして望む場所に自由に配置できます。
ストーリーボードまたはnibファイルにそれらを保存する前に、これらのオブジェクトを設定するにはインスペクタを使用します。
インターフェイスをグラフィカルに組み立てる工程は同等のコードを記述するよりも速く、アプリをビルドして実行する必要無しにすぐに結果を視認することができます。

注:またUIKitのビュー階層にカスタムビューを組み込むこともできます。
カスタムビューは全ての描画とイベント処理のタスクの自身で処理する、UIViewのサブクラスです。

図3にビューオブジェクトのみ使用して構築されたインターフェイスのアプリの基本構造を示します。
この例では、ウィンドウ(ステータスバーを除く)の表示領域がメインビューで埋められ、単純な白い背景を提供しています。
また、メインビューにはイメージビューとテキストビュー、そしてボタンの3つのサブビューが含まれています。
これらのサブビューは、アプリがユーザにコンテンツを表示し、相互通信に応答するために使用されます。
階層内の全てのビューは単一のビューコントローラオブジェクトによって管理されています。

図3 ビューオブジェクトを使用したインターフェイスの構築

view_layer_objects_2x.png

通常のview-basedアプリは、ビューコントローラオブジェクトを使用して画面上のビューを調整します。
アプリは常に1つのビューコントローラを持ち、画面上の全てのコンテンツを表示する責任があります。
ビューコントローラはコンテンツビューを持ち、それ自体が他のビューを含んでいる場合があります。
いくつかのビューコントローラは、他のビューコントローラによって提供されるコンテンツのコンテナとして機能することもできます。
例えば、スプリットビューコントローラは隣り合う2つのビューコントローラのコンテンツを表示します。


ビューとOpenGL ESを使用したインターフェイスの構築

高フレームレートや精巧な描画性能を必要とするゲームやその他のアプリは、ビュー階層にOpenGL ESでの描画用に特化して設計されたビューを追加することができます。
OpenGL ESアプリの簡単なタイプは、1つのウィンドウオブジェクトとOpenGL ESによる描画のための単一のビュー、そして表示とコンテンツの回転を管理するためのビューコントローラを持っています。
より洗練されたアプリケーションは、インターフェイスの実装にOpenGL ESビューとUIKitビューを混在して使用することができます。

図4にインターフェイスの描画に単一のOpenGL ESビューを使用したアプリの構成を示します。
UIKitビューとは異なり、OpenGL ESビューはview-basedアプリで使用されている標準のレイヤの代わりに、異なる種類のレイヤオブジェクト(CAEAGLLayerオブジェクト)によって裏打ちされています。
CAEAGLLayerオブジェクトは、OpenGL ESでレンダリングすることができる描画サーフェイスを提供します。
描画環境を管理するために、アプリはEAGLContextオブジェクトを生成し、ビューにCAEAGLLayerオブジェクトを格納して簡単に取得できるようにしています。

図4 OpenGL ESを使用したインターフェイスの構築

gl_layer_objects_2x.png



●アプリバンドル

iOSアプリをビルドすると、Xcodeはバンドルとしてパッケージングします。
バンドルは関連するリソースを一纏めにしたファイルシステム内のディレクトリです。
iOSアプリのバンドルにはアプリの実行可能ファイルと、アプリアイコンや画像ファイル、ローカライズされたコンテンツなど、サポートするリソースファイルが含まれています。
表3にデモンストレーションを目的としたMyAppと呼ばれる典型的なiOSアプリのバンドル内容を示します。
この例では説明のみを目的としています。
この表でリストされているいくつかのファイルは、貴方のアプリバンドルでは表示されない場合があります。

表3 典型的なアプリバンドル

ファイル説明
アプリ実行可能ファイルMyApp実行可能ファイルはアプリのコンパイル済みのコードが含まれています。
アプリ実行可能ファイルの名前は、アプリ名から.app拡張子を除いたものと同じです。
このファイルは必須です。
情報プロパティリストファイルInfo.plistInfo.plistファイルはアプリの構成データが含まれています。
システムがどのようにアプリと相互通信するかを決定するために使用されます。
このファイルは必須で、Info.plistという名前である必要があります。
アプリアイコンIcon.png
Icon@2x.png
Icon-Small.png
Icon-Small@2x.png
アプリアイコンはデバイスのホーム画面上で貴方のアプリを表示するために使用されます。
他のアイコンは適切な場所にシステムによって使用されます。
ファイル名に@2xが付いているアイコンは、Retinaディスプレイを持つデバイスを対象としています。
アプリアイコンは必須です。
起動画像Default.png
Default-Portrait.png
Default-Landscape.png
アプリが起動している間、システムが一時的な背景として使用するファイルです。
アプリがユーザインターフェイスを表示する準備ができると、すぐに取り除かれます。
起動画像は少なくとも1つ必要です。
ストーリーボードファイル(またはnibファイル)MainBoard.storyboardストーリーボードは、アプリが画面上に表示するビューとビューコントローラが含まれています。
ストーリーボード内のビューは、それらを表示するビューコントローラに応じて構成されます。
またストーリーボードは、あるビューのセットから別のセットへユーザを誘導する(セグエと呼ばれる)遷移を識別します。
メインストーリーボードのファイル名は、プロジェクト生成時にXcodeによって設定されます。
Info.plistファイルのNSMainStoryboardFileキーに異なる値を割り当てることによって、名前を変更することができます。
NSMainStoryboardFileキーをNSMainNibFileキーに置換し、メインnibファイルを指定することによって、アプリはストーリーボードの代わりにnibファイルを使用することができます。
ストーリーボードの使用はオプションですが推奨されています。
アドホック配布アイコンiTunesArtworkアプリをアドホックで配布する場合、512 x 512ピクセルのバージョンのアプリアイコンを含めます。
このアイコンは通常iTunes Connectに提出する素材を元にApp Storeによって提供されます。
しかしApp Storeを経由しないアプリのアドホック配布では、App Storeの代わりにアプリバンドル内にアイコンが存在している必要があります。
iTunesはアプリを表すために、このアイコンを使用します。
(アプリをこの方法で配布する場合、App Storeに提出するものと同じファイルを指定する必要があります。)
アイコンのファイル名は、ファイル名に拡張子を含まないiTunesArtworkである必要があります。
このファイルはアドホック配布するためには必須で、それ以外の場合はオプションです。
SettingsバンドルSettings.bundleSettingsアプリを介してカスタムアプリの設定を公開したい場合、Settingsバンドルを含める必要があります。
このバンドルにはプロパティリストのデータと、アプリの設定を定義する他のリソースファイルが含まれています。
Settingsアプリは、貴方のアプリが必要とするインターフェイス要素を組み立てるために、このバンドルの情報を使用します。
このバンドルはオプションです。
非ローカライズリソースファイルsun.png
mydata.plist
非ローカライズリソースには、画像やサウンドファイル、動画、そしてアプリが使用するカスタムデータファイルのようなものが含まれます。
これらのファイルは全てアプリバンドルの最上位に位置している必要があります。
ローカライズリソースを置くサブディレクトリen.lproj
fr.lproj
es.lproj
ローカライズされたリソースは言語固有のプロジェクトディレクトリに配置する必要があり、名前はISO 639-1の言語略語に.lproj接尾辞を加えた構成になります。
(例えばen.lproj、fr.lproj、es.lprojディレクトリには、英語、フランス語、スペイン語にローカライズされたリソースが含まれます。)
iOSアプリは国際化し、サポートする各言語毎にlanguage.lprojディレクトリを持つ必要があります。
アプリのカスタムリソースのローカライズされたバージョンを提供するだけでなく、アプリアイコン、起動画像、そしてSettingsアイコンを、言語固有のプロジェクトディレクトリ内に同名ファイルを配置するによってローカライズすることができます。



参考文献

Apple/Start Developing iOS Apps Today

Apple/Know the Core Objects of Your App

0 CommentsPosted in 資料





bose_soundsport_free
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
09 | 2017/10 | 11
Sun Mon Tue Wed Thu Fri Sat
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

bose_soundsport_free
Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR