【Swift/Firebase】環境(開発/リリース)ごとにGoogleService-Info.plistを切り替える方法!
この記事からわかること
- Swift/XcodeでFirebaseのGoogleService-Info.plistを環境ごとに切り替える方法
- シェルスクリプトの実装
- GoogleService-Info.plistの中身を取得するには?
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
環境
- Xcode:15.0.1
- iOS:17.0
- watchOS:10.0
- Swift:5.9
- macOS:Sonoma 14.1
iOSアプリ開発をしている際に開発環境と本番環境を切り分けて開発していくことは多いと思います。その際にFirebaseのプロジェクトを開発/本番の2つ用意している場合「GoogleService-Info.plist」を都度入れ替えるのは大変です。今回はそれを自動化する方法をまとめていきます。この記事は以下の記事を参考にさせていただき、それを要約、自分なりにまとめてものになります。
参考文献:Qiita - 開発版とリリース版でFirebaseのGoogleService-Info.plistを切り替える
環境ごとにGoogleService-Info.plistを切り替える方法
手順
- (XcodeプロジェクトにBuild Configurationを用意する)
- 開発と本番用のGoogleService-Info.plistをリネームしてXcodeプロジェクトに追加
- シェルスクリプトを使用して実行環境に応じて利用する環境の方のファイル名を正しいものに直す
1.(XcodeプロジェクトにBuild Configurationを用意する)
XcodeにはデフォルトでDebug
とRelease
の2つのBuild Configurationが存在します。これはビルドする際にスキームによって指定されているBuild Configurationで実行されます。(スキームから変更可能です)
Debug
とRelease
のままでよければ特にすることはないですがStaging
などを追加したい場合は以下記事を参考にしてください。
2.開発と本番用のGoogleService-Info.plistをリネームしてXcodeプロジェクトに追加
続いて各環境の「GoogleService-Info.plist」をXcodeプロジェクトの中にリネームして追加します。リネームする名前は何でも良いです。
3.シェルスクリプトを使用して実行環境に応じて利用する環境の方のファイル名を正しいものに直す
Firebaseでは「GoogleService-Info.plist」という名前じゃないと動作しないのでビルド時に実行されるシェルスクリプトを利用して使用されている環境に応じて対象の「GoogleService-Info-XXXXX.plist」ファイルを正しい名前に修正させます。
シェルスクリプトを実装するには「TARGET」>「Build Phases」>「Run Script」をクリックします。もしなければ上部の「+」をクリックし「New Run Script Phase」で追加してください。
追加したらコードブロックの中に以下のコードを記述します。(パスは自身の設置したパスに合わせてください)
if [ "${CONFIGURATION}" == "Release" ]; then
cp "${PROJECT_DIR}/${PROJECT_NAME}/GoogleService-Info-Release.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist"
elif [ "${CONFIGURATION}" == "Staging" ]; then
cp "${PROJECT_DIR}/${PROJECT_NAME}/GoogleService-Info-Staging.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist"
else
cp "${PROJECT_DIR}/${PROJECT_NAME}/GoogleService-Info-Debug.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist"
fi
Run Scriptの名称は変更できるのでわかりやすり名称にしておくと便利です。
${CONFIGURATION}
に設定されている値を確認したい場合はスクリプトの中にecho
で出力させればビルドログに出力されるので確認することができます。
echo ${CONFIGURATION}
例えば「echo これはテストで組み込んだスクリプトです
」とすれば以下のように表示されます。
GoogleService-Info.plistの中身を取得する
実際に設定されている「GoogleService-Info.plist」を確認するためにSwiftのコードから「GoogleService-Info.plist」を読み込んでBUNDLE_ID
に設定されている値を出力してみます。
if let path = Bundle.main.path(forResource: "GoogleService-Info", ofType: "plist") {
if let plist = NSDictionary(contentsOfFile: path) {
if let bundleID = plist["BUNDLE_ID"] as? String {
print("GoogleService-Info.plistに設定されているバンドルID: \(bundleID)")
} else {
print("GoogleService-Info.plistからバンドルIDを取得できませんでした")
}
} else {
print("GoogleService-Info.plistファイルが読み込めませんでした")
}
} else {
print("GoogleService-Info.plistファイルが見つかりませんでした")
}
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。