はじめに
こちらは個人開発アプリができるまで by am10 Advent Calendar 2024の 16 日目の記事です。
16 日目は xcconfig を使った環境切替についてです。アプリアイコン作成と言いましたがあれは嘘だ!
xcconfig を使って以下 3 つの環境を切替とわかりやすくするために Bundle Identifier と Bundle Display Name も変更します。
xcconfig は他にもいろいろできるので詳しく知りたい方は以下をご参考ください。
xcconfig の追加
Add File from Template... から Configuration Settings File を追加します。
追加するのはそれぞれの環境用に下記 3 つです。
- ExpenseLog.release.xcconfig
- ExpenseLog.debug.xcconfig
- ExpenseLog.dummy.xcconfig
それぞれ下記のように値を追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// ExpenseLog.release.xcconfig // アプリの表示名 APP_NAME = ExpenseLog // 接続環境 APP_ENVIRONMENT = RELEASE // Bundle Identifier PRODUCT_BUNDLE_IDENTIFIER = hoge // ExpenseLog.debug.xcconfig APP_NAME = debug-ExpenseLog APP_ENVIRONMENT = DEVELOPMENT PRODUCT_BUNDLE_IDENTIFIER = hoge.debug // ExpenseLog.dummy.xcconfig APP_NAME = dummy-ExpenseLog APP_ENVIRONMENT = DUMMY PRODUCT_BUNDLE_IDENTIFIER = hoge.dummy |
PROJECT > Info > Configurations の Debug と Release にそれぞれ設定します。
値の参照
次に xcconfig の値を参照できるようにします。
TARGETS > Build Settings > Product Budle Identifier の値を削除して $(PRODUCT_BUNDLE_IDENTIFIER) を設定します。
TARGETS > Info の Bundle display name の value を $(APP_NAME)に修正します。
TARGETS > Info に key を APP_ENVIRONMENT, value を $(APP_ENVIRONMENT)で追加します。
これで Bundle Identifier と Bundle Display Name は環境ごとに変わるようになりました。
Bundle Display Name が変わるのは英語表示のみです(日本語表示は InfoPlist.xcstrings の設定値になります)。
続いて APP_ENVIRONMENT の値をアプリで読み込めるようにします。直接 Environment を指定していたところを下記のように修正します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// 修正前 let environment: AppConfig.Environment = .development // 修正後 let environment: AppConfig.Environment = AppConfig.Environment.makeEnvironment() extension AppConfig.Environment { static func makeEnvironment() -> AppConfig.Environment { let value = Bundle.main.object(forInfoDictionaryKey: "APP_ENVIRONMENT") as! String switch value { case "RELEASE": return .release case "DEVELOPMENT": return .development case "DUMMY": return .dummy default: assertionFailure("xcconfigの設定ミス") return .development } } } |
これで xcconfig で環境切替ができるようになりました!
Dummy で動かしたい場合はちょっとめんどくさいですが PROJECT > Info > Configurations で ExpenseLog.dummy.xcconfig を指定すれば可能です(頻繁に使うものでもないしいいかなと)。
おわりに
以前は環境ごとにスキーム追加したりしてたんですがスキームごとに設定変えてしまってたりとか気づきにくいので xcconfig を使うようにしてみました。
xcconfig 使ったことなかったんですが少なくとも 11 年前にはあったみたいですね。
明日こそアプリアイコン作成をします。
コメント