情報プロパティリストキー(2)~情報プロパティリストファイルについて

2012. 03. 18
情報プロパティリストファイルについて

情報プロパティリストファイルは、バンドルされた実行可能ファイルの基本的な設定情報を含む、構造化されたテキストファイルです。

ファイル自体は、通常Unicode UTF-8エンコーディングを使用してエンコードされ、内容はXMLを使用して構造化されています。

XMLのルートノードは辞書で、その内容はバンドルの異なる様相を記述するキーと値のセットです。

システムはアプリケーションに関する情報と、それがどのように設定されているかを取得するために、これらのキーと値を使用します。

したがって、全てのバンドルされた実行可能ファイル(プラグイン、フレームワーク、およびアプリケーション)は情報プロパティリストファイルを持つものと想定しています。

慣例として、情報プロパティリストファイルの名前はInfo.plistです。

このファイル名は大文字/小文字が区別されており、最初の大文字が『I』である必要があります。

iPhoneアプリケーションでは、このファイルはバンドルディレクトリの最上位に置かれています。

Mac OS Xバンドルでは、このファイルはバンドルのContentsディレクトリに置かれています。

Xcodeは、通常適切なタイプのプロジェクトを生成する時に、自動的にこのファイルを生成します。

重要:以下の項では、バンドル内に存在するファイルやディレクトリの大文字/小文字に注意を払ってください。
バンドルディレクトリ内のリソースを検索する時に、NSBundleクラスとCore Foundationのバンドル関数は大文字/小文字を区別します。
大文字/小文字の不一致は、実行時のリソースの検索を妨げることになります。



情報プロパティリストファイルの生成と編集

情報プロパティリストファイルを生成する最も簡単な方法は、Xcodeに生成してもらうことです。

Xcodeで新しいbundle-basedプロジェクトを生成すると、プロジェクト名が<project>の場合、<project>-Info.plistという名前のファイルも生成されます。

このファイルはビルド時に、成果物であるバンドル内に含まれるInfo.plistの生成に使用されます。

情報プロパティリストファイルの内容を編集するには、Xcodeプロジェクトの<project>-Info.plistファイルを選択し、プロパティリストエディタを表示します。

図1は、新しいCocoaアプリケーションプロジェクトの情報プロパティリストファイルのエディタを示しています。

Xcodeによって生成されたファイルは、全ての情報プロパティリストが持つべきキーが事前に設定されています。

図1 Xcodeでの情報プロパティリストの編集

xcode_infoplist_editor

特定のキーの値を編集するには、Xcodeのプロパティリストエディタでそれを選択し、valueをダブルクリックして新しい値を入力します。

ほとんどの値は文字列として指定されていますが、Xodeは他のスカラー型もサポートしています。

また配列や辞書等の複雑な型を指定することもできます。

プロパティリストエディタは各型を編集するために適切なインターフェイスを表示します。

与えられている値の型を変更するには、値が選択されていないことを確認し、コンテキストメニューをControlを押しながらクリックします。

そしてValueのTypeのサブメニューから、値に使用する望む型を選択します。

情報プロパティリストは単なるテキストファイルなので、UTF-8ファイルエンコーディングをサポートするテキストエディタを使用して編集することもできます。

ただしXMLファイルなので、プロパティリストファイルを手動で編集することは、一般的には推奨されません。



情報プロパティリストファイルへのキーの追加

システムが必要とする最も重要なキーはXcodeによってInfo.plistファイルに含められますが、ほとんどのアプリケーションは通常いくつかの追加するキーを指定する必要があります。

多くのサブシステムとシステムアプリケーションは、アプリケーションに関する情報を収集するためにInfo.plistファイルを使用します。

例えば、ユーザがアプリケーションの『File』→『Get Info』を選択した時に、Finderは結果の情報ウィンドウでこれらのキーの多くから情報を表示します。

Xcodeのプロパティリストエディタを使用して、アプリケーションのInfo.plistにキーを追加することができます。

このエディタの使用方法については『Property List Editor Help』を参照してください。

重要:Xcodeのプロパティリストエディタは、デフォルトでは多くのキーが(実際のキー名の代わりに)人が読める文字列を表示します。
Info.plistファイルで示されている実際のキー名を表示するには、エディタウィンドウで任意のキーをControlを押しながらクリックし、コンテキストメニューの項目『Show Raw Keys/Values』を有効にしてください。

典型的なアプリケーションに含めるべき推奨されるキーの一覧については、『推奨されるInfo.plistキー』を参照してください。



プロパティリスト値のローカライズ

情報プロパティリストファイル内の多くのキーの値は、Finderまたは自身のアプリケーションによってユーザに表示される、人が読める文字列です。

アプリケーションをローカライズする場合、アプリケーションのコンテンツの残りの部分に加えて、これらの文字列の値もローカライズする必要があります。

ローカライズされた値はInfo.plistファイル自体には格納されません。

代わりに、InfoPlist.stringsという名前の文字列ファイル内に、それぞれローカライズされた値を格納します。

同じローカライズを行った他のリソースの格納に使用する、同じ言語固有のプロジェクトのディレクトリ内に、このファイルは置かれます。

InfoPlist.stringsファイルの内容は、ローカライズされた個々のキーと適切に翻訳された値です。

Info.plistファイル内のキー値の検索ルーチンは、アカウントで設定されているユーザの言語設定を取得し、存在する場合は(適切なInfoPlist.stringsファイルから)キーのローカライズされたバージョンを返します。

キーのローカライズされたバージョンが存在しない場合、ルーチンはInfo.plistファイル内に格納された値を返します。

例えばテキストエディットアプリケーションは、Finderに表示されるいくつかのキーを持っているので、ローカライズする必要があります。

情報プロパティリストファイルに以下のキーを定義すると仮定します。

<key>CFBundleDisplayName</key>
<string>TextEdit</string>
<key>NSHumanReadableCopyright</key>
<string>Copyright ¬c 1995-2009, Apple Inc.,All Rights Reserved. </string>

テキストエディットをフランス語にローカライズするには、Contents/Resources/French.lprojディレクトリのInfoPlist.stringsファイル内に以下の文字列を格納します。

CFBundleDisplayName = "TextEdit";
NSHumanReadableCopyright = "Copyright c 1995-2009 Apple Inc.\nTous droits reserves.";

バンドル内のInfoPlist.stringsファイルの配置についての詳細は『Bundle Programming Guide』を参照してください。

文字列ファイルの生成についての詳細は『Resource Programming Guide』を参照してください。

ローカリゼーション工程の詳細についての追加情報は『Internationalization Programming Topics』を参照してください。



デバイス固有キーの生成

iOS 3.2以降では、アプリケーションはデバイスの特定のタイプにのみ適用されるInfo.plistのキーを指定することができます。

デバイス固有のキーを生成するには、以下のパターンを使用して、いくつかの特殊な修飾子のキー名を組み合わせます。

key_root -<platform> ~<device>

このパターンでは、key_rootが元のキーの名前を表します。

<platform>と<device>の部分は両方とも、特定のプラットフォームまたはデバイスにキーを適用するために使用することができる、オプションの語尾です。

platformキーには、ターゲットとするプラットフォームに応じて、iphoneosまたはmacosの値を指定することができます。

特定のデバイスにキーを適用するには、以下の値のいずれかを使用することができます。
  • iphone:iPhoneデバイスのみに適用するキー
  • ipod:iPod touchデバイスのみに適用するキー
  • ipad:iPadデバイスのみに適用するキー
キーを指定する場合、正当なデフォルト値を持つために、任意のデバイスの修飾子を除いたキーを常に格納することを推奨します。

その後、必要に応じて特定のデバイスの値をカスタマイズするために、デバイス固有のキーをオーバーライドしたバージョンを追加することができます。

アプリケーションのInfo.plistファイル内のキーを検索する時、システムは最初に現在のデバイスに最も的確なキーを選択します。

デバイス固有のキーが見つけられなかった場合、任意のデバイス修飾子を除いて検索します。

したがって修飾されていないキーを持つことは、与えたキーのデフォルト値が常に存在することを意味します。

例えば、iPhoneとiPod touchデバイス用の起動方向をポートレートに、iPad用の起動方向を右ランドスケープに指定する場合、Info.plistファイル内の対応するキーを指定する必要があります。

<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationPortrait</string>
<key>UIInterfaceOrientation~ipad</key>
<string>UIInterfaceOrientationLandscapeRight</string>



カスタムキー

Mac OS XとiOSは、Info.plistファイル内に格納される任意のカスタムキーを無視します。

Info.plistファイル内のアプリケーション固有の構成情報を格納したい場合は、Appleが使用するものと競合しなければキー名を自由に設定することができます。

カスタムキー名を定義する時は、貴方のアプリケーションのバンドルIDまたは貴方の会社のドメイン名など固有の接頭辞を付加することを推奨します。



推奨されるInfo.plistキー

情報プロパティリストファイルを生成する時に、常に含める必要があるいくつかのキーがあります。

これらのキーはほとんどの場合システムによってアクセスされ、システムが効果的にアプリケーションで動作するために必要な情報を持っていることを保証し、提供しています。

iOSアプリケーション用の推奨されるキー

iOSアプリケーションが情報プロパティリストファイル内に含めることを推奨するキーを以下に示します。

ほとんどはプロジェクトを生成する時にXcodeによって自動的に設定されています。


これらのキーに加えて、一般的に含まれるものがいくつかあります。


これらのキーの詳細はこのドキュメントの他の章を参照してください。


Cocoaアプリケーション用の推奨されるキー

Cocoaアプリケーションが、情報プロパティリストファイル内に含めることを推奨するキーを以下に示します。

ほとんどはプロジェクトを生成する時にXcodeによって自動的に設定されますが、いくつかは追加する必要があります。


これらのキーはシステムへアプリケーションを識別させ、提供するサービスについていくつかの基本的な情報を提供します。

またCocoaアプリケーションは、バンドル内のキーリソースを識別するために以下のキーを含める必要があります。


:Xcodeのテンプレートを使用してCocoaアプリケーションを構築する場合、NSMainNibFileとNSPrincipalClassキーは、通常は既にテンプレートプロジェクトに設定されています。

これらのキーの詳細はこのドキュメントの他の章を参照してください。


一般的なローカライズされたキー

推奨されるキーに加えて、ローカライズして言語固有のInfoPlist.stringsファイルに置く必要がある、いくつかのキーがあります。


 情報プロパティリストのキーのローカライズについての詳細は『プロパティリスト値のローカライズ』を参照してください。



参考文献

Information Property List Key Reference

0 CommentsPosted in 資料





Lifestyle 650 home entertainment system
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
10 | 2017/11 | 12
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 - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

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

Wish List
WACOM


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

Lifestyle 650 home entertainment system
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