Command PhaseScriptExecution failed with a nonzero exit code
というエラーを倒すのに、5時間以上かかってしまった。他の人にはこの大変さを経験して欲しくないので、できる限り覚えていることを記述しておこうと思います。
結論から言うと、
Carthageで導入したフレームワークを消すことで解決しました。
消し方は、こちらの記事を参照。いたって普通に消しました。
ただ、なぜ解決したのかは結局のところわかりませんでした。
ので、Carthageを使うのは怖いです。たまたま自分はCarthageで導入したフレームワークはあってもなくても良いような存在だったのでなんとかなりましたが、もしコアの部分にCarthageでインストールしていたらどうなっていたのか…
☆
さて、
まずは自分の実行環境を説明しておこうと思います。
XcodeはVersion 10.1
OSはMojave
CocoaPodsもCarthageも最新です。
自分はついこの間Macbook Proを購入し、プロジェクトを今まで使っていたMacbookから新しいMacbook Proへと移行するタイミングにありました。
アップデートをいくつかして、さぁArchiveしてValidateしてDistributeしようと思っていたら、Archive時にエラーが出たって次第です。
通常のBuild時や実機で試す時にはエラーは起こるときもあれば起こらないときもあるって感じでした。
☆
Command PhaseScriptExecution failed with a nonzero exit codeについて、Google検索で
上位表示されるあらゆるサイト(英語を含む)は読みました。
だいたい書かれているのは、以下の方法です。
・Clean(Command + Shift + K)
・DerivedDataファイル以下全ての中間ファイル(キャッシュ?)を削除
参考:[Xcode][小ネタ] DerivedDataの削除についての備忘録
・Podfileを編集して、Podの再インストール。
・最近アップデートしたライブラリがあれば、ダウングレードして試してみる。
・Cocoa Podsのアップデート
・Carthageのアップデート
・キーチェーンのログインをロック&解除を1度繰り返す
・古いMacbookの証明書をコピー
参考:iOSアプリ開発で実機による開発を複数台(メイン機ではない2台目以降)のMacで行いたい場合
・Build Phases>Run Script>Shellにて、タイピングミスがないか(余計なスペースが入っているケースがある)・・・①
・Xcodeの再起動
・Macbook本体の再起動
上の方法は全て試しました。
自分は古いMacbookの動作が遅すぎて確認できてませんでしたが、古いMacbookであればちゃんと動作するのかも試そうと思ってました。
☆
しかし、これでも解決しませんでした。
正直諦めかけていましたが、自分は以前R.swiftを導入した時に、上の①のミスで、
Command PhaseScriptExecution failed with a nonzero exit codeというエラーが出るケースに遭遇したことがあったんですよね。
ですので、
このエラーはShellのアクシデントで起こってもおかしくないのでは?って仮説を立てました。
そこで、
# /usr/local/bin/carthage copy-frameworks
とcarthageの部分を消してみました。そしたら、Archiveでもエラーが起きない!
これはと思い、[Xcode] Carthageで導入したライブラリを削除する、またはCarthage自体の利用を止める手順を参考にCarthageで導入したファイルを削除。
それに伴いコードを微調整したら、無事Archive後にUploadできました。
無事解決してよかったです。