Skip to content

Xcodeビルドエラー「Command PhaseScriptExecution failed」の解決方法

Xcodeアップデート後のエラーに注意

Xcode 14以降にアップデートした後、「Command PhaseScriptExecution failed with a nonzero exit code」エラーが発生するケースが増えています。このエラーはスクリプト実行フェーズで発生し、主にCocoaPodsやFlutter関連の設定に起因します。以下に体系的な解決策を紹介します。

主要な解決策

1. Pods-Runner-frameworks.shの修正(Flutterプロジェクト向け)

CocoaPods生成スクリプトの不整合が原因で発生する場合があります:

bash
# 修正前
source="$(readlink "${source}")"

# 修正後
source="$(readlink -f "${source}")"

修正手順:

  1. XcodeでPods > Target Support Files > Pods-Runner > Pods-Runner-frameworks.shを開く
  2. readlinkの行をreadlink -fに変更
  3. Xcodeを完全に再起動してクリーンビルド(Shift + Cmd + K

2. iOSデプロイメントターゲットの統一設定

ターゲット設定の不一致が原因の場合の解決方法:

ruby
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
bash
pod deintegrate
pod install

3. 'Based on Configuration'設定の確認(Xcode 15.3+)

Xcode 15.3以降で発生する場合の対応:

  1. Xcodeでプロジェクトを開く
  2. RunnerBuild SettingsBased on Configurationを選択
  3. 以下の設定を確認:
    • Debug: Debugに設定
    • Release: Releaseに設定
    • Profile: Releaseに設定

Based on Configuration設定

環境固有の解決策

Apple Silicon (M1/M2チップ) ユーザー向け

Rosettaのインストール不足が原因の場合:

bash
sudo softwareupdate --install-rosetta --agree-to-license

追加対策:

  1. XcodeをRosettaで実行(アプリケーション → Xcode → 右クリック → 情報 → Rosettaで開く)
  2. ターミナルをRosettaモードで起動

開発環境のチェック

bash
uname -m # arm64ならApple Silicon
flutter doctor -v # Flutter環境チェック

ストレージ不足によるエラー

ディスクスペース不足が原因の場合もあるため確認:

  1. Appleメニュー → このMacについて → ストレージをチェック
  2. 不要ファイルを削除(最低10GBの空き確保が推奨)

その他の効果的な解決法

ファイル削除によるリセット

問題のある設定ファイルをリセット:

bash
rm .xcode.env.local

CocoaPodsのアップデート

古いCocoaPodsバージョンが原因の場合:

bash
sudo gem install cocoapods -v 1.12.1 # v1.12.1以降をインストール
pod repo update
pod deintegrate
pod install

Run Script設定修正

Firebase Crashlytics関連のエラーが発生する場合:

  1. TargetsBuild PhasesRun Scriptを選択
  2. パスを次に変更:
bash
"${BUILD_DIR%/Build/*}/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run"

Run Scriptオプション変更

スクリプト設定オプションを調整:

  1. Run Script項目を開く
  2. 「For install builds only」チェックボックスにチェックを入れる

Install builds only設定

フレームワーク別対処法

React Nativeプロジェクトの場合

bash
# 修正前
set -e

# 修正後
set +e

修正ファイル: node_modules/react-native/scripts/find-node.sh

Cordovaプロジェクトの場合

  1. Pods/{Your Project}フォルダを開く
  2. Pods-{Your Project}-frameworksファイルを編集
  3. readlinkreadlink -fに変更

依存関係の見直し

未使用の依存関係が残っている場合:

javascript
// 不要なインポートを削除
import deprecatedLibrary from 'deprecated-library'; // これが原因の可能性

チェック方法:

  1. Xcodeエラーログを詳細に確認
  2. エラーメッセージに表示されているファイルパスに注目
  3. 不要な依存関係を完全削除:
    bash
    npm uninstall deprecated-library
    # または
    pod remove DeprecatedPod

根本的な解決のために

最新バージョンを使うことが最も重要です:

  • Flutterプロジェクト: v3.7.10以降を使用(Hotfix詳細
  • CocoaPods: v1.12.1以降を利用
  • Xcodeの安定版を使用

トラブルシューティングフロー

上記解決策を実施しても解消しない場合、多くのケースでプロジェクトの完全リセットが有効です:

  1. pod cache clean --all
  2. flutter clean (Flutterプロジェクトの場合)
  3. rm -rf ios/Pods ios/Podfile.lock
  4. pod install --repo-update
  5. Xcode → Product → Clean Build Folder