はじめに

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"/>

Refs