はじめに
iOSのアプリ開発においてDebug
, Release
以外に開発環境としてStaging
を設定したく、
こちらの記事を参考にやってみました
環境
Xcode 14.0
内容
Stagingを定義する
Info
のConfigurations
の+
から追加
Depulicate "Debug" Configuration
を選択
複製したものをStaging
に変更
Build Settingを修正する
Preprocessor Macros
の値を修正
Staging
の値が複製した時の値DEBUG=1
となっているのでSTAGING=1
にする
User Definedで各環境ごとの値を設定する
+
からAdd User-Defined Setting
を追加
NEW_SETTING
が追加されるので、適当な値を入れていく
環境ごとの値を定義
Info.plistで定義する
Info
タブからCustom iOS Target Properties
を開き、+
から新規追加
$(User-Definedで設定した値)
を定義し、適当な名前をつけておく
Infoタブから定義した値が消えて、Info.plist
が作られる
コードからは以下のような形で環境ごとの値を使える
Bundle.main.object(forInfoDictionaryKey: "appNameSetting") as! String
Schemeを追加する
Manage Schemes
から追加
既存のものをDuplicate
する
Build Configuration
からStaging
を選び、適当な名前と設定をしていく
Schemeをクリックすると後から名前を変更することができる
Shared
についてはこちらの記事を見て理解できました。
Bundle Identifierを環境ごとに分ける
User-Defined
にBUNDLE_ID_SUFFIX
という名前で.debug
と.staging
を定義
Build Settings
でProduct Bundle Identifier
を検索
Bundle Identifierの末尾に${BUNDLE_ID_SUFFIX}
を追加する
アプリアイコンを環境ごとに分ける
TargetのAsset Catalog Compiler
のPrimary App Icon Set Name
を修正
AppIconの末尾に${BUNDLE_ID_SUFFIX}
を付ける
この値と同じIconを用意すると環境ごとにアイコンが変わるようになる
アプリ名を環境ごとに分ける
User-Defined
にPRODUCT_NAME_PREFIX
という名前でDebug
とStaging
を定義
TargetのProduct Name
を修正する
${TARGET_NAME}
の前に${PRODUCT_NAME_PREFIX}
を付ける
おまけ: Firebaseを環境ごとに分ける
こちらの記事を参考にやってみました
やり方はいくつかあるようですが、個人的に1番わかりやすく感じたので、こちらの実装方法にしました
class AppDelegate: NSObject, UIApplicationDelegate {
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
#if RELEASE
let resource = "GoogleService-Info"
#elseif STAGING
let resource = "GoogleService-Info-stg"
#else
let resource = "GoogleService-Info-stg"
#endif
if let filePath = Bundle.main.path(forResource: resource, ofType: "plist") {
guard let options = FirebaseOptions(contentsOfFile: filePath) else {
assert(false, "Could not load config file.")
}
FirebaseApp.configure(options: options)
} else {
FirebaseApp.configure()
}
return true
}
}
おわりに
参考にさせてもらった記事がとてもわかりやすく、大変助かりました
参考