原文:[[http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/LoadingCode/Tasks/CreatingBundles.html|Code Loading Programming Topics: Creating Loadable Bundles]] ====== 読込み可能バンドルの作成 ====== 本章では、XcodeによるCocoaの読込み可能バンドル─アプリケーションコンポーネントやプラグイン─の作り方を解説します。 Xcodeは読込み可能バンドル作成用のグラフィカルなツールを提供します。 読込み可能バンドルのビルドはアプリケーションのビルドと非常に良く似ています。 工程はは基本的な3つのステップから構成されます: - Xcodeテンプレートから新規プロジェクトを作る - ソースファイルを準備し編集する - バンドルに関する情報にあわせてプロジェクト設定を変更する 以後の節でこれら工程の詳細を解説します。 ===== プロジェクトの作成 ===== 読込み可能バンドルプロジェクトの作成は、アプリケーションプロジェクトの作成と大変良く似ています。適切なプロジェクトテンプレートを選択するだけです。 読込み可能バンドルプロジェクトを作成するには、以下の手順を踏みます: - Xcodeを起動 - 「ファイル」メニューから「新規プロジェクト…」を選択 - テンプレートリストから「Cocoa Bundle」を選択 - 「次へ」をクリック - プロジェクトの保存場所を選択し「完了」をクリック ===== ソースファイルとリソースの準備 ===== Cocoa Bundleテンプレートから作成した新規プロジェクトは1つのソースファイル、''main.c''とCocoaフレームワークへの参照を持っています。 殆どの場合、開発者はこのファイルを削除し、自分のソースを追加することでしょう。 Cocoaアプリケーションがそうであるように、新しいCocoaクラスや他のソースファイルの追加と同様、リソースやフレームワークの追加が可能です。 Cocoaにおける最小の読込み可能バンドルは、2つのファイル─1つがインタフェース(''MyClass.h'')で、もう1つが実装ファイル(''MyClass.m'')─による1つのクラスで構成されます。 [[#ターゲット設定の変更]]で記述のあるように、バンドル内のクラスのうち1つを主要クラスに設定するべきです。 主要クラスが選択されていなければ、NSBundleは(Xcodeウィンドウに表示される)プロジェクトの最初のクラスを主要クラスとして使用します。 読込み可能バンドルがプラグインの場合、ホストアプリケーション開発者は大抵、フレームワークの中でプラグインアーキテクチャのインタフェースを提供します。 このフレームワークは典型的に、全てのプラグインの主要クラスが継承するクラス、ないし主要クラスが採用する(形式または非形式の)プロトコルを持ちます。 ===== ターゲット設定の変更 ===== バンドルが“善良なコンポーネント”(a good citizen)となるよう、バンドルの情報プロパティリストで2つの設定をする必要があります: - バンドル識別子 - 主要クラス バンドル識別子はシステム上の全てのバンドル─アプリケーション、カーネル拡張、全ての読込み可能バンドル、そしてその他の種類のバンドルで一意の識別子として働きます。 バンドル識別子は''com.apple.screensaver.Abstract''のように、DNS風の名前を逆転させたものにしなければなりません。 主要クラスはCocoaバンドルのエントリーポイントとして働きます。 [[翻訳:adc:cocoa:foundation:コード読込みプログラミング概論:名前衝突の防止]]で解説するように、グローバルで一意となるような方法で名付けなければなりません。 主要クラスが選択されていなければ、NSBundleが勝手に選びます。 これら設定を変更するには、以下の手順を踏んで下さい: - プロジェクトの「ターゲット」ペインを開く - 「ターゲット」グループのターゲット一覧からバンドルを選ぶ - Under Info.plist Entries > Simple View, select Basic Information. - Enter the desired bundle identifier into the text field labeled “Identifier:”. - Also under Info.plist Entries > Simple View, select Cocoa-Specific. - Enter the name of the principal class into the text field labeled “Principal class:”.