Xcode3.0での設定はどのようにCocoaアプリケーションに反映されるのか?

Cocoaアプリケーションをちゃんと仕上げるためには「Info.plist」と「InfoPlist.strings」ファイルの設定が必要だ。この設定方法については、かなり詳細なドキュメントが揃っている。(素晴らしい日本語訳に感謝!)

しかし今まで、自分にとってはちょっと詳細過ぎて、必要な項目についての全体像がちゃんと理解できていない状態だった。以下、自分が必要そうな部分だけに限定した設定方法を調べてみた。

新規プロジェクト作成直後のXcodeのデフォルト設定の状態

新規プロジェクトでCocoa Applicationとしてminuを作成すると、以下のようなプロジェクト構成になっている。

確認したいことは、オレンジ色の項目で設定したことが、ビルド生成されるCocoaアプリケーションにどのように影響するかということ。

Info.plistの内容と意味
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//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>CFBundleExecutable</key><!-- ビルドされたunix実行可能ファイル名 -->
	<string>${EXECUTABLE_NAME}</string>

	<key>CFBundleIconFile</key><!-- アイコンのファイル名(拡張子.icnsは除く) -->
	<string></string>

	<key>CFBundleIdentifier</key><!-- 言語環境に依存しないアプリケーションの識別子 -->
	<string>com.yourcompany.minu</string>

	<key>CFBundleInfoDictionaryVersion</key><!-- このInfo.plistフォーマットのバージョン -->
	<string>6.0</string>

	<key>CFBundleName</key><!-- メニューバーとAboutメニューで表示されるアプリケーション名 -->
	<string>${PRODUCT_NAME}</string>

	<key>CFBundlePackageType</key><!-- タイプ -->
	<string>APPL</string>

	<key>CFBundleSignature</key><!-- クリエイタ -->
	<string>????</string>

	<key>CFBundleVersion</key><!-- ビルド回数 バージョン -->
	<string>1.0</string>

	<key>NSMainNibFile</key><!-- メインnibファイルの名前(拡張子.nibは除く) -->
	<string>MainMenu</string>

	<key>NSPrincipalClass</key><!-- バンドルの主要クラス名 -->
	<string>NSApplication</string>
</dict>
</plist>
InfoPlist.stringsの内容と意味
/* Localized versions of Info.plist keys */

NSHumanReadableCopyright = "&#169; __MyCompanyName__, 2008";//Aboutメニューの著作権表示
      • 「&#169;」はOSX環境ではアルファベットの「c 」を丸で囲ったマークとして表示される。おそらく「会社」を表現する「コーポレート」の象徴だと思う。Option-Gで入力可能。
ターゲット >> minuをダブルクリックして開いた情報ウィンドウの「プロパティ」タブの内容
  • ターゲット >> minuの情報ウィンドウの「プロパティ」タブは、「Info.plist」の特定の情報をGUIで表現したものだ。ここでの変更も、Info.plistでの変更も、どちらも相互に反映される。
minu情報プロパティタブの項目 対応するInfo.plistのキー
実行可能ファイル: CFBundleExecutable
識別子: CFBundleIdentifier
タイプ: CFBundlePackageType
クリエイタ: CFBundleSignature
アイコンファイル: CFBundleIconFile
バージョン: CFBundleVersion
主要クラス: NSPrincipalClass
主要Nibファイル: NSMainNibFile

  • 上記以外の項目に付いては、直接Info.plistを編集して設定する。

上記Xcodeのデフォルト設定でビルドされたCocoaアプリケーションとの関連

minu.appのメニューバーとAbout minu

  • minu = Info.plistのCFBundleName


  • minu = Info.plistのCFBundleName
  • Version 1.0 = Info.plistのCFBundleVersion
  • © __MyCompanyName__, 2008 = InfoPlist.stringsのNSHumanReadableCopyright
minu.appのパッケージのファイル構成

  • minu.app/Contents/Info.plist = XcodeプロジェクトのInfo.plist(${EXECUTABLE_NAME}と${PRODUCT_NAME}は、どちらも式展開され「minu」となる。)
  • minu.app/Contents/MacOS/minuというファイル名は、Info.plistのCFBundleExecutableが指定するファイル名と一致する必要がある。(一致していないとアプリケーションが起動できない)
  • minu.app/Contents/Pkginfo = Info.plistのCFBundlePackageType + CFBundleSignature
  • minu.app/Contents/Resources/English.lproj/InfoPlist.strings = XcodeプロジェクトのInfoPlist.strings >> English
  • minu.app/Contents/Resources/English.lproj/MainMenu.nib = XcodeプロジェクトのMainMenu.nib >> English
minu.appをFinderで表示して「情報を見る」の結果

  • ファイル名minu.app = Info.plistのCFBundleNameが代用されている


  • 一番上のファイル名minu.app = Info.plistのCFBundleNameが代用されている
  • 名前と拡張子: minu.app = Xcodeのターゲット >> minuの情報ウィンドウのビルド タブ内の、パッケージング >> プロダクト名の値が利用される。
Dockに表示されるアプリケーション名

  • マウスオーバーで表示される吹き出しminu = Info.plistのCFBundleNameが代用されている

minu用にカスタマイズしたInfo.plist

  • 以下でコメントを入れた5つのキーを追記と修正をしてみた。
  • CFBundleIdentifier(アプリケーションの識別子)は「~/Library/Preferences/」フォルダ以下で、環境設定ファイルを保存する場合のデフォルトのキーとしても利用される。
  • CFBundleShortVersionString(リリース バージョン)は、ユーザーに公開した時のレベルを表現したバージョン表記。(例:MacOSX 10.5.2、Safari 3.1.1)
  • CFBundleVersion(ビルド回数 バージョン)は、ユーザーに非公開のレベルも含めたバージョン表記。
    • Aboutメニュー(oooo について)を表示した時だけ確認できる。(例:バージョン 3.1.1 (5525.20))
    • OSはCFBundleVersion(ビルド回数 バージョン)によってアップデートレベルを確認し、通常はより最新のアプリケーションで開こうとするようだ。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//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>CFBundleExecutable</key>
	<string>${EXECUTABLE_NAME}</string>

	<key>CFBundleIconFile</key><!-- アイコンのファイル名(修正した) -->
	<string>minu</string>

	<key>CFBundleIdentifier</key><!-- 言語環境に依存しないアプリケーションの識別子(修正した) -->
	<string>com.bebekoubou.minu</string>

	<key>CFBundleInfoDictionaryVersion</key>
	<string>6.0</string>

	<key>CFBundleName</key>
	<string>${PRODUCT_NAME}</string>

	<key>CFBundlePackageType</key>
	<string>APPL</string>

	<key>CFBundleShortVersionString</key><!-- リリース バージョン(追記した) -->
	<string>0.1</string><!-- 図2、図4 -->

	<key>CFBundleSignature</key>
	<string>????</string>

	<key>CFBundleVersion</key><!-- ビルド回数 バージョン(修正した) -->
	<string>1</string><!-- 図2 -->

	<key>LSHasLocalizedDisplayName</key><!-- trueの時、InfoPlist.stringsのCFBundleDisplayNameが利用される(追記した) -->
	<true/>

	<key>NSMainNibFile</key>
	<string>MainMenu</string>

	<key>NSPrincipalClass</key>
	<string>NSApplication</string>
</dict>
</plist>

minu用にカスタマイズしたInfoPlist.strings

  • CFBundleName以下の3つのキーを追記してみた。
  • InfoPlist.stringsは、OSの言語環境によって変化するべきInfo.plistのキーを設定するようだ。
    • Info.plistのCFBundleDevelopmentRegion(デフォルトの言語リソース)がEnglishの場合、InfoPlist.strigns >> Englishで設定したことがデフォルト設定になる。(対応する言語リソースがない場合利用される)
/* Localized versions of Info.plist keys */

// About Minuで表示される著作権表示(図2)
NSHumanReadableCopyright = "&#169; bebekoubou, 2008";

// メニューバーとAbout Minuのアプリケーション名になる(図1、図2)
CFBundleName = "Minu";

// Info.plistの「LSHasLocalizedDisplayNameがtrue」の時、利用される
// Finder、Dockで表示されるアプリケーション名になる(図4、図5、図6)
CFBundleDisplayName = "MinimumMenu";

// Finderの「情報を見る」で、一般情報 >> バージョンに表示される内容になる(図5)
CFBundleGetInfoString = "MinimumMenu version 0.1, Copyright 2008 bebekoubou.";

上記minu用の設定でビルドされたCocoaアプリケーションとの関連

(Info.plistまたはInfoPlist.stringsを修正してビルド結果に反映させるためには、「ビルド >> クリーニング」をしてからビルドする必要がある。)

---図1

  • Minu = InfoPlist.stringsのCFBundleName


---図2

  • Minu = InfoPlist.stringsのCFBundleName
  • Version 0.1(1) = Info.plistのCFBundleShortVersionString(Info.plistのCFBundleVersion)
  • © bebekoubou, 2008 = InfoPlist.stringsのNSHumanReadableCopyright


---図3

  • minu.app/Contents/Resources/minu.icns = Info.plistのCFBundleIconFile


---図4

  • 名前 MinimumMenu = InfoPlist.stringsのCFBundleDisplayName
  • バージョン 0.1 = Info.plistのCFBundleShortVersionString


---図5

  • 一番上のMinimumMenu.app = InfoPlist.stringsのCFBundleDisplayName
  • バージョン: MinimumMenu version 0.1, Copyright 2008 bebekoubou. = InfoPlist.stringsのCFBundleGetInfoString
  • 名前と拡張子: minu.app = Xcodeのターゲット >> minuの情報ウィンドウのビルド タブ内の、パッケージング >> プロダクト名の値が利用される。


---図6

  • マウスオーバーで表示される吹き出しMinimumMenu = InfoPlist.stringsのCFBundleDisplayName