Application Insights を ASP.NET と Xamarin.iOS で使ってきましたが、今回はネイティブな iOS アプリケーションに Application Insights を組み込んでみます。
SDK は GitHub で公開されていますが、わざわざダウンロードしなくても Application Insights for Mac を使うと Xcode と連携し、簡単に組み込みが可能です。
上のリンクからダウンロードしたアプリケーションを実行すると、Microsoft アカウントでのログインが必要になります。Azure のサブスクリプションも当然ながら必要です。
ログインすると 2 つのボタンが表示されますが、まずはアプリケーションに SDK を組み込みたいので Integrate を選びます。Upload は dSYM を App Insights にアップデートする場合に使います。
Integrate を選ぶと、ローカルマシンに存在する Xcode プロジェクトの一覧が表示されます。
さらに Integrate ボタンを選ぶと、パスの確認画面などになりますが、ポチポチと Next ボタンを押していくと Xcode にスクリプトを組み込む画面になります。これはビルド時に dSYM をアップロードする処理です。
Run Script を追加してビルドを行うと、自動的に次の画面に切り替わります。次は SDK を Xcode にドラッグドロップでコピーする画面ですが、これも単純にドロップすれば問題ないです。
SDK のコピー後は、Azure 上の Application Insights と関連付ける処理になります。まだ作成されていない場合には、この画面から新しく作成できます。
そして最後の手順として、UIApplicationDelegate を実装したクラスに Application Insights の初期化処理を追加します。Objective-C ではなく、Swift も選ぶことが出来ます。
組み込んだ結果は以下のようなコードになります。とてもシンプルですね。
Application Insights の実行に必要なキーは、組み込み時に Info.plist に自動的に追加されるので、そのまま実行するだけでデータの収集が開始されます。
しばらくするとポータルで情報を確認できるようになります。
NSAssert などを使ってエラーを起こすと、クラッシュが収集されていることが確認できます。まだベータ版ですが、OS X 向けのアプリケーションも用意されていて、使い勝手は良くなっています。
Linker でエラーになる場合
Application Insights をセットアップ後、ビルドをすると Linker でエラーが大量に出る場合があります。主に古い Xcode で作成したアプリケーションの場合に発生するようです。
エラーの内容が分かりにくいですが、Xcode のビルド設定にある "Enable Modules (C and Objective-C)" が No になっていると発生するようです。なので、これを Yes にするとビルドが通るようになります。
アプリ内で @import を使っていなくても、Application Insights が内部で使っているためエラーとなっているようです。基本的に Yes のままにしておけば問題ないと思います。