MonoTouch製Appが生成したクラッシュログのシンボルを解決する
Appがクラッシュした時に生成されるクラッシュログ。この中身は関数アドレスが書いてあるだけでとても読み取りにくい。本家Appならばオーガナイザでアドレスのシンボル解決を自動的にやってくれるのだが、MonoTouch製Appの場合は手動で行う必要がある。
下準備
シンボル解決コマンドsymbolicatorに対する環境変数が必要なのでホームディレクトリの.bash_profileに以下を追加する
export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer/
そしてコマンドへのパスがとても長い。
Xcode v4.5.2の時点でパスは/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resourcesになる。いちいちこれを入力するのは面倒なので.bash_profileに以下を追加した。
export PATH=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources:$PATH
Xcode v5では/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrashになる。
dSYM情報の準備
symbolicatorはdSYM情報を必要とする。本家Appの場合は~/Library/Developer/Xcode... なディレクトリに自動生成されている。
MonoTouchの場合はビルド出力先に{プロジェクト名}.app.dSYMという名前のフォルダが生成されている。しかし実はこのままでは必要なファイルが足りずシンボル解決できない。これは{プロジェクト名}.appフォルダ以下のファイルをコピーするだけで解決する。
cd {ビルド先} cp -nR {プロジェクト名}.app/* {プロジェクト名}.app.dSYM
※ビルドするとdSYMフォルダは削除されるのでその度この作業が必要になる。
symbolicatorの実行
symbolicatorを実行する
symbolicator クラッシュログファイル名 {プロジェクト名}.app.dSYM
これでようやくシンボルが解決される。
追記 2014/03/11 14:10
Xcode5でのパスを追記