インフォメーションプロパティリスト ファイル
インフォメーションプロパティリスト ファイルは、バンドル化された実行可能ファイルのための根源的な設定情報を格納しています。
ほとんどのバンドルは、バンドルの設定情報のほとんどを格納している、この種類の(通常は Info.plist という名前の)ファイルを最低限一つは持っています。他のファイルもバンドルの構成要素に応じて存在していることがあります。
すべてのプロパティリスト ファイルは Unicode UTF-8 を用いてエンコードされたテキストデータを含んでおり、Extensible Markup Language (XML)コードを用いて構造化されています。XML構造は、ファイル内に階層的に構造化された情報を可能にするという、大きなプログラム上の利便性を持ちます。
XMLの要素は配列、辞書、文字列、その他の単純な型といったエンティティと対応しています。個々のプロパティは単純な型か、他のプロパティのコンテナ【容器】を表すことができます。
重要:この次のセクションでは、バンドルの内部に属するファイルとディレクトリの大文字始まり【capitalization】に注意を払ってください。CFBundle と NSBundle は、バンドルディレクトリの内部のリソースを探すときに、大文字と小文字の区別をします。大文字と小文字の不一致は、実行時にあなたのリソースの発見を妨げることがあるでしょう。
標準インフォメーションプロパティリスト
慣例により、バンドルのインフォメーションプロパティリスト ファイルは Info.plist という名前を持ちます。このファイルはバンドルの Contents ディレクトリに属しており、すべての対応プラットフォームのための設定情報を格納しています。
けれども、もしあなたのアプリケーションに、異なるプラットフォームごとに異なる設定を行いたいのであれば、あなたのインフォメーションプロパティリスト ファイルのプラットフォーム固有版を含めることができます。
これらのファイルはあなたの Contents ディレクトリの中に属します。各ファイルの名前は、"Info-<プラットフォーム名>.plist"という形式になります。
今のところ対応しているプラットフォームは macos および macosclassic なので、あなたは以下のプラットフォーム固有のインフォメーションプロパティリスト ファイルを定義することができます…
- Mac OS X アプリケーション専用のプロパティを含む Info-macos.plist
- Classic互換環境で動作するアプリケーション専用のプロパティを含む Info-macosclassic.plist
NSBundle および CFBundle はあなたのバンドルからインフォメーションプロパティリスト ファイルを一つだけ読み込み、一般版【Info.plist】よりもプラットフォーム固有版を優先します。
従って、もしあなたのバンドルに、あなたがプラットフォーム固有のインフォメーションプロパティリスト ファイルを提供するのであれば、アプリケーションを設定するために必要なキーのすべてを、これらのそれぞれが確実に含むようにしてください。
そうでないと、もしあなたが必要なキーを Info-macos.plist ファイルと Info.plist ファイルの間で分割してしまうと、Info.plist ファイル内のキーは無視されてしまいます。
あなたは、アプリケーション固有の設定キーのための値を記録するために、必要に応じて独自のプロパティリスト【ファイル】を作成することができます。もしあなたが独自のプロパティリストを作成するのであれば、残りのあなたのアプリケーション固有のリソースと共に、あなたの Contents/Resources ディレクトリにこれらを置いてください。
もし、あなたのキーをすべて一箇所に記録したければ、あなたのバンドルのインフォメーションプロパティリスト ファイルにあなたの【独自】キーを含めても構いません。
各国語化プロパティリストの値
もし、あなたのインフォメーションプロパティリスト ファイルがユーザに対して表示されることがある値を含むのであれば、あなたはこれらのプロパティのために、各国語化された値を提供したいと思うことでしょう。
各国語化された値のために、あなたのバンドルの各言語固有リソースディレクトリに InfoPlist.strings ファイルを提供する必要があります。この strings ファイルの内部には、あなたが各国語化したいプロパティに対するキーを、適切な翻訳と共に指定します。
あなたが実行時にプロパティの値を取得するときには、NSBundle と CFBundle のルーチンが、あなたの指定したキーのために適切な言語サブディレクトリの InfoPlist.strings ファイルを調べます。
もし strings ファイルにキーが存在すれば、そのルーチンは対応する値を返します。
もしキーがどの言語ファイルにも存在しなければ、ルーチンはあなたのインフォメーションプロパティリスト ファイルから共通版のキーを返します。
たとえば、テキストエディット アプリケーションはFinderに表示されるいくつかのキーを持っているため、各国語化される必要があります。あなたのインフォメーションプロパティリスト ファイルは、以下のキーを定義することになるでしょう…
<key>CFBundleDisplayName</key>
<string>TextEdit</string>
<key>NSHumanReadableCopyright</key>
<string>Copyright -© 1995-2002, Apple Computer, Inc.,All Rights Reserved.
</string>
次に、テキストエディットのためのフランス語の各国語化は、その Contents/Resources/French.lproj ディレクトリ内の InfoPlist.strings 内に、以下の文字列を含みます…
CFBundleDisplayName = "TextEdit";
NSHumanReadableCopyright = "Copyright © 1995-2002 Apple Computer Inc.\nTousdroits reserves.";
各国語化バンドルについての詳細は、Bundle Programming Gideを参照してください。
プロパティリストの作成と編集
プロパティリストを作成したり、既存のリストを編集するための最も単純な方法は、Property List Editor アプリケーションを使用することです。
このアプリケーションは Xcode Tools CD と共に出荷され、/Developer/Applications/Utilities ディレクトリにインストールされます。あなたがこのアプリケーションを起動すると、あなたが編集するための新しい、空のプロパティリストを自動的に開きます。
基本的なプロパティリストを作成するためには、ルート要素と、一つかそれ以上の子要素【children】を追加します。ルート要素は常に辞書型です。ルート要素の子要素は、単純な型(文字列、数字、真偽型、日付、データ)のいずれかか、集合型【collection type】(配列か辞書)の一つとすることができます。
一度プロパティリストを保存すれば、あなたはそれを Property List Editor か、UTF-8エンコーディングに対応した、お好きなテキストエディタを用いて編集することができます。あなたは任意のXMLエディタでもそのファイルを編集することができますが、必ずUTF-8でファイルを保存するように気をつけてください。
重要:もし、手打ちでインフォメーションプロパティリスト ファイルを作成するのであれば、ファイル名の最初の文字を大文字で始める必要があることを忘れないでください。CFBundle と NSBundle は、バンドル内の(Info.plist ファイルを含む)リソースファイルを探すときに、大文字と小文字の違いを考慮します。
インフォメーションプロパティリスト ファイルの例
リスト 1は、Sketch サンプルアプリケーションの Info.plist ファイルを示しています。 Sketch は Cocoa アプリケーションなので、メインアプリケーションリソースの位置を見分けるために NSMainNibFile および NSPrincipalClass キーを含みます。また Sketch はいくつかの種類のファイルを用いて作業することを簡単にするために、これらの書類タイプを登録しています。 それぞれのキーの意味についての詳細は、「プロパティリスト キー リファレンス」(15ページ)を参照してください。
リスト 1 Sketch デモアプリケーション用の Info.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>sketch</string>
<string>draw2</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>Draw2File</string>
<key>CFBundleTypeName</key>
<string>Apple Sketch Graphic Format</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>NSDocumentClass</key>
<string>SKTDrawDocument</string>
<key>NSExportableAs</key>
<array>
<string>NSPDFPboardType</string>
<string>NSTIFFPboardType</string>
</array>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>pdf</string>
</array>
<key>CFBundleTypeName</key>
<string>NSPDFPboardType</string>
<key>CFBundleTypeRole</key>
<string>None</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>tiff</string>
<string>tif</string>
</array>
<key>CFBundleTypeName</key>
<string>NSTIFFPboardType</string>
<key>CFBundleTypeRole</key>
<string>None</string>
</dict>
</array>
<key>CFBundleExecutable</key>
<string>Sketch</string>
<key>CFBundleIconFile</key>
<string>Draw2App</string>
<key>CFBundleIdentifier</key>
<string>com.apple.CocoaExamples.Sketch</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.3.3</string>
<key>CFBundleSignature</key>
<string>sktc</string>
<key>CFBundleVersion</key>
<string>45</string>
<key>NSAppleScriptEnabled</key>
<string>YES</string>
<key>NSMainNibFile</key>
<string>Draw2</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
フラットな実行可能ファイルに Info.plist を加える
たとえあなたのプログラムがバンドル構造を使用しないとしても、システムへの情報の断片を識別するために、依然としてインフォメーションプロパティリスト ファイルを含める必要性があります。
バンドルでないCFM形式の実行可能ファイルに対しては、あなたは'plst'リソース内にプログラムの Info.plist ファイルの内容を配置することができます。
バンドルでないMach-O形式の実行可能ファイルに対しては、あなたは実行ファイルの __TEXT セグメント内に __info_plist セクションを作成し、あなたのインフォメーションプロパティリスト ファイルの内容をそこへ配置することができます。__info_plist セクションを作成するには、あなたはバンドル形式のプログラムの場合と同様に Info.plist ファイルを作成し、次にあなたの makefile か、Xcode のプロジェクトに、以下のリンカオプションを追加してください…
-sectcreate __TEXT __info_plist Info.plist
Info.plist の情報を取得するために、あなたのバンドルでないプログラムは、バンドルプロパティにアクセスするための多数の CFBundle 関数を使用することができます。あなたのプログラムがバンドル化されていないとしても、あなたは「メインバンドル」を得ることができ、あなたが呼ぶ、どんな関数にもそのオブジェクトを渡すことができます。