クラッシュレポートサービスについて調べた@hirocasterでございませう。
iPhoneなどのiOSで開発をしたアプリケーションが何らかの理由で落ちてしまった場合、端末にログが保存されています。このログをクラッシュレポートと呼びます。
クラッシュレポートを開発者に届けることができれば、開発者はアプリケーションが落ちた原因の不具合を直すのにとても役立ちます。
このクラッシュレポートを端末から取得するためにはMacなどに端末を接続して、ログを取得する操作をしてもらわないとなりません。これを実際のアプリを利用しているユーザーにしてもらうのはとてもハードルが高い内容です。(実際の操作方法はiOS開発ガイドのデベロッパへのクラッシュレポートの送信をご覧ください)
そこで、端末から自動的にクラッシュレポートを送信してくれるサービスが存在します。
自前でクラッシュレポートを送信するライブラリも存在します。
この中でRubyMotionから何が利用しやすいか一通り試してみました。
Crashlytics
Xcode用のアプリケーションまで用意されていて、Xcodeに組み込むのはとても楽そうなのですが、RubyMotionだとXcode用のアプリケーションがどういう設定をやっているのか記述しなければいけないので、パッと見た感じいまいちわからなかった+調べる時間があまりなかったので、今回はパスすることにしました。
実際にRubyMotionで利用している方がいましたら、設定方法を教えて頂けると幸いです。
Crittercism
高機能でとても魅力的でした。組み込むためのライブラリもCocoapodsに用意されており、比較的容易に組み込むことができました。ですが、リモートからログを送信し、確認することはできましたが、実際にクラッシュしたレポートが表示されず、困り果てました。よって、見送り。
Bugsense
最終的にBugsenseを利用する事にしました。クラッシュレポートも正常に送信され、表示されました。非情に便利です。NSLogで実際にレポートを送信しているログが表示されたりします。こういった細かい部分が、開発者側として利用しやすさつながっていると感心しました。
インストール方法
RubyMotionでのインストール方法はRakefileに
Motion::Project::App.setup do |app|
app.pods do
pod 'BugSense'
end
app.vendor_project(
'vendor/Pods/BugSense/BugSense-iOS.framework',
:static,
:products => %w{BugSense-iOS},
:headers_dir => 'Headers'
)
end
この2つを追加してください。
あとは./app/app_delegate.rbに
def on_load(app, options)
BugSenseController.sharedControllerWithBugSenseAPIKey 'API_KEY'
(省略)
end
という感じでAPI KEYを設定してあげるだけです。(Promotionを使っているのでon_loadになってますが、適時読み替えてください)
これで設定は終了です。rakeコマンドでシミュレータを立ち上げると
BugSense --> Server responded with status code: 200
と表示されていれば、正常に動作するはずです。何らかのクラッシュのあとに再度アプリを立ち上げると
BugSense --> Processing crash report...
BugSense --> Crashed on 2013-08-05 06:38:38 +0000, with signal SIGABRT (code #0, address=0x95e77a6a)
BugSense --> Generating JSON data from crash report...
BugSense --> Generating JSON data from crash report: 1/14
BugSense --> Generating JSON data from crash report: 2/14
BugSense --> Generating JSON data from crash report: 3/14
BugSense --> Generating JSON data from crash report: 4/14
BugSense --> Generating JSON data from crash report: 5/14
BugSense --> Generating JSON data from crash report: 6/14
BugSense --> Generating JSON data from crash report: 7/14
BugSense --> Generating JSON data from crash report: 8/14
BugSense --> Generating JSON data from crash report: 9/14
BugSense --> Generating JSON data from crash report: 10/14
BugSense --> Generating JSON data from crash report: 11/14
BugSense --> Generating JSON data from crash report: 12/14
BugSense --> Generating JSON data from crash report: 13/14
BugSense --> Generating JSON data from crash report: 14/14
BugSense --> Posting JSON data...
BugSense --> Server responded with status code: 200
このようにJSON dataでクラッシュレポートを送信してくれます。
バグレポートに対してGitHubやPivotal Trackerとの連携もしてくれるようです。これで、とてもバグの原因を特定しやすくなりました。
イベントの宣伝
RubyMotionTokyo meetupというRubyMotionを使う人達が集まるイベントを開催しています。興味のある方は参加してください。