iOSアプリのクラッシュログを解析する
iOSアプリ申請からのーー、リジェクト!!
差出人: Apple 2.1 - Apps that crash will be rejected
アプリがクラッシュするということで、丁寧にapple神からアプリのクラッシュログが添付されてました。
送られてくるクラッシュログは以下のようにメモリアドレスが記載されたものになってる
・ ・ 7 UIKit 0x00000001893200c0 0x18930c000 + 82112 8 UIKit 0x000000018931fcc4 0x18930c000 + 81092 ・ ・
クラッシュの原因を調査するにはsymbolicatecrashコマンドを利用してシンボル付きのログに変換する必要がある。
やってみた。
環境
- Xcode 7.2.1
必要なもの
- dSYMファイル
- クラッシュログ
まずはクラッシュログをダウンロードする
クラッシュログはリジェクト理由がクラッシュであれば、itunes connectの問題解決センターからダウンロードできるはず。
リジェクト理由がつらつら書かれて、最後の方にファイルがリンクされていると思うのでそれをデスクトップにダウンロードする。
dSYMファイルを取得する
必ずアプリ申請時に利用したArchiveから取得する。
- Xcodeを起動する
- Window > Organizerを選択
- アプリ申請時に指定したArchiveを右クリック > Show in Finderを選択
- 対象の.xcarchiveファイルを右クリック > パッケージの内容を表示を選択
- dSYMsディレクトリの中にアプリ名.app.dSYMファイルがあるのでデスクトップにコピーする
変換する
ここからの先の作業はMacのターミナルから行う(Xcodeでパパっとできるようになるといいのにね!)
dSYMファイルとクラッシュログはデスクトップに置いた
cd ~/Desktop
PATHを通す
これやっとかないとsymbolicatecrashコマンドでエラーがでる
export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer/
コマンド打つ(crash.txtに書き出し)。コマンドのPATHめっちゃ長いけどやってることは。
symbolicatecrash クラッシュログ dSYMファイル > crash.txt
/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash クラッシュログ dSYMファイル > crash.txt
変換後
crash.txtを見ると、メモリアドレスがシンボルに変換されている
・ ・ 7 UIKit 0x00000001893200c0 -[UIViewController loadViewIfRequired] + 996 8 UIKit 0x000000018931fcc4 -[UIViewController view] + 28 ・ ・ ・
その他
symbolicatecrashコマンドのPATHがかなり長いのでalias貼っておくと後々便利かも
~/.bashrcに書いておいた
export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer/ alias symbolicatecrash="/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash"