バンドル
バンドルは、グループが実行可能なコードや画像や音声などの関連リソースと1つの場所に一緒にするファイルシステム内のディレクトリです。iOS と OS X では、アプリ、フレームワーク、プラグイン、その他のソフトウェアのタイプは、バンドルです。バンドルは、実行可能コードとそのコードが使用するリソースを保持する標準化された階層構造を持つディレクトリです。Foundation と Core Foundation は、バンドル内のコードとリソースを検索し、ロードするコードのための便宜を備えています。
注意:アプリは、サードパーティの開発者が iOS 上で作成できるバンドルの唯一のタイプです。
バンドルは、ユーザーと開発者にいくつかの利点をもたらします。それらは、アプリが簡単にインストールでき、また単にある場所から別の場所に移動することにより、ソフトウェアのアプリまたは他の部分を再配置することができるようになります。バンドルには、国際化の重要な要因もあります。バンドルの特別な名前のサブディレクトリにローカライズされたリソースを格納します。ローカライズされたリソースのプログラム的な便宜の外観は、ユーザーの言語設定に対応する場所にあります。
Xcode のプロジェクトのほとんどのタイプがあなたのため実行可能なビルドを作る際にバンドルを作成します。そのため、手作業でバンドルを作成する必要はほとんどありません。たとえそうだとしても、その構造とそれらの内部コードやリソースにアクセスするために理解しておくことが重要です。
バンドルの構造と内容
バンドルは、実行可能コード、画像、音声、nib ファイル、プライベート・フレームワークやライブラリ、プラグイン、ロード可能バンドル、または他のタイプのコードやリソースを含めることができます。また、情報プロパティリスト(Info.plist) と呼ばれる実行時構成ファイルが含まれています。これらの各項目は、バンドル構造内の適切な位置を占めています。イメージ、音声、および nib ファイルなどのようなリソースは、Resources のサブディレクトリ内に置かれます。それらは、ローカライズされたか、ローカライズされないかのいずれかになります。(ローカライズされた文字列の集合の文字列のファイルを含めて) ローカライズされたファイルは、lproj の拡張子を持つ Resources のサブディレクトリに置かれ、おそらくロケールの言語に対応する名前を持ちます。
バンドルリソースへのアクセス
各アプリは、アプリコードを含むバンドルであるメインバンドルを有しています。ユーザーがアプリを起動すると、メインバンドルにコードとリソースを発見し、即剤に必要なそれらをメモリにそれらをロードします。その後、アプリはメインバンドルまたは下位バンドルから必要に応じ、動的に(ゆっくりと)コードとリソースをロードします。
NSBundle クラスは、手続き型コードでは、Core Foundation の CFBundleRef の opaque(不透明)タイプであり、アプリケーションに、バンドル内のリソースを検索するための手段を与えます。Objective-C では、物理的なバンドルに対応しては NSBundle のインスタンスを取得する必要があります。アプリケーションのメインバンドルを取得するには、クラスメソッドの mainBundle を呼び出します。ファイル名、拡張子、および(オプションで) バンドルのサブディレクトリを指定したとき、他の NSBundle メソッドは、バンドルリソースへのパスを返します。リソースへのパスを取得した後は、適切なクラスを使用してメモリにロードできます。
ロード可能なバンドル
アプリンバンドルと同じように、ロード可能なバンドルのパッケージの実行可能コードおよび関連リソースは、実行時にはこれらのバンドルを明示的にロードします。高度なモジュラー、カスタマイズ可能な、拡張可能なアプリケーションを設計するためにロード可能なバンドルを使用できます。すべてのロード可能なバンドルは、バンドルのエントリポイントである 主要なクラス があります。バンドルをロードするときは、主要なクラスには NSBundle を投げかけて、クラスのインスタンスを作成するために返された Class のオブジェクトを使用しなければなりません。
前提条件の記事
関連記事
既出の議論
バンドルについて
次の章
前の章