【Flutter × Xcode Cloud】.env が原因のエラー「exit code 65」を解消する方法
Contents
【Flutter × Xcode Cloud】.env が原因のエラー「exit code 65」を解消する方法
Flutter アプリを Xcode Cloud でビルドしようとした際、以下のようなエラーに悩まされました。
1 2 3 |
Run command: 'xcodebuild archive -workspace /Volumes/workspace/repository/ios/Runner.xcworkspace -scheme Runner -destination generic/platform=iOS -archivePath /Volumes/workspace/build.xcarchive -derivedDataPath /Volumes/workspace/DerivedData -resultBundleVersion 3 -resultBundlePath /Volumes/workspace/resultbundle.xcresult -resultStreamPath /Volumes/workspace/tmp/resultBundleStream08eb8cac-a617-4ace-abb8-9b9833300a40.json -IDEPostProgressNotifications=YES CODE_SIGN_IDENTITY=- AD_HOC_CODE_SIGNING_ALLOWED=YES CODE_SIGN_STYLE=Automatic DEVELOPMENT_TEAM=FBGAS4D8TL COMPILER_INDEX_STORE_ENABLE=NO -hideShellScriptEnvironment' Command exited with non-zero exit-code: 65 |
この原因と、私が実際に行った解決手順を紹介します。
🔍 原因:.env ファイルが Xcode Cloud 上に存在しない
Flutter アプリで flutter_dotenv
パッケージを使っている場合、.env
ファイルをアセットとして読み込む必要があります。
ローカルでは存在していても、Xcode Cloud は Git 上のファイルしか読み込まないため、
.gitignore
によって .env
がコミットされていないと、ビルド時にファイルが見つからず失敗します。
✅ 解決策:Xcode Cloud の「共有環境変数」と ci_post_clone.sh を使って .env を生成
- Xcode Cloud の「共有環境変数」に APIキーなどを登録
ci_post_clone.sh
スクリプトで.env
ファイルを動的に生成
1. 共有環境変数の設定方法
- Xcode Cloud の 設定 > 共有環境変数 へ移動
- 「+」をクリックして環境変数を追加
-
例:
OPENAI_API_KEY=sk-xxxxxxxx
API_BASE_URL=https://example.com
- Secure チェックを入れて安全に保管
2. ci_post_clone.sh
の編集内容
以下のように .env を生成する処理を追加します:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#!/bin/sh set -e cd $CI_PRIMARY_REPOSITORY_PATH # ✅ ここで .env を生成 echo "Generating .env file..." cat > .env <<EOF OPENAI_API_KEY=$OPENAI_API_KEY API_BASE_URL=$API_BASE_URL EOF cat .env # Flutter セットアップ git clone https://github.com/flutter/flutter.git --depth 1 -b stable $HOME/flutter export PATH="$PATH:$HOME/flutter/bin" export PATH="$PATH:$HOME/flutter/bin" flutter precache --ios flutter pub get # CocoaPods セットアップ HOMEBREW_NO_AUTO_UPDATE=1 brew install cocoapods cd ios && pod install exit 0 |
🛠 pubspec.yaml に .env を登録
1 2 3 4 |
flutter: assets: - .env |
🔒 .env は .gitignore に残すべき?
はい、.env
は機密情報を含むため、引き続き .gitignore
に記載して Git にはコミットしないようにしましょう。
CI 環境では自動生成する運用が安全です。
✅ 結果
この対応により、以下のエラーは完全に解消され、Xcode Cloud でのアーカイブが正常に完了しました。
1 2 3 |
No file or variants found for asset: .env. Command exited with non-zero exit-code: 65 |
まとめ
- Xcode Cloud はリポジトリに存在しないファイルを読み込めない
.env
は CI 環境で動的に生成するのがベストプラクティス- セキュアなキー管理には「共有環境変数」を活用しよう
Flutter × Xcode Cloud の CI/CD で悩んでいる方の参考になれば幸いです。
ディスカッション
コメント一覧
まだ、コメントがありません