🍣

【Swift】実行環境毎に異なる設定値を指定したい

に公開

Xcode の Configuration 設定にて、Debug と Release とで BundleID やアイコン等、異なる値を設定する手順を記載&メモしていきます。

※ 検証時の Xcode バージョン: 16.2

やったこと

  1. 適当なフォルダ階層に、.xcconfig ファイルを実行環境毎に作成します。
    新しいファイルをテンプレートから作成します。検索で "config" と入力すれば出てきます。

    Debug と Release とで実行環境を分けたいので、それぞれの "xcconfig" ファイルを作成します。
    今回の例では、Debug.xcconfigRelease.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)";
    


  2. 作成した"xcconfig" ファイルを、Configurations に設定します。(今回は Test の Target は無視してます。)


  3. "xcconfig"ファイルで設定した環境変数それぞれを、対象 TARGET の BuildSettings 等から設定します。
    スクロールで見つけようとすると項目数が多くて大変なので、いい感じに検索すればヒットします。


  4. Scheme 設定を実行環境毎に作成
    添付の箇所から新しい Scheme を作成します。(Scheme 名はわかりやすく<PJ>_Debug<PJ>_Releaseとしています。)

    作成した Scheme を選択し、"Edit Scheme..." から Build Configuration をそれぞれの実行環境に設定します。


  5. Debug と Release の Scheme を選択してそれぞれビルドします。
    BundleID が違うので、別アプリとしてそれぞれシミュレーターにインストールされることが確認できました。

参照記事

参照記事
GitHubで編集を提案
NCDCエンジニアブログ

Discussion