👋

App Storeレビュー中に発生したクラッシュのログ(.ipsファイル)を解析する方法

2025/02/18に公開

結論

お急ぎの方のため、先に結論から。

  1. *.ipsファイルを用意する。
  • アプリのクラッシュが原因でレビューがリジェクトされた場合、通常はクラッシュログ(.ipsファイル)が添付されているはずです。
  • クラッシュログについてはApp Store Connectのレビュー画面でDownloadボタンを押すとダウンロードできます。
  • アプリがクラッシュしたのにログが添付されていない場合、レビュー担当者に問い合わせてください。
  1. クラッシュしたアプリの*.dSYMを用意する。
  • 通常、App Storeにアプリを提出するにはXcode→Archiveを実行し、そのアーカイブを提出します。
  • このときアーカイブと同時にdSYMが作成されます。通常は以下のディレクトリに作成されます。
  • ~/Library/Developer/Xcode/Archives/<アプリをビルドした日付>/<アプリ名>.xcarchive/dSYMs/<アプリ名>.app.dSYM
  • *.dSYMの実態はディレクトリです。作業ディレクトリにコピーする際はcp -rでコピーしてください。
  1. ターミナルで以下のコマンドを実行します。
# 結果をsymbolicated.jsonに出力
python3 /Applications/Xcode.app/Contents/SharedFrameworks/CoreSymbolicationDT.framework/Resources/CrashSymbolicator.py -p <.ipsファイルのパス> -d <.dSYMのパス> -o symbolicated.json

成功すると*.ipsファイルに格納された生のアドレスがソースコードの情報に変換されます。クラッシュの原因調査、がんばってください。

本記事の投稿にあたりXcode 14からXcode 16で動作確認しました。

(補足1).ipsファイルをJSONとして整形してはいけない

.ipsファイルの実態はJSONです。が、しかし、例えばjqコマンドで.ipsファイルを整形してはいけません。

JSONとして整形された.ipsファイルに対して上記のコマンドを実行すると「Crash log is missing bug_type field. Stopping symbolication.」と表示されて、解析が失敗します。

整形してしまった場合、jq -cで開業と空白を除去すると*.ipsファイルは解析可能になります。

(補足2)Apple Developerのドキュメントは古くて参考にならない

アプリがクラッシュした場合、App Store Connectのレビューに参考資料として以下のドキュメントがリンクされているはずです。

残念ながら上記のドキュメントで解説されている内容は古すぎて参考になりません。公式ドキュメントを読み解く際のヒントとして、.ipsファイルではなく.crashファイルを前提に説明されている場合、そのドキュメントは内容が古く参考にならない恐れがあると考えてください。

Discussion