環境
- M2 Mac mini
- macOS 13.5
- Xcode 15.0.1
- Flutter 3.13.9
はじめに
--dart-define-from-fileでFirebase Test Labに続き、Xcode CloudでCI/CD環境を構築する時にも--dart-define-from-file
を適用するのに苦労したので、記事に残しておきたいと思います。
尚、--dart-define-from-file
以外の部分についてはContinuous delivery with Flutterに従ってCI/CD環境が構築できているものとします。
定義ファイルの配置方法
--dart-define-from-file
を使用する場合、定義ファイルには通常秘匿情報が含まれるので、git管理対象外にしていると思います。そのため、Xcode Cloudで--dart-define-from-file
を使用する場合はワークフローの環境変数を使用します。
シークレットにチェックをつけると、値がログに出力されることも抑制できるので秘匿したい情報はシークレットにしましょう。
これでci_post_clone.sh
から環境変数が参照できるようになるので、echo
コマンド等を使用して定義ファイルを作成します。(Firebaseを使用している場合は同様にGoogleService-Info.plist
も作成してください。)
echo "{
\"flavor\": \"$flavor\",
\"appIdSuffix\": \"$appIdSuffix\",
\"appName\": \"$appName\",
...
}" > dart_defines.json
依存性の注入方法
定義ファイルを配置しただけでは環境変数が取り込まれないので、下記のコマンドを実行してios/Flutter/flutter_export_environment.sh
とios/Flutter/Generated.xcconfig
ファイルを作成します。
flutter build ios --config-only --debug --dart-define-from-file=dart_defines.json
これでxcodebuild archive
実行時に環境変数が取り込まれてCI/CDができるようになります。
さいごに
--dart-define-from-file
はすごく便利なのですが、ネットで検索しても、この辺りの情報はあまり出てこないですね。この記事が誰かのお役に立てば幸いです。