Xcode で xcconfig ファイルを生成して環境ごとの値を設定する方法

システム開発をしていると、プログラムを QA 環境や本番環境にデプロイする際に、環境に応じて違う設定を使いたいことがあるかと思います。

ここでは、Xcode で環境ごとの設定をするために xcconfig ファイルを生成して設定する方法をご説明します。

Build Configuration と Scheme は追加済の前提ですすめますので、まだの方は「Xcode で環境ごとの設定を管理する方法」の目次に戻って追加・設定してください。

Xcode で xcconfig ファイルを生成する

次は Configuration Settings 用の xcconfig ファイルを作って、環境ごとの値を設定してみましょう。

開発、QA、本番環境用の xcconfig ファイルを生成します。


メニューバーの File > New > File... で iOS の Configuration Settings File を選択し Next をクリックして、Development.xcconfig ファイルを生成します。

Xcode で xcconfig ファイルを生成して環境ごとの値を設定する方法 20

Xcode で xcconfig ファイルを生成して環境ごとの値を設定する方法 21

Xcode で xcconfig ファイルを生成して環境ごとの値を設定する方法 22


同様に、QA.xcconfig、Production.xcconfig ファイルも生成してください。

Xcode で xcconfig ファイルを生成して環境ごとの値を設定する方法 23


xcconfig ファイルを configurations に設定する

次に、生成した xcconfig ファイルと configuration を紐付けます。

PROJECT のプロジェクト名をクリックし、Info タブの Configurations のそれぞれの configuration を開き Target の [Based on Configration File] を以下のように設定します。

Xcode で xcconfig ファイルを生成して環境ごとの値を設定する方法 24

これで、build schema を変更して実行をすると、schema で設定した build configuration の config ファイルが使われるようになります。

ただ、ビルド設定の優先順位があるので、xcconfig ファイルに書いたからと言って、単純にその値が使われるわけではありません。

詳しくは「Xcode の ビルド設定の優先順位」をご覧ください。

xcconfig ファイルに値を追加して設定する

Xcode の Project エディタで環境ごとのビルド設定をする」では、Project エディタの Target の Build Settings で、環境に応じた Bundle ID を設定しました。

ここでは、開発、QA、本番の環境ごとに別のアプリ名を xcconfig ファイルを使って設定してみます。


xcconfig ファイルに書く時は、基本的には次のようなフォーマットで設定します。

BUILD_SETTING_KEY = BUILD_SETTING_VALUE

既に定義されているビルド設定を上書きすることもできますし、新しいビルド設定キーを定義して値を設定することもできます。

ただ、既に定義されているビルド設定を上書きする場合、Target の Build Settings のほうが優先順位が高いので、Target の Build Settings で値が設定されている場合はそちらが優先され、ここに書くだけでは上書きされません。


info.plist や Project エディタで $( ) で囲まれているのがビルド設定のキー名です。

例えば、Bundle dispaly name や Bundle name には $(PRODUCT_NAME) が設定されていて、PRODUCT_NAME がキー名です。

Xcode で xcconfig ファイルを生成して環境ごとの値を設定する方法 25

ビルド設定のキー名がわからない時は、Quick Help Inspector で確認できます。

Xcode で xcconfig ファイルを生成して環境ごとの値を設定する方法 26


または、アシスタントエディタで、Build Settings から xcconfig ファイルにドラッグ&ドロップすることでも確認できます。

Xcode で xcconfig ファイルを生成して環境ごとの値を設定する方法 26


PRODUCT_NAME を xcconfig ファイルで設定するのであれば、次のようにできますが、Target の Build Settings で PRODUCT_NAME に $(TARGET_NAME) が設定されているので、そちらが優先されてしまいます。

PRODUCT_NAME = TestApp Dev

Xcode で xcconfig ファイルを生成して環境ごとの値を設定する方法 27


今回は新しい APP_NAME というキーを作って、info.plist の Bundle dispaly name と Bundle name を置き換えてしまうことにします。

Development.xcconfig、QA.xcconfig、Production.xcconfig にそれぞれ次の値を設定します。

APP_NAME = TestApp Dev
APP_NAME = TestApp QA
APP_NAME = TestApp

Xcode で xcconfig ファイルを生成して環境ごとの値を設定する方法 28


そして、info.plist の Bundle dispaly name と Bundle name を $(APP_NAME) に変更します。

Xcode で xcconfig ファイルを生成して環境ごとの値を設定する方法 29


この状態でスキームを変更してシミュレーターで実行すると、前回 Bundle ID も違うものを設定しているので、環境ごとに違うアプリの名前でインストールされると思います。

Xcode で xcconfig ファイルを生成して環境ごとの値を設定する方法 30

Xcode で xcconfig ファイルを生成して環境ごとの値を設定する方法 31


Xcode で xcconfig ファイルを生成して環境ごとの値を設定する方法 32

Xcode で xcconfig ファイルを生成して環境ごとの値を設定する方法 33

xcconfig ファイルの値を Swift のコードで取得する

API の URL など、Swift のコードから、xcconfig ファイルの値を取得したいことがあるかもしれません。

そんな時は xcconfig ファイルで作った ビルド設定のキーを info.plist に追加しておくことで取得可能です。


例えば、次のような API_URL というビルド設定を定義します。

Development.xcconfig、QA.xcconfig、Production.xcconfig にそれぞれ次の値を追加します。

API_URL = www.softmoco.com/api-dev
API_URL = www.softmoco.com/api-qa
API_URL = www.softmoco.com/api

Xcode で xcconfig ファイルを生成して環境ごとの値を設定する方法 34

https:// も含めたい時は、// 以降はコメントとみなされてしまうので、$() を入れて https:/$()/www.softmoco.com とするなどしてください。


info.plist に API URL という行を追加して、$(API_URL) を設定します。

Xcode で xcconfig ファイルを生成して環境ごとの値を設定する方法 35

Xcode で xcconfig ファイルを生成して環境ごとの値を設定する方法 36


後は、他の info.plist の値を取得したい時と同じで、次のような感じで取得できます。

let apiURL = Bundle.main.object(forInfoDictionaryKey: "API URL") as? String

テストのために、Label をおいて、apiURL の値を表示してみました。

Xcode で xcconfig ファイルを生成して環境ごとの値を設定する方法 37

class ViewController: UIViewController {
    
    @IBOutlet weak var apiURLLabel: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        if let apiURL = Bundle.main.object(forInfoDictionaryKey: "API URL") as? String {
            apiURLLabel.text = "https://\(apiURL)"
        }
    }
}

この状態でスキームを変更してシミュレーターで実行すると、環境に応じた URL が取得できていることがわかります。

Xcode で xcconfig ファイルを生成して環境ごとの値を設定する方法 30

Xcode で xcconfig ファイルを生成して環境ごとの値を設定する方法 38


Xcode で xcconfig ファイルを生成して環境ごとの値を設定する方法 32

Xcode で xcconfig ファイルを生成して環境ごとの値を設定する方法 39


以上、Xcode で環境ごとの設定をするために xcconfig ファイルを生成して設定する方法をご説明しました。

© 2024 iOS 開発入門