はじめに
cordova プロジェクト(monaca)でFCMを使う際、開発環境と本番環境で GoogleService-Info.plist, google-services.json を自動で切り替えたい 正確には google-services.json は複数環境入れるが、今回は必要であった
問題
以下ファイルを用意した、ビルド時に自動で切り替えたい
正確には _dev
, _prd
の無いファイルを作成したい
- google-services_dev.json
- google-services_prd.json
- GoogleService-Info_dev.plist
- GoogleService-Info_prd.plist
解決方法
cordova hook でビルド時に自動で切り替える
以下スクリプトを作成したので記載.
scripts/before_build
に配置する#!/usr/bin/env -S bash -e script_dir=$(cd "$(dirname "${BASH_SOURCE:-$0}")" && pwd) && readonly script_dir project_root=$(cd "${script_dir}/.." && pwd) && readonly project_root config_file="${project_root}/config.xml" && readonly config_file get_stage() { grep 'name="STAGE"' "$config_file" | sed -E 's/.*value="([^"]*)".*/\1/' } update_firebase_config() { local append=_prd if [[ $stage == "dev" ]]; then append=_dev fi echo "===> Updating firebase config files" 1>&2 cp -fv "$project_root"/GoogleService-Info${append}.plist "$project_root"/GoogleService-Info.plist cp -fv "$project_root"/google-services${append}.json "$project_root"/google-services.json } main() { local stage stage=$(get_stage) echo "==> Start before_platform_add script. stage: $stage !" 1>&2 update_firebase_config } main "$@"
- アプリ名やパッケージ名(config.xml内の値) も切り替えたかったが、この方法ではビルドエラーとなりできず
hook は以下のように
config.xml
に追加する<hook type="before_build" src="scripts/before_build"/>