【Swift】実行環境毎に異なる設定値を指定したい
Xcode の Configuration 設定にて、Debug と Release とで BundleID やアイコン等、異なる値を設定する手順を記載&メモしていきます。
※ 検証時の Xcode バージョン: 16.2
やったこと
-
適当なフォルダ階層に、
.xcconfig
ファイルを実行環境毎に作成します。
新しいファイルをテンプレートから作成します。検索で "config" と入力すれば出てきます。
Debug と Release とで実行環境を分けたいので、それぞれの "xcconfig" ファイルを作成します。
今回の例では、Debug.xcconfig
とRelease.xcconfig
を作成するとします。
生成されるとコメントだけの空の "xcconfig" ファイルが生成されます。そこに実行環境毎に切り分けたい値を定義していきます。
今回は 「BundleID、アイコン、アプリ名」を設定してみます。// Debug.xcconfig(Release.xcconfig も同様に定義) DisplayName = DebugSample BUNDLE_IDENTIFIER = jp.co.hoge.sample.debug APPICON_NAME = AppIconDebug
CocoaPods を使用している場合、CocoaPods が生成した "xcconfig" があれば、そちらも読み込むように Path を指定します。
// Debug.xcconfig(Release.xcconfig も同様に定義) #include "Pods/Target Support Files/Pods-PJ_Name/Pods-PJ_Name.debug.xcconfig" DisplayName = DebugSample BUNDLE_IDENTIFIER = jp.co.hoge.sample.debug APPICON_NAME = AppIconDebug
※ 変数名は自由です。困ったら実際に使用されている Key 名などがよいかもしれません。(以下
project.pbxproj
の差分)33D9A3BE2E1506E400FA2DF6 /* Debug */ = { buildSettings = { - INFOPLIST_KEY_CFBundleDisplayName = "jp.co.hoge.sample"; + INFOPLIST_KEY_CFBundleDisplayName = "$(DisplayName)"; ... - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_APPICON_NAME = "$(APPICON_NAME)"; ... + PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_IDENTIFIER)";
-
作成した"xcconfig" ファイルを、Configurations に設定します。(今回は Test の Target は無視してます。)
-
"xcconfig"ファイルで設定した環境変数それぞれを、対象 TARGET の BuildSettings 等から設定します。
スクロールで見つけようとすると項目数が多くて大変なので、いい感じに検索すればヒットします。
-
Scheme 設定を実行環境毎に作成
添付の箇所から新しい Scheme を作成します。(Scheme 名はわかりやすく<PJ>_Debug
、<PJ>_Release
としています。)
作成した Scheme を選択し、"Edit Scheme..." から Build Configuration をそれぞれの実行環境に設定します。
-
Debug と Release の Scheme を選択してそれぞれビルドします。
BundleID が違うので、別アプリとしてそれぞれシミュレーターにインストールされることが確認できました。
参照記事
参照記事

NCDC株式会社( ncdc.co.jp/ )のエンジニアチームです。 募集中のエンジニアのポジションや、採用している技術スタックの紹介などはこちら( github.com/ncdcdev/recruitment )をご覧ください! ※エンジニア以外も記事を投稿することがあります
Discussion