RSS

iPhone:dSYMの意味,crashとsymbolicatecrash

iPhoneアプリをビルドすると実行ファイルの側にdSYMというディレクトリ(パッケージしてあって見た目はファイル)ができる.どういうためなのか,何のためにあるのかと気になっていた.

rejectを食らって,crashファイルについて色々と調べたら,その仕様用途が分かってきた.dSYMはデバッグシンボル群を記録していて,そのdSYMを使えば呪文のようなcrashファイルをシンボル付きに変換することができる.OS 3.0に上がって他サイトのシンボル付き変換の情報が若干使えなくなったので,その方法を以下にメモ.

【準備】変換してくれる実行ファイルsymbolicatecrash(OS 3.0になって,場所が分かった)をパスが通っている場所に移す.例えば,実行ファイルを/usr/local/binにコピーする.管理者権限が必要なのでsudoさん大活躍.
sudo cp /Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash /usr/local/bin
そして,Permission deniedで怒られるので,続いて,sudoさんに仕事をしてもらう.
sudo chmod a+x /usr/local/bin/symbolicatecrash
もしくは,ファイルを左クリックして「情報を見る」で実行の許可を与える.

【変換】引数の一番目にcrash,二番目にdSYMを与えて,以下のように実行する.
symbolicatecrash hogehoge.crash hogehoge.dSYM > hogehogeWithSymbols.crash
シンボル付きが標準出力されるので,リダイレクトで別ファイルに書き込んでおく.これによって,
変換前:UIKit 0x33301a14 0x3314b000 + 1796628
変換後:UIKit 0x001b6a14 -[UITextView scrollRangeToVisible:] + 96
のようにcrashファイルが変わる.シンボルが分かれば,どこでクラッシュしたかが一目瞭然.ということで,ビルド後のdSYMは削除せずに大切に保存しておいた方がよいそうです.

ちなみに,rejectを食らったアプリは,そこまで解析しなくてもソースを眺めていたら分かるようなところで,クラッシュしてましたw.審査を浪費してしまった,ごめん.廉価版だったから,デバッグが足りんかったーーー.恥ずかしい

Bookmark and Share

0 コメント: