はじめに

業務でも長い間iOSアプリ開発に携わっていたため、
アプリのクラッシュがユーザに及ぼす影響が非常に大きいことは身にしみて感じています。
とはいってもユーザの手元にあるアプリがクラッシュした報告を受けて、
それを調査するのは至難の業。
ましてやクラッシュの増加を検知して報告前に対応を施すなんてもってのほか。

…と思っていましたが、Fabricというプラグインの中で提供されているCrashlyticsを導入すれば、
それが簡単にできてしまいます。



Crashlyticsとは

Twitterの提供するクラッシュレポート提供サービスの一つです。
FabricというSDKプラグインの1つとして提供されています。

Fabric – App Development Platform for teams

利用するメリット

  • インストール数がわかる
  • クラッシュ率がわかる
  • クラッシュした箇所(行)がわかる

導入手順

今回は、Fabricのチュートリアル通りにFrameworkを取り込むのではなく、
AdmobやRealmと同じ方法で導入したかったためCocoaPodsを利用して導入します。

0. 環境

1. Fabricにユーザ登録をする

前述の通り、Crashlyticsを使用するためにはFabricというプラグインを利用することになりますので、
Fabricのユーザ登録が必要になります。

Get Fabricからユーザ登録を行ってください。
Fabric – App Development Platform for teams

f:id:shigu493:20180101164816p:plain

2. FabricとCrashlyticsをインストールする

Podfileを編集して

vi Podfile

FabricとCrashlyticsを追加します。

use_frameworks!
pod 'Fabric'
pod 'Crashlytics'

インストールします。

$ pod install
Analyzing dependencies
Downloading dependencies
Installing Crashlytics (3.9.3)
Installing Fabric (1.7.2)
Generating Pods project
Integrating client project
Sending stats
Pod installation complete! There are 5 dependencies from the Podfile and 6 total pods installed.

3. Build Phaseにrun scriptを追加する

Build Phaseにrun scriptを追加します。
これにより、ビルド時にFabricを起動するスクリプトが自動で走ります。

"${PODS_ROOT}/Fabric/run" <FABRIC_API_KEY> <BUILD_SECRET>

※ログインした状態で下記にアクセスすると、
FABRIC_API_KEYとBUILD_SECRETが設定された状態のスクリプトがコピーできます。
fabric.io

4. Info.plistにFabricのAPIキーを追加する

Info.pilst>Open As>Source CodeでInfo.plistをソースコードで表示します。
f:id:shigu493:20180106105117p:plain:w300

そして、下記のFabricから中略の前のまでを追記します。
追記する箇所はどこでも構いません。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Fabric</key>
<dict>
<key>APIKey</key>
<string>9da669cf8e9498fac65ac8b565aadf226074982a</string>
<key>Kits</key>
<array>
<dict>
<key>KitInfo</key>
<dict/>
<key>KitName</key>
<string>Crashlytics</string>
</dict>
</array>
</dict>
(中略)
</dict>
</plist>

5. AppDelegateに初期化処理を入れる

AppDelegate.swiftのapplicationメソッドの中にCrashlyticsの初期化処理を追加します。
この際、FabricとCrashlyticsのimportが必要になります。

import UIKit
import Fabric
import Crashlytics
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
Fabric.with([Crashlytics.self])
return true
}
}



6. ビルドする

Cmd+Rでビルドします。

ビルドに成功したら、導入は完了です。
Fabricにログインすると、アプリが追加されています。
f:id:shigu493:20180106104953p:plain:w300

テスト

クラッシュを強制的に発生させる、テストコードも公開されています。
どこでも構いませんが、できれば初期で表示されるView Controllerに下記のように記載します。

import UIKit
import Crashlytics
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let button = UIButton(type: .roundedRect)
button.frame = CGRect(x: 20, y: 50, width: 100, height: 30)
button.setTitle("Crash", for: [])
button.addTarget(self, action: #selector(self.crashButtonTapped(_:)), for: .touchUpInside)
view.addSubview(button)
}
@IBAction func crashButtonTapped(_ sender: AnyObject) {
Crashlytics.sharedInstance().crash()
}
}

アプリを実機でRunし、「Crash」ボタンを押下するとクラッシュを発生させてレポートに表示することができます。

まとめ

たったこれだけで、アプリのクラッシュ率やインストール数、利用状況などの確認ができます。
iOS/Android両対応です。
今回は今後の管理の利便性を考慮してCocoaPodsを利用して導入しましたが、
Fabricインストール時のチュートリアルに則ってFrameworkを取り込むともっと簡単に導入できます。

入れておいて損になることはないと思いますので、ぜひ入れてみてください♪

スポンサーリンク