【Swift】Firebase Crashlyticsの使い方!セットアップとカスタマイズ

【Swift】Firebase Crashlyticsの使い方!セットアップとカスタマイズ

この記事からわかること

  • Swift/Firebase Crashlyticsアプリクラッシュ検知する方法
  • リリースアプリでクラッシュレポート取得するには?
  • レポートが表示されない場合

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

Googleが運営するモバイルサービスであるFirebaseの「Firebase Crashlytics」を利用します。無料で使えるので登録しておいてください。

Firebase Crashlyticsとは?

公式リファレンス:Firebase Crashlytics

Firebase Crashlytics(クラッシュリティクス)はiOSやAndroidなどのモバイルアプリで活用できるクラッシュレポートツールです。テスト配布したものだけでなく、リリースしたアプリがクラッシュした際にリアルタイムでレポートを開発者に提供してくれます。

取得できるクラッシュレポートにはスタックトレース(実際のコード履歴)やデバイス情報、OSバージョン、発生したユーザーの割合などクラッシュの原因や解消に役立つ詳細な情報が含まれています。

管理画面を見てみると発生しているファイル名や関数名、行数、エラー内容などが表示されていることが確認できます。

【Kotlin/Android】Firebase Crashlyticsの使い方!クラッシュレポート

iOSアプリでの導入とセットアップ

iOSアプリでCrashlyticsを有効にするための手順は色々やることがあるので注意が必要です。AndroidではSDKを導入すればクラッシュが検知できるようになるので少し手間が多い印象です。

手順

  1. Firebaseプロジェクトのセットアップ
  2. SDKの導入
  3. iOSプロジェクト内でFirebaseのセットアップ
  4. Run Scriptの追加
  5. デバッグモードでdSYMファイルが生成されるようにする
  6. テストでクラッシュさせてみる

公式リファレンス:Firebase Crashlytics を使ってみる

1.Firebaseプロジェクトのセットアップ

最初に対象アプリのFirebaseプロジェクト作成しておいてください。ここでは詳しい手順は解説しませんが、その際にAnalyticsを有効にしておくことが推奨されています。

2.SDKの導入

SDKはCocoa Podsを使用して導入していきます。「PodFile」に以下を追記してpod installを実行します。


pod 'FirebaseCrashlytics'

3.iOSプロジェクト内でFirebaseのセットアップ

FirebaseApp.configure()を起動時に呼び出すようにしてFirebaseのセットアップを行います。これは他のFirebaseを導入するときにも記述する内容を同じなのですでにあればスキップしてOKです。

import SwiftUI
import FirebaseCore

class AppDelegate: NSObject, UIApplicationDelegate {
  func application(_ application: UIApplication,
                   didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
    FirebaseApp.configure()

    return true
  }
}

@main
struct MySampleApp: App {
    @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    var body: some Scene {
        WindowGroup {
            RootView()
        }
    }
}

4.Run Scriptの追加

続いてCrashlyticsがdSYMファイルを適切に処理できるように「Run Script」を追加します。プロジェクトファイルの「Build Phases」タブ>「+」> 「New Run Script Phase」を選択しRun Script内に以下を記述します。

${PODS_ROOT}/FirebaseCrashlytics/run

※ このRun Scriptフェーズプロジェクトの最後のビルドフェーズで実行される必要があります。そうでない場合はdSYMファイルを適切に処理できない場合があるようです。

プロジェクトのdSYMファイルやGoogleService-Info.plist、Info.plistの場所を「Input Files」で指定します。それぞれのパスを追加しておきます。

${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}
${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${PRODUCT_NAME}
${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist
$(TARGET_BUILD_DIR)/$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/GoogleService-Info.plist
$(TARGET_BUILD_DIR)/$(EXECUTABLE_PATH)
$(SRCROOT)/$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)
【Swift】Firebase Crashlyticsの使い方!セットアップとカスタマイズ

5.デバッグモードでdSYMファイルが生成されるようにする

通常デバッグモードだとdSYMファイルが生成されずCrashlyticsに反映されないので生成されるに変更します。「Build Settings」>「All」タブを選択しdebug information formatを検索します。ビルドごとに設定を変更できるのでDebugも「DWARF with dSYM File」に指定します。

【Swift】Firebase Crashlyticsの使い方!セットアップとカスタマイズ

これでセットアップは完了です。

6.テストでクラッシュさせてみる

実際にアプリをクラッシュさせてレポートが正しく反映されるかテストしてみます。コードに以下のようなクラッシュするコードを追加します。


Button {
    fatalError("Crash was triggered")
} label: {
    Text("Crash!!!")
}

シミュレーターや実機でビルドしたアプリがXcodeデバッガに接続したままだとクラッシュを検知できません。そのため以下の手順でテストします。

  1. シミュレーター or 実機にXcodeからアプリをビルド
  2. 」で一旦アプリを停止
  3. デバイス側からアプリをスワイプして完全に停止
  4. 再度アプリを立ち上げてクラッシュさせる

実際にクラッシュが発生するとFirebase Crashlyticsのコンソールに表示されるようになります。反映されるまでに5分程度かかることもあるようです。

レポートが表示されない場合

Firebase Crashlyticsのコンソールに5分以上待っても表示されない場合はうまく設定が完了していない可能性があります。

4.Run Scriptの追加」か「5.デバッグモードでdSYMファイルが生成されるようにする」の設定がうまくいっていないことが原因のことが多いので確認してみてください。

デバッグロギングを有効にしてみる

公式リファレンス:Crashlytics のデバッグ ロギングを有効にする

5分待っても表示されない場合はデバッグロギングを有効にしてみてください。有効にするにはスキームに-FIRDebugEnabledを追加するだけです。

追加した状態でアプリを起動しクラッシュを発生させてみてログに以下のような文言があれば正常にクラッシュを送信していることの確認になります。

Completed report submission

これが表示されても反映されない場合はとdSYMファイルの送信が正常に動作していないので再度「4.5」あたりを確認してみてください。

クラッシュレポートのカスタマイズ

クラッシュ発生時のレポート内容をカスタマイズすることも可能です。Crashlytics.crashlytics()からsetCustomValueメソッドを呼び出すことでKey-Valueペアでクラッシュ発生時にこの情報を含めて送信することが可能になります。※ Key-Valueは最大64個まで

// 数値の送信
Crashlytics.crashlytics().setCustomValue(100, forKey: "int_key")

// 文字列の送信
Crashlytics.crashlytics().setCustomValue("Hello", forKey: "str_key")

複数のKey-Valueを一括で設定したい場合はNSDictionary型で以下のように指定することが可能です。

let keysAndValues = [
        "string key" : "string value",
        "string key 2" : "string value 2",
        "boolean key" : true,
        "boolean key 2" : false,
        "float key" : 1.01,
        "float key 2" : 2.02
      ] as [String : Any]

Crashlytics.crashlytics().setCustomKeysAndValues(keysAndValues)

カスタムログメッセージを追加

公式リファレンス:Firebase Crashlytics のクラッシュ レポートのカスタマイズ

ログメッセージを付与したい場合はlogメソッドを使用します。

Crashlytics.crashlytics().log("Higgs-Boson detected! Bailing out…, \(data)")

ユーザーIDを設定する

ユーザーを識別するための任意のユーザーIDを付与したい場合はsetUserIDメソッドを使用します。

Crashlytics.crashlytics().setUserID("123456789")

致命的でない例外を報告する

致命的でない例外を報告したい場合はrecordメソッドを使用します。

Crashlytics.crashlytics().record(error: error)

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index