酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

xcodebuildコマンドで出力した.xcarchiveが malformed でエクスポートに失敗するようになった

新しいプロジェクトが始まったので、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時間無駄にあーだこーだ無駄に時間を使ってしまいました。

blog.ch3cooh.jp

関連記事

この他にもiOSアプリ開発で見つけたネタや悩んだ内容など紹介しています。Tipsをまとめておりますのでこちらのページをご参照ください。