新しいプロジェクトが始まったので、Jenkinsでアプリをビルドできるように設定していました。
.xcarchiveが malformed で、エクスポートに失敗する現象にハマる
いつものようにビルドスクリプトを書いたのですが、xcodebuildコマンドで ARCHIVEには成功するが、EXPORTで失敗する現象にハマりました。
xcodebuild -sdk iphoneos \ -workspace {APP_NAME}.xcworkspace \ -scheme {APP_NAME} \ -configuration Release archive \ -archivePath {BUILD_PATH}/{APP_NAME}.xcarchive \ SYMROOT={BUILD_PATH} ** ARCHIVE SUCCEEDED **
ここまでは問題なく、次のipaファイルを生成する部分で失敗します。
xcodebuild -exportArchive \ -archivePath {BUILD_PATH}/{APP_NAME}.xcarchive \ -exportPath {BUILD_PATH} \ -exportOptionsPlist {BUILD_PATH}/exportOptions.plist error: archive at path '{BUILD_PATH}/{APP_NAME}.xcarchive' is malformed ** EXPORT FAILED **
何が原因で奇形(malformed)の状態になっているのかわかりません。
malformedになる原因と対策
他のプロジェクトから出力した.xcarchiveと比べていくうちに、.xcarchiveに「SwiftSupportフォルダがない」「Info.plistがない」ことがわかりました。
対策
このstackoverflowを参考にして、ARCHIVEするときには SYMROOTオプションをつけないようにしました。
ビルドにはXcode 10.2.1を利用していますが、別のプロジェクトではSYMROOTオプションをつけていても正しくARCHIVEできるにもかかわらず、Xcode 10.2.1で作ったプロジェクトではARCHIVEに成功するものの不正な.xcarchiveができてしまうみたいでした。
2019/10/11追記
Xcode 11.1のxcodebuildでipaファイルを作成しようとしたところ、この現象と同じ現象に遭遇しました。このエントリを書いたことを忘れていたので、4時間無駄にあーだこーだ無駄に時間を使ってしまいました。
関連記事
この他にもiOSアプリ開発で見つけたネタや悩んだ内容など紹介しています。Tipsをまとめておりますのでこちらのページをご参照ください。