iOSアプリのCrashログをsymbolicateする

iPhoneアプリのクラッシュログからクラッシュの原因を探す。

必要なもの

  1. クラッシュログ
  2. dSYMファイル

クラッシュログを取得

クラッシュログ一覧を表示

Devicesウィンドウを開く

Xcode Windows -> Devices (Shift+Cmd+2)

  1. デバイスを選択
  2. View Device Logs でクラッシュログの一覧を表示

クラッシュログのエクスポート

  1. 該当アプリのクラッシュログをCtrl+左クリック(右クリック)
  2. Export Log で任意のディレクトリに出力

dSYMファイルを取得

Organizerを開く

Xcode Windows -> Organizer (Shift+Cmd+2)

該当アプリのクラッシュしたバイナリに対応するxcarchiveファイルを表示

  1. 該当アプリを選択
  2. クラッシュした時のビルドをCtrl+左クリック(右クリック)
  3. Show in Finder でファインダーで表示する

dSYMファイルを取り出す

  1. ファインダーで表示された xcarchive ファイルをCtrl+左クリック(右クリック)
  2. パッケージの内容を表示する

クラッシュログを書き出したディレクトリにパッケージ内の dSYMs ディレクトリを書き出す

パッケージ内はこんな感じ

書き出したディレクトリはこんなかんじ

クラッシュログをsymbolicateする

terminal でクラッシュログを書き出したディレクトリへ移動。 terminal に該当ディレクトリをドラッグアンドドロップでパスが貼り付けられる。

cd /path/to/crash_log

symbolicatecrash のpath

/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Resources/symbolicatecrash

これでもOK

/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash

長いので変数にする(パスでもいいけど余計なものがたくさんあるので確認推奨

symbolicatecrash="/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Resources/symbolicatecrash"

このままでは DEVELOPER_DIR が見つからないとエラーになるので宣言する。

export DEVELOPER_DIR=`xcode-select -p`

xcode-select が無い場合は

export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"

クラッシュログを symbolicate.crash という名前で出力する。そのまま⌘を叩くと標準出力で返されるのでと読みづらい。

$symbolicatecrash ./MyCrashLog.crash ./dSYM >> symbolicate.crash

dSYMファイルを引数に指定しているサイトもあるけどディレクトリでok