概要
アーカイブしたプロジェクトから、ipaを作成しょうとすると、「IPA processing failed」と表示されて作成出来ない問題が発生しました。
いろいろ調べて解決方法が分かりました。
ネット上では間違った方法が多いので、同じ問題にぶち当たった方のために、解決方法をQiitaに残します。
XcodeのOrganizeから作成しようとした時の画面 ↓
CIサービス(Bitrise)でも、exportArchiveコマンド実行時にエラー
解決方法を先に言ってしまうと、Carthage の設定を見直せば、解決します。
解決方法
Carthageの公式ページでは、導入手順がいつからか、xcfilelistを使うようになっていました。
公式ページ以外のCarthageのインストール手順を書いた記事では、ほとんどが、Input Filesに直接パスを指定する記事で、xcfilelistを使った記事を見かけなかったので、変わったことに気づいていませんでした。
Carthageの公式ではxcfilelistを使っているので、こっちの手順に切り替える必要があったのかもしれません。
Input/Output File Lists とは、Xcode10で追加された Input / Output Files に代わる、
xcfilelist をパスとして指定できる新たな枠組み
以下の2つの作業を行うことで、解決できます。
- Carthageの設定をInput Filesから、xcfilelistに変更
- Embed Frameworks から、CarthageのFrameworkを削除
1. Carthageの設定をInput Filesから、xcfilelistに変更
Carthageの公式ページの手順の通りに、Input Filesから、xcfilelistに変更すればOKです。
ただし、Input Filesから、xcfilelistに変更後、ビルド時に「Error: Multiple commands produce」と表示されてしまうことがあるので、それの場合、別途、対処が必要になります。
2. Embed Frameworks から、CarthageのFrameworkを削除
Xcode10から、デフォルトになった新しいビルドシステムは、フレームワークのコピーシステムが稼働するようで、それが重複してしまってエラーとなるようです。
具体的な対処方法としては、TARGETS → Build Phases → Embed Frameworks から、xcfilelist記載したCarthageのFrameworkを削除します。
最終的には、こういった形になるはずです。
上記のプロジェクトの場合の、xcfilelist
これで、ipaを作成できるようになります。
経緯
このページにたどり着いた方のために、試行錯誤して解決方法にたどり着いた経緯を書いておきます。
シュミレーターと実機では、Xcodeから直接インストールすれば、どちらも問題なく起動していました。
その後、OTA配布しようと思って、CIでビルドしてアーカイブすると、エラーが出ることに気付き、Xcodeでも試したがダメでした。
いろいろ調べたところ、シュミレータアーキテクチャが含まれているとipaファイルを作成できないという記事を見たのでで、それを参考にしてアーキテクチャを削除しましたが、自分の環境ではダメでした。
シミュレータアーキテクチャを削除すると、シミュレータでアプリ起動ができなくなるそうなので、これは正しい解決方法ではないなと思って、いろいろ探してみたら、下記の記事を見つけ、その通りにしてみると、ipaの作成が出来るようになりました。
Carthage + Xcode の Archive で IPA processing failed が発生した場合の対処 - hd 5.0
シュミレータアーキテクチャを削除というのは、正しい対処方法ではないと思うので、まずは、Carthageを再設定してみてください。
その他
「IPA processing failed」のエラーログについて
XcodeのOrganizeのエラーが出た画面でShow Logsからフォルダを開くと、「IDEDistribution.standard.log」という名前のログがあります。
ここで、エラー内容を確認することができます。
自分の場合は、Carthageでインストールしているライブラリ(このログでは、APIKit)でエラーが出ているので、Carthageが怪しそうだなというところまでは、気がつきました。
シュミレータアーキテクチャを削除したときのCIのエラー
誰かの役に立つかもしれないので、シュミレータアーキテクチャを削除したときのCIのエラーも貼っておきます。
こちらは、「IPA processing failed」と表示されたあと、シュミレータアーキテクチャを削除してCIでビルドをしてみたときのエラーです。
参考にしたサイト
- Carthage + Xcode の Archive で IPA processing failed が発生した場合の対処 - hd 5.0
- Carthage/Carthage: A simple, decentralized dependency manager for Cocoa
- Xcode10 Error: Multiple commands produceを解決する - Qiita
- CarthageでInput File Listsにxcfilelistを渡す利点と方法 - もちゅろぐ