読者です 読者をやめる 読者になる 読者になる

備忘録

開発の日々の備忘録

iOSアプリのクラッシュログを解析する


iOSアプリ申請からのーー、リジェクト!!

差出人: Apple
2.1 - Apps that crash will be rejected

アプリがクラッシュするということで、丁寧にapple神からアプリのクラッシュログが添付されてました。

送られてくるクラッシュログは以下のようにメモリアドレスが記載されたものになってる

・
・
7   UIKit    0x00000001893200c0 0x18930c000 + 82112
8   UIKit    0x000000018931fcc4 0x18930c000 + 81092
・
・

クラッシュの原因を調査するにはsymbolicatecrashコマンドを利用してシンボル付きのログに変換する必要がある。

やってみた。

環境


必要なもの


  • 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"