Xcodeのプロジェクト名、Bundle Identifier、アプリ名の関係

Xcode で新しくアプリケーションを作成する際に、適当にプロジェクト名を決めてしまうとその後で Bundle Identifier やアプリケーション名を変更したくなることがある。


また、既存のアプリのコードをごっそり新しくするのに新しいプロジェクトを作成して Bundle Identifier を以前のアプリと同じに変更したりする場合。


ほかにも、アプリケーションをローカライズした場合に、各国語でアプリケーション名を違ったものにしたい場合とか。


という感じに、iPhone アプリ作成時に「名前(ID)」にまつわるあれこれがこんがらがることが多い。
そんな場合にいつも「あれ?どうやるんだっけ?」とグーグル先生に聞いているので、そろそろメモしておかないといけない気がしたのでメモ。

プロジェクト作成から、Bundle Identifier変更、アプリ名のローカライズまで

プロジェクト名は「myApp」で、Bundle Identifier は「newApp」、アプリ名はローカライズして「SuperApp」と「凄いアプリ」となる iOS アプリを作成してみる。

  • Xcode でアプリケーション作成

Xcode の [File] メニューから [Project...] を選択、「myApp」という名前で作成する。
これがプロジェクト名になる。

これで「myApp」フォルダに「myApp.xcodeproj」ファイルと「myApp」フォルダができあがる。

この状態だと、もちろんアプリ名は「myApp」のまま。


今の状態

プロジェクト名 :myApp
Bundle Identifier :com.paraches.myApp
アプリ名 :myApp
  • Bundle Identifier を変更

[company identifier] 部分を変更したい場合は、下記画面の状態で編集可能なので問題はない。


しかし、プロジェクト名で設定した箇所(この場合は myApp)はこの状態では編集ができない。
この場合は Xcode の [TARGETS] の名前を変更すれば良い。

名前をクリックしてちょっと待つと編集可能になる。(今回はこれでグーグル先生にお世話になった!)


これで例えば Bundle Identifier を「com.paraches.newApp」に変更したければ、[newApp] と入力すれば変更できる。


[TARGETS] の名前を変更したのでアプリ名も同様に変更になる。
アプリを起動するとこんな感じ。

「myApp」と「newApp」の2つが並ぶ。
これは最初に作った「myApp」と今変更した「newApp」の Bundle Identifier が「com.paraches.myApp」と「com.paraches.newApp」で別のアプリとなっているから。


今の状態

プロジェクト名 :myApp
Bundle Identifier :com.paraches.newApp
アプリ名 :newApp
  • アプリ名を変更

今度はアプリ名を [SuperApp] に変更する。
これには Supporting Files グループにある「InfoPlist.strings」ファイルに CFBundleDisplayName を設定すれば良い。

/* Localized versions of Info.plist keys */

CFBundleDisplayName = "SuperApp";

これで iPhone のアイコン下に表示されるアプリ名が「SuperApp」になった。


今の状態

プロジェクト名 :myApp
Bundle Identifier :com.paraches.newApp
アプリ名 :superApp

最後に、アプリ名をローカライズしてみる。
まずは Xcode で [PROJECT] の [myApp] を選択して、[Localizations] で [+] をクリックして [Japanese] を加える。



次に [InfoPlist.strings] が展開できるようになっているので、展開して [Japanese] を選択、アプリ名を「凄いアプリ」に変更する。

/* Localized versions of Info.plist keys */

CFBundleDisplayName = "凄いアプリ";

これで、アプリ名が「凄いアプリ」になった。

アプリ名が「SuperApp」から変わらない場合、一度シミュレータなり実機なりからアプリを削除してから再度実行するとアプリ名が変更されているはず。(あ、Xcode で [Product] の [Clean] も必要かも)


もちろん、アプリ名はローカライズしたので、シミュレータなり実機の言語を英語に変更すればアプリ名は「SuperApp」と表示される。


今の状態

プロジェクト名 :myApp
Bundle Identifier :com.paraches.newApp
アプリ名(英語) :superApp
アプリ名(日本語) :凄いアプリ

まとめ

というわけで、それぞれはこんな感じ。

  • Bundle Identifier

[company identifier] 部分は特に何もせずに編集可能。
[product name] の部分(一番右の部分)は [TARGETS] の名前を変更する。(クリックして少し待てば編集可能になる。)

  • アプリケーション名

InfoPlist.strings ファイルに CFBundleDisplayName を設定。

[PROJECT] の [myApp] を選択して、[Localizations] で [+] をクリックして [Japanese] を加える。
InfoPlist.strings を展開して、Japanese ファイルに CFBundleDisplayName を設定。


この辺りの関係は [TARGETS] の [Info] タブの [Custom iOS Target Properties] を見るとわかる。

${PRODUCT_NAME} に TARGETS の名前(今回の件では newApp)が入る。


参考:


[2013/02/26 update]
Storyboard を .strings 使ってローカライズする方法はこっち