2014年7月19日土曜日

QuincyKitでiOSアプリのクラッシュレポートを取得したときに困ったメモ

iOSアプリでクラッシュレポートを取得するためにQuincyKitというライブラリを使ってみた。
https://github.com/TheRealKerni/QuincyKit

わかりにくかったところをメモしておく。

クラッシュレポートが送信されるタイミング

クラッシュレポートはクラッシュした次の起動のタイミングで送信される仕様になっている。クラッシュした時ではネットワークが使えないかもしれないので、ローカルにレポートを保存しておき、次回起動時にレポートを送信するということなのだろう。

symbolicateとは何か

送信されたレポートのスタックトレースには最初は標準ライブラリのシンボル名しか表示されない。
そこで送信されたレポートには手動でアプリ固有のシンボル名を表示できるようにする処理を行う。これをsymbolicateと呼んでいる。

symbolicateで起きた問題

symbolicateするにはリポジトリのserver/localに配置されているスクリプトを使う。
symbolicate.phpはサーバーのレポートをsymbolicateして更新するスクリプトでsymbolicatecrash.plはコマンドラインで指定したクラッシュレポートをsymbolicateするスクリプトだ。

僕の環境ではこれを使うにあたって3つ問題が発生した。

1.原因不明だがfile_get_contents()がWarningを出して止まってしまう
symbolicate.phpのfile_get_contents()を使っている場所をcurlを使うように修正して対応した。

2.MoreUtils.pmがなくてsymbolicatecrash.plが動かない
標準では入っていないパッケージだったようなので下記の通りインストールした。
sudo cpan install List::MoreUtils

3.symbolicateを実行してもシンボル名が表示されない
これは下記のサイトを参考にXCodeのBuild Settingsを修正したところ直った。
http://support.hockeyapp.net/kb/client-integration-ios-mac-os-x/how-to-solve-symbolication-problems
僕の場合はStrip Debug Symbols During CopyをYESに変更する必要があった。