HockeyAppでiOSアプリのクラッシュ解析を行う

iOSアプリ用のクラッシュ解析ツールはとても充実していると思う。
というか、ストアにリリースしているアプリなら、Appleがもともと提供しているクラッシュログだけでも、事足りるかもしれない。

でも、それではダメだったんだ。なぜなら、Enterpriseだからさ。
...というこで、例えば、Enterprise等でリリースしているアプリにクラッシュ解析を導入したいとかニーズはあると思う。その選択肢として、HockeyAppがある。

HockeyApp
https://www.hockeyapp.net/

数あるクラッシュ解析ツールの中で、HockeyAppのメリットは以下に尽きる。それは、
Windowsでも使える。しかも、UWPだけではなく、WPFでも使える
と、いうこと!

iOS、Android、Windows(UWP、デスクトップ)でもいけるとなれば、業務アプリ開発者にとってはとてもうれしい。
ということで、iOSへのインストール方法。

HockeyAppをiOSにインストールする

CocoaPodsでもインストールできる。CocoaPodsが使える場合はそちらの方がカンタン。
後は、mac用のアプリがあるので、それを使ってもできるみたい。というか、それを使うのが普通なのだろう。

だがしかし、ここでは、マニュアルでやる手順を記述する。
参照元
https://support.hockeyapp.net/kb/client-integration-ios-mac-os-x-tvos/hockeyapp-for-ios

導入手順

0. HockeyAppのアカウントを作成して、管理ページにアプリを登録しておく。

1. SDKをダウンロードする。

2. ダウンロードしたファイルをプロジェクトへコピー。
ダウンロードしたファイルを解凍し、Finderで、フォルダごと、まるっとコピーする。
あくまでもFinder上での操作のみで、Xcodeは使わない。
今回はプロジェクトフォルダのルートに配置した。

ファインダー上での位置
プロジェクトファイルのルート階層に配置

3. HockeySDK.embeddedframeworkディレクトリをプロジェクトへ追加する。
Xcodeでプロジェクトを開いて、Finder上から、HockeySDK.embeddedframeworkをドラッグアンドドロップ。

プロジェクトへドラッグアンドドロップ
プロジェクトへドラッグアンドドロップ

表示されるポップアップでは、Create GroupsCopy Item if neededにチェックをつけた。

プロジェクト配置時のポップ
プロジェクト配置時のポップ

で、Linked Frameworks and Librariesにも加わっていたし、大丈夫そう。

Linked Frameworks and Libraries

4. コードを記述。
AppDelegate.swiftに、以下の初期化のコード3行をそのままコピペして、IDを管理画面に表示されていたIDに変更。importするのも忘れずに。

5. さっそく試してみる。
ボタンをタップしたときに、クラッシュを意図的に発生させるよう、以下コードを実装。

で、debugビルドで起動すると、以下ログが出てくる。

[HockeySDK] -[BITCrashManager startManagerInSdkEnvironment:]_block_invoke/1222 [HockeySDK] WARNING: Detecting crashes is NOT enabled due to running the app with a debugger attached.

内容は、デバッガーをアタッチさせた状態(つまり、普通にXcodeの再生ボタンでアプリをビルドして起動した場合)では、クラッシュを検知できないらしい。
デバッガーをアタッチさせないで起動すれば、debugビルドでも動作は試せるっぽい。
やり方は、一度シミュレータで起動したら、今度は、XcodeのRunボタンから起動しないで、シミュレータのホーム画面からアイコンをタップして起動すればよい。
実機も同じで、XcodeのRunボタンから起動しないで、アイコンをタップして起動させる。

立ち上がったら、意図的にクラッシュさせてアプリを落とす。
で、もう一度アプリを立ち上げると...

クラッシュレポート

クラッシュ情報を送るかどうかのポップアップきたー。

デフォルトの動作はユーザに操作させるようになっているが、勝手に送るように設定することもできる。
Send Reportをタップして、HockeyAppの管理画面を見てみると、さっそくクラッシュ情報が届いていた。

ただ、クラッシュ情報は、このままでは、メモリアドレスの羅列で、何がなんだかわからない。
これは、シンボルファイルが必要で、別にアップロードする必要がある

とりあえず、インストールはOK!