Skip to content

Xcode PhaseScriptExecution エラーの解決方法

PhaseScriptExecution failed with a nonzero exit code エラーは、XcodeでFlutterプロジェクトのアーカイブ作成時に頻繁に発生します。このエラーによりアーカイブ機能が無効になる問題について、効果的な解決策を体系的に紹介します。

主要な原因と根本解決

最も一般的な原因はCocoaPodsのスクリプト処理失敗です。以下の手順で解決します:

  1. 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 "/'

その他の有効な解決策

環境設定関連

  1. 不要ファイルの削除

    bash
    rm ios/.xcode.env.local
    • 古いnodeパス設定が残っている場合に有効
    • その後 pod install を再実行
  2. プロジェクトパスのスペース除去

    Bad: /Project Folder/MyApp
    Good: /ProjectFolder/MyApp
    • パスにスペースがあるとスクリプトが異常終了
  3. Rosettaの有効化(Apple Silicon Mac)

    terminal
    Finder → Xcode.app → 右クリック → 情報
    → [Rosettaを使用して開く] にチェック

ファイル再生成とパーミッション

  1. プロジェクトのクリーン再構築

    bash
    flutter clean
    cd ios
    pod deintegrate
    pod install
  2. スクリプト実行権限付与

    bash
    chmod +x Pods-Runner-frameworks.sh
  3. Build Settingsの設定確認

    markdown
    Runner → Build Settings → User Script Sandbox → No

React Nativeプロジェクトの場合

bash
npx react-native-clean-project
cd ios && pod deintegrate && pod install

エラー発生時の調査手順

重要

エラーの正確な原因特定にはXcodeのビルドログを確認:

Xcode → Report Navigator → 最新ビルド → ログ確認
  1. エラーが発生したフェーズを特定(例:Bundle React Native code
  2. ログの推奨アクションを実施
  3. 必要なライブラリを再インストール
    bash
    npx expo install react-dom @expo/metro-runtime

回避不能な場合の最終手段

  1. /ios フォルダ全体を削除
  2. Flutterプロジェクトを再生成
    bash
    flutter create . --platforms=ios
  3. EASを使用したビルド
    bash
    eas build --platform ios

これらの解決策は、GitHubのIssueやStackOverflowでの実証済み解決法を体系的にまとめたものです。エラーの具体的な発生状況に応じて、最も適した方法から試すことを推奨します。