先日初めてiOSアプリをリリースし、アプリの中にCrashlyticsを導入したのですが、いくつかハマった点があったのでまとめました。Crashlytics入れたのにうまく動かない!ということがあって、もし以下のケースに当てはまる場合は参考にしていただけると嬉しいです。
Crashlyticsの導入手順はasakaharaさんのこちらの記事が丁寧でわかりやすいです。
Crash Report解析サービスのCrashlyticsを試してみた
参考までに現在の環境は以下のとおりです。今後改善することもあるかもしれません。
- OS: Mac OS 10.9.4 Mavericks
- XCode: version 5.1.1
Project作成はSingle View Projectを選ぶ
まず最初projectを作る際に気をつけないといけないのは、 「Single View Project」 を選んでおくことです。
自分は画面ごとにxibを作る開発スタイルで、最初に 「Empty Application」 を選んで進めていたらなぜかクラッシュレポートが届きませんでした。
アプリを起動したらUnable to locate application iconというエラーが出る
作りたてのプロジェクトにCrashlyticsを入れると、以下の様なエラーログが出ると思います。
2014-07-27 11:23:04.283 sample[925:3603] [Crashlytics] Unable to locate application icon
Crashlyticsのdashboardでアイコンを表示させることができない時に表示されるエラーのようです。
Images.xcassetsでAppIconを設定してあげないとダメなようでした。Icon.pngを放り込むとDEBUG環境だとアイコンが表示されるので、気づかない場合があるかもしれません。
ググってたら具体的な解決策が出ていなくて、なぜかTwitterのDMで回答が送られていて分からなかったので結構ハマりました…。
[[Crashlytics sharedInstance] crash] でクラッシュレポートが届かない
Crashlyticsを自分のアプリに組み込んだ後に、「実際にクラッシュレポートが届くかどうか確認したい!」というケースがあると思います。
強制的にクラッシュするにはどうするか、については公式サポートページに書いてありました。
Is there a quick way to force a crash? – Support for Crashlytics
こちらに書いてあるとおり、[[Crashlytics sharedInstance] crash]
でクラッシュさせることはできるようです。
ですが、ウィザードが完了した後にこちらのコードを挿入し、シミュレータや実機でクラッシュさせてもなぜかレポートが届きませんでした。
(ウィザード内で、アプリを起動させてくださいという画面が出るタイミングでコードを挿入してから起動させるとレポートが届く場合がありました)
導入後クラッシュレポートを送るには、以下の様なクラッシュさせるコードを入れて試してみるとよいでしょう。
NSArray *array = [NSArray array];
id data = array[0];
実際にこちらのコードをUIButtonをおした時のIBActionへ挿入すると、クラッシュレポートが届きました。