👋
App Storeレビュー中に発生したクラッシュのログ(.ipsファイル)を解析する方法
結論
お急ぎの方のため、先に結論から。
-
*.ips
ファイルを用意する。
- アプリのクラッシュが原因でレビューがリジェクトされた場合、通常はクラッシュログ(.ipsファイル)が添付されているはずです。
- クラッシュログについてはApp Store Connectのレビュー画面でDownloadボタンを押すとダウンロードできます。
- アプリがクラッシュしたのにログが添付されていない場合、レビュー担当者に問い合わせてください。
- クラッシュしたアプリの
*.dSYM
を用意する。
- 通常、App Storeにアプリを提出するにはXcode→Archiveを実行し、そのアーカイブを提出します。
- このときアーカイブと同時にdSYMが作成されます。通常は以下のディレクトリに作成されます。
~/Library/Developer/Xcode/Archives/<アプリをビルドした日付>/<アプリ名>.xcarchive/dSYMs/<アプリ名>.app.dSYM
-
*.dSYM
の実態はディレクトリです。作業ディレクトリにコピーする際はcp -r
でコピーしてください。
- ターミナルで以下のコマンドを実行します。
# 結果を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のレビューに参考資料として以下のドキュメントがリンクされているはずです。
- Adding identifiable symbol names to a crash report | Apple Developer Documentation
- Identifying the cause of common crashes | Apple Developer Documentation
残念ながら上記のドキュメントで解説されている内容は古すぎて参考になりません。公式ドキュメントを読み解く際のヒントとして、.ips
ファイルではなく.crash
ファイルを前提に説明されている場合、そのドキュメントは内容が古く参考にならない恐れがあると考えてください。
Discussion