LoginSignup
2
1

More than 1 year has passed since last update.

【Xcode】開発環境を設定してみた

Posted at

はじめに

iOSのアプリ開発においてDebug, Release以外に開発環境としてStagingを設定したく、
こちらの記事を参考にやってみました

環境

Xcode 14.0

内容

Stagingを定義する

InfoConfigurations+から追加
スクリーンショット 2022-10-11 22.16.38.png
Depulicate "Debug" Configurationを選択
スクリーンショット 2022-10-11 22.17.29.png
複製したものをStagingに変更
スクリーンショット 2022-10-11 22.18.17.png

Build Settingを修正する

Preprocessor Macrosの値を修正
スクリーンショット 2022-10-11 22.23.15.png
Stagingの値が複製した時の値DEBUG=1となっているのでSTAGING=1にする
スクリーンショット 2022-10-11 22.24.02.png

User Definedで各環境ごとの値を設定する

+からAdd User-Defined Settingを追加
スクリーンショット 2022-10-11 22.29.16.png
NEW_SETTINGが追加されるので、適当な値を入れていく
スクリーンショット 2022-10-11 22.29.31.png
環境ごとの値を定義
スクリーンショット 2022-10-11 22.38.32.png

Info.plistで定義する

InfoタブからCustom iOS Target Propertiesを開き、+から新規追加
スクリーンショット 2022-10-11 22.38.47.png
$(User-Definedで設定した値)を定義し、適当な名前をつけておく
スクリーンショット 2022-10-11 22.55.42.png
 Infoタブから定義した値が消えて、Info.plistが作られる
スクリーンショット 2022-10-11 22.56.37.png
コードからは以下のような形で環境ごとの値を使える

Bundle.main.object(forInfoDictionaryKey: "appNameSetting") as! String

Schemeを追加する

Manage Schemesから追加
スクリーンショット 2022-10-11 23.19.07.png
既存のものをDuplicateする
スクリーンショット 2022-10-11 23.20.41.png
Build ConfigurationからStagingを選び、適当な名前と設定をしていく
スクリーンショット 2022-10-11 23.22.05.png
Schemeをクリックすると後から名前を変更することができる
スクリーンショット 2022-10-11 23.34.16.png
Sharedについてはこちらの記事を見て理解できました。

Bundle Identifierを環境ごとに分ける

User-DefinedBUNDLE_ID_SUFFIXという名前で.debug.stagingを定義
スクリーンショット 2022-10-12 0.08.01.png
Build SettingsProduct Bundle Identifierを検索
スクリーンショット 2022-10-12 0.15.55.png
Bundle Identifierの末尾に${BUNDLE_ID_SUFFIX}を追加する
スクリーンショット 2022-10-12 0.18.31.png

アプリアイコンを環境ごとに分ける

TargetのAsset Catalog CompilerPrimary App Icon Set Nameを修正
スクリーンショット 2022-10-12 0.22.25.png
AppIconの末尾に${BUNDLE_ID_SUFFIX}を付ける
スクリーンショット 2022-10-12 0.25.33.png
この値と同じIconを用意すると環境ごとにアイコンが変わるようになる

アプリ名を環境ごとに分ける

User-DefinedPRODUCT_NAME_PREFIXという名前でDebugStagingを定義
スクリーンショット 2022-10-12 0.37.40.png
TargetのProduct Nameを修正する
スクリーンショット 2022-10-12 0.42.20.png
${TARGET_NAME}の前に${PRODUCT_NAME_PREFIX}を付ける
スクリーンショット 2022-10-12 0.49.37.png

おまけ: 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
    }
}

おわりに

参考にさせてもらった記事がとてもわかりやすく、大変助かりました

参考

2
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1