LoginSignup
77
47

More than 3 years have passed since last update.

iOSでホーム画面に表示されるアプリ名はどこで決まるのか?変更するには?

Posted at

iOSでホーム画面に表示されるアプリ名はどこで決まるのか?変更するにはどうすればよいか?を整理してまとめました。

確認環境

  • Xcode 11.3.1
  • iOS 13.3

結論

  1. アプリ名は Info.plist ファイルの CFBundleDisplayName で決まる
  2. アプリ名を変更するには、その CFBundleDisplayName の値を変更すればよい
  3. アプリ名をローカライズするには、対象言語毎に InfoPlist.strings を用意する
  4. Build Configuration に応じてアプリ名を切り替えるには、 User-Defined Setting を使うと良い
  5. Build Configuration に応じてアプリ名を切り替えつつローカライズするには、ビルド時にがんばるしかなさそう

ホーム画面のアプリ名はどこで決まるのか?

新規プロジェクトを作成して確認していく。

プロジェクト作成時に Product Name を入力する。
1.png

以下が先ほど入力した Product Name になっていることがわかる。

  • プロジェクトファイル名
  • ターゲット名
  • ターゲット設定の General タブにある Display Name

このうち、最後の Display Name がホーム画面に表示されるアプリ名となる。
2.png

アプリ名を変更するには?

この Display Name を変更してみると、プロジェクトファイルの PRODUCT_NAME が変わる。また、変更前の PRODUCT_NAME はターゲット名 TARGET_NAME であったこと、そして PRODUCT_NAME がアプリケーションファイル (.app) 名になることがわかる。
3.png

アプリケーションファイル名が変わるのは気持ち悪いので PRODUCT_NAME を変更しないようにしたい。そんな時のために Bundle display name という設定がある。これはターゲット設定の Info タブで追加できるので、追加してアプリ名を入力してみる。
4.png
5.png

General タブの Display Name は入力した名前に変わった。ホーム画面上でも変わっている。
6.png

11.png

その正体は Info.plist ファイルの CFBundleDisplayName キー。公式ドキュメントにも ホーム画面で表示される名前 という説明がある。

The user-visible name for the bundle, used by Siri and visible on the iOS Home screen.

7.png

アプリ名をローカライズするには?

アプリ名は Info.plist の CFBundleDisplayName で決まるので、これをローカライズしたい。その方法は公式ドキュメント About Information Property List Files の Localizing Property List Values という章で説明されているとおり、InfoPlist.strings という Info.plist 国際化用の strings リソースファイルを用意する。

Localized values are not stored in the Info.plist file itself. Instead, you store the values for a particular localization in a strings file with the name InfoPlist.strings.

InfoPlist.strings ファイルの作成方法、記述方法、言語別に用意する方法は、通常の文字列リソースファイルをローカライズする場合と同様。プロジェクト設定でローカライズ対象言語を設定する。
8.png

InfoPlist.strings ファイルをプロジェクトに追加する。
9.png

言語別に CFBundleDisplayName を設定する。
10.png

これでデバイスの言語設定によってアプリ名が変わる。
11.png 12.png

Build Configuration に応じてアプリ名を切り替えるには?

ターゲット設定の Build Settings タブにある設定項目は Build Configulation (Debug, Releaseなど) ごとに値を変更できる。ここには User-Defined というユーザー定義の設定を追加することができる。
14.png

ここに、例えば BUNDLE_DISPLAY_NAME のようなキーを追加し、Build Configuration ごとにアプリ名となる値を入力する。
15.png

そして、Info.plist の Bundle display name の部分に、先ほどの BUNDLE_DISPLAY_NAME を参照させる。
16.png

General タブの Display Name は、Run を実行する Build Configuration のものが表示されている。
17.png

アプリ名にもちゃんと反映されている。
18.png

Build Configuration に応じてアプリ名を切り替えつつローカライズするには?

上記の手段では、最終的に InfoPlist.strings の方のアプリ名が優先されてしまい、両立することができない。Xcode に用意されている仕組みでは、これを両立する手段はなさそう。

ただ、開発の要件上、このような対応が必要になったため、次のようにして力技で対応してみた。

まず、全言語の InfoPlist.strings に対して、CFBundleDisplayName_{Build Configuration} というキーで、Build Configuration ごとにアプリ名を定義する。

en.lproj/InfoPlist.strings
"CFBundleDisplayName_Debug" = "HogeDebug"; 
"CFBundleDisplayName_Release" = "HogeRelease"; 
ja.lproj/InfoPlist.strings
"CFBundleDisplayName_Debug" = "ほげデバッグ"; 
"CFBundleDisplayName_Release" = "ほげリリース"; 

そして Build Phases の Run Script で全言語の InfoPlist.strings に対して、ビルド対象の Build Configuration に該当する CFBundleDisplayName_{Build Configuration}CFBundleDisplayName に置換する。例えば Release の場合は `CFBundleDisplayName_Release が置換対象となる。

置換
sed -i "s/\"CFBundleDisplayName_$CONFIGURATION\"/\"CFBundleDisplayName\"/" path/to/InfoPlist.strings 
en.lproj/InfoPlist.strings
"CFBundleDisplayName_Debug" = "HogeDebug"; 
"CFBundleDisplayName" = "HogeRelease"; 
ja.lproj/InfoPlist.strings
"CFBundleDisplayName_Debug" = "ほげデバッグ"; 
"CFBundleDisplayName" = "ほげリリース"; 
77
47
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
77
47