Xcode PhaseScriptExecution エラーの解決方法
PhaseScriptExecution failed with a nonzero exit code
エラーは、XcodeでFlutterプロジェクトのアーカイブ作成時に頻繁に発生します。このエラーによりアーカイブ機能が無効になる問題について、効果的な解決策を体系的に紹介します。
主要な原因と根本解決
最も一般的な原因はCocoaPodsのスクリプト処理失敗です。以下の手順で解決します:
- Pods-Runner-frameworks.sh ファイルの修正
bash
ios/Pods/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh
修正箇所(readlink
に -f
オプションを追加):
diff
if [ -L "${source}" ]; then
echo "Symlinked..."
- source="$(readlink "${source}")"
+ source="$(readlink -f "${source}")"
fi
この修正は以下の理由で有効です:
readlink
コマンドに-f
フラグを追加して絶対パス解決を強制- シンボリックリンクの参照エラーを根本的に解消
- CocoaPodsの公式Issueで推奨されている解決策
TIP
全Podファイルに適用するにはターミナルで実行:
bash
grep -rl 'readlink "' --include '*-frameworks.sh' . | xargs sed -i '' 's/readlink "/readlink -f "/'
その他の有効な解決策
環境設定関連
不要ファイルの削除
bashrm ios/.xcode.env.local
- 古いnodeパス設定が残っている場合に有効
- その後
pod install
を再実行
プロジェクトパスのスペース除去
Bad: /Project Folder/MyApp Good: /ProjectFolder/MyApp
- パスにスペースがあるとスクリプトが異常終了
Rosettaの有効化(Apple Silicon Mac)
terminalFinder → Xcode.app → 右クリック → 情報 → [Rosettaを使用して開く] にチェック
ファイル再生成とパーミッション
プロジェクトのクリーン再構築
bashflutter clean cd ios pod deintegrate pod install
スクリプト実行権限付与
bashchmod +x Pods-Runner-frameworks.sh
Build Settingsの設定確認
markdownRunner → Build Settings → User Script Sandbox → No
React Nativeプロジェクトの場合
bash
npx react-native-clean-project
cd ios && pod deintegrate && pod install
エラー発生時の調査手順
重要
エラーの正確な原因特定にはXcodeのビルドログを確認:
Xcode → Report Navigator → 最新ビルド → ログ確認
- エラーが発生したフェーズを特定(例:
Bundle React Native code
) - ログの推奨アクションを実施
- 必要なライブラリを再インストールbash
npx expo install react-dom @expo/metro-runtime
回避不能な場合の最終手段
/ios
フォルダ全体を削除- Flutterプロジェクトを再生成bash
flutter create . --platforms=ios
- EASを使用したビルドbash
eas build --platform ios
これらの解決策は、GitHubのIssueやStackOverflowでの実証済み解決法を体系的にまとめたものです。エラーの具体的な発生状況に応じて、最も適した方法から試すことを推奨します。