Appleの審査でリジェクトされた際に、「.clash」や「.ips」といった形でクラッシュログが添付されていることがあります。
中身を確認すると以下のような内容になっていますが、このままだとコードのどの部分でクラッシュしたのかが分かりません。
〜一部抜粋〜
Thread 5 Crashed:
1 CoreFoundation 0x24936b62 0x24831000 + 135152
2 Foundation 0x255e49f5 0x25575000 + 21531
3 SampleApp 0x000341d2 0xb000 + 55521
4 libdispatch.dylib 0x32a107b6 0x32a0f000 + 1235
そこで、「symbolicatecrash」というツールを利用してログにシンボル情報を追加することで、クラッシュ箇所を特定出来るようにします。
appファイル及びdSYMファイルはクラッシュログを出力したものと同じものを使う必要があります。
私は以下の方法で取得しました。
実行環境
・OS X 10.9.5
・Xcode6.1
「symbolicatecrash」は私の環境では以下のパスにありました。
/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash
長過ぎるのでシンボリックリンクやエイリアスを作成しておくと便利です。
あとは下記コマンドを実行する事で、クラッシュログにシンボル情報を追加したログファイルを作成できます。
# このコマンドを実行しないと「Error: "DEVELOPER_DIR" is not defined at symbolicatecrash line 60.」といったエラーメッセージが表示されます。
export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"
symbolicatecrash クラッシュログファイル dSYMファイル appファイル > crash.log
作成されたcrash.logを確認してみるとシンボル情報が追加され、 SampleController.m の121行目辺りが怪しいことが分かるようになりました。
〜一部抜粋〜
Thread 5 Crashed:
1 CoreFoundation 0x24936b62 +[NSException raise:format:] + 108
2 Foundation 0x255e49f5 +[NSJSONSerialization JSONObjectWithData:options:error:] + 62
3 SampleApp 0x000341d2 __35-[SampleController startSample:] (SampleController.m:121)
4 libdispatch.dylib 0x32a107b6 _dispatch_call_block_and_release + 8