iOSアプリやmacOSアプリは、クラッシュすると自動的にクラッシュログファイルが作成されます。クラッシュログファイルは .ips
という拡張子のファイルです。
クラッシュログファイルには、以下のような情報が入っています。
- OSのバージョンやCPUアーキテクチャなどの動作環境
- クラッシュしたスレッド
- クラッシュ時の全スレッドのコールスタック
- クラッシュ時の状態
クラッシュログは原因調査の大きな材料です。クラッシュログから原因が判明することも多くあります。
シンボル化の必要性について
市場にリリースされているアプリは、シンボル情報をシンボリックファイルに出力して、アプリ本体にはシンボル情報を削除していることが多くあります。シンボル情報がないため、クラッシュログにはメソッド名などのシンボル名が書かれず、アドレスが書かれています。
アドレスの状態では、クラッシュしたメソッドが分かりません。そこで、dSYM
ファイルを使ってクラッシュログのシンボル化を行います。
シンボル化の方法
シンボル化を行うには、以下のように操作します。
(1) 作業ディレクトリにクラッシュログファイルとdSYM
ファイルをコピーします。
(2) CrashSymbolicator.py
を使ってシンボル化します。
ターミナルで以下を実行します。
python3 /Applications/Xcode.app/Contents/SharedFrameworks/CoreSymbolicationDT.framework/Versions/A/Resources/CrashSymbolicator.py -p path-to-crashlog.ips -d path-to-symbol.dSYM -o path-to-crashlog.json
path-to-crashlog.json
にシンボル化されたクラッシュログがJSON形式で出力されます。
ログの形式変更
JSON形式のファイルは見づらいので、クラシカルなクラッシュログに変換します。GitHubで変換スクリプトが以下のリポジトリで公開されています。
このリポジトリの convertFromJSON.swift
を使用します。以下のように実行します。
swift convertFromJSON.swift -i path-to-crashlog.json -o path-to-crashlog.log`
成功すると、path-to-crashlog.log
に変換されたクラッシュログが出力されます。