【Swift/Firebase】環境(開発/リリース)ごとにGoogleService-Info.plistを切り替える方法!

【Swift/Firebase】環境(開発/リリース)ごとにGoogleService-Info.plistを切り替える方法!

この記事からわかること

  • Swift/XcodeFirebaseGoogleService-Info.plist環境ごとに切り替える方法
  • シェルスクリプト実装
  • GoogleService-Info.plistの中身取得するには?

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

iOSアプリ開発をしている際に開発環境と本番環境を切り分けて開発していくことは多いと思います。その際にFirebaseのプロジェクトを開発/本番の2つ用意している場合「GoogleService-Info.plist」を都度入れ替えるのは大変です。今回はそれを自動化する方法をまとめていきます。この記事は以下の記事を参考にさせていただき、それを要約、自分なりにまとめてものになります。

参考文献:Qiita - 開発版とリリース版でFirebaseのGoogleService-Info.plistを切り替える

環境ごとにGoogleService-Info.plistを切り替える方法

手順

  1. (XcodeプロジェクトにBuild Configurationを用意する)
  2. 開発と本番用のGoogleService-Info.plistをリネームしてXcodeプロジェクトに追加
  3. シェルスクリプトを使用して実行環境に応じて利用する環境の方のファイル名を正しいものに直す

1.(XcodeプロジェクトにBuild Configurationを用意する)

XcodeにはデフォルトでDebugRelease2つのBuild Configurationが存在します。これはビルドする際にスキームによって指定されているBuild Configurationで実行されます。(スキームから変更可能です)

【Xcode】開発環境(ReleaseとDebug)モードの切り替え方法

DebugReleaseのままでよければ特にすることはないですがStagingなどを追加したい場合は以下記事を参考にしてください。

2.開発と本番用のGoogleService-Info.plistをリネームしてXcodeプロジェクトに追加

続いて各環境の「GoogleService-Info.plist」をXcodeプロジェクトの中にリネームして追加します。リネームする名前は何でも良いです。

【Swift/Firebase】環境(開発/リリース)ごとにGoogleService-Info.plistを切り替える方法!

3.シェルスクリプトを使用して実行環境に応じて利用する環境の方のファイル名を正しいものに直す

Firebaseでは「GoogleService-Info.plist」という名前じゃないと動作しないのでビルド時に実行されるシェルスクリプトを利用して使用されている環境に応じて対象の「GoogleService-Info-XXXXX.plist」ファイルを正しい名前に修正させます。

シェルスクリプトを実装するには「TARGET」>「Build Phases」>「Run Script」をクリックします。もしなければ上部の「+」をクリックし「New Run Script Phase」で追加してください。

【Swift】SwiftLint(静的解析ツール)の導入と使い方!アプリの中身をチェック

追加したらコードブロックの中に以下のコードを記述します。(パスは自身の設置したパスに合わせてください)

【Swift】SwiftLint(静的解析ツール)の導入と使い方!アプリの中身をチェック
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 これはテストで組み込んだスクリプトです」とすれば以下のように表示されます。

Swift/Xcode】Run Scriptの設定方法!ビルド時に処理を実行する

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ファイルが見つかりませんでした")
}

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index