Xcodeビルドエラー「Command PhaseScriptExecution failed」の解決方法
Xcodeアップデート後のエラーに注意
Xcode 14以降にアップデートした後、「Command PhaseScriptExecution failed with a nonzero exit code」エラーが発生するケースが増えています。このエラーはスクリプト実行フェーズで発生し、主にCocoaPodsやFlutter関連の設定に起因します。以下に体系的な解決策を紹介します。
主要な解決策
1. Pods-Runner-frameworks.shの修正(Flutterプロジェクト向け)
CocoaPods生成スクリプトの不整合が原因で発生する場合があります:
# 修正前
source="$(readlink "${source}")"
# 修正後
source="$(readlink -f "${source}")"
修正手順:
- Xcodeで
Pods
>Target Support Files
>Pods-Runner
>Pods-Runner-frameworks.sh
を開く readlink
の行をreadlink -f
に変更- Xcodeを完全に再起動してクリーンビルド(
Shift + Cmd + K
)
2. iOSデプロイメントターゲットの統一設定
ターゲット設定の不一致が原因の場合の解決方法:
post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
end
installer.generated_projects.each do |project|
project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0' # 12.0以上に設定
end
end
end
end
pod deintegrate
pod install
3. 'Based on Configuration'設定の確認(Xcode 15.3+)
Xcode 15.3以降で発生する場合の対応:
- Xcodeでプロジェクトを開く
- Runner → Build Settings → Based on Configurationを選択
- 以下の設定を確認:
- Debug:
Debug
に設定 - Release:
Release
に設定 - Profile:
Release
に設定
- Debug:
環境固有の解決策
Apple Silicon (M1/M2チップ) ユーザー向け
Rosettaのインストール不足が原因の場合:
sudo softwareupdate --install-rosetta --agree-to-license
追加対策:
- XcodeをRosettaで実行(アプリケーション → Xcode → 右クリック → 情報 → Rosettaで開く)
- ターミナルをRosettaモードで起動
開発環境のチェック
uname -m # arm64ならApple Silicon
flutter doctor -v # Flutter環境チェック
ストレージ不足によるエラー
ディスクスペース不足が原因の場合もあるため確認:
- Appleメニュー → このMacについて → ストレージをチェック
- 不要ファイルを削除(最低10GBの空き確保が推奨)
その他の効果的な解決法
ファイル削除によるリセット
問題のある設定ファイルをリセット:
rm .xcode.env.local
CocoaPodsのアップデート
古いCocoaPodsバージョンが原因の場合:
sudo gem install cocoapods -v 1.12.1 # v1.12.1以降をインストール
pod repo update
pod deintegrate
pod install
Run Script設定修正
Firebase Crashlytics関連のエラーが発生する場合:
- Targets → Build Phases → Run Scriptを選択
- パスを次に変更:
"${BUILD_DIR%/Build/*}/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run"
Run Scriptオプション変更
スクリプト設定オプションを調整:
- Run Script項目を開く
- 「For install builds only」チェックボックスにチェックを入れる
フレームワーク別対処法
React Nativeプロジェクトの場合
# 修正前
set -e
# 修正後
set +e
修正ファイル: node_modules/react-native/scripts/find-node.sh
Cordovaプロジェクトの場合
Pods/{Your Project}
フォルダを開くPods-{Your Project}-frameworks
ファイルを編集readlink
をreadlink -f
に変更
依存関係の見直し
未使用の依存関係が残っている場合:
// 不要なインポートを削除
import deprecatedLibrary from 'deprecated-library'; // これが原因の可能性
チェック方法:
- Xcodeエラーログを詳細に確認
- エラーメッセージに表示されているファイルパスに注目
- 不要な依存関係を完全削除:bash
npm uninstall deprecated-library # または pod remove DeprecatedPod
根本的な解決のために
最新バージョンを使うことが最も重要です:
- Flutterプロジェクト: v3.7.10以降を使用(Hotfix詳細)
- CocoaPods: v1.12.1以降を利用
- Xcodeの安定版を使用
トラブルシューティングフロー
上記解決策を実施しても解消しない場合、多くのケースでプロジェクトの完全リセットが有効です:
pod cache clean --all
flutter clean
(Flutterプロジェクトの場合)rm -rf ios/Pods ios/Podfile.lock
pod install --repo-update
- Xcode → Product → Clean Build Folder