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.shBuild 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での実証済み解決法を体系的にまとめたものです。エラーの具体的な発生状況に応じて、最も適した方法から試すことを推奨します。