【Swift】Firebase Crashlyticsの使い方!セットアップとカスタマイズ
この記事からわかること
- Swift/Firebase Crashlyticsでアプリクラッシュを検知する方法
- リリースアプリでクラッシュレポートを取得するには?
- レポートが表示されない場合
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
環境
- Xcode:16.0
- iOS:18.0
- Swift:5.9
- macOS:Sonoma 14.6.1
Googleが運営するモバイルサービスであるFirebaseの「Firebase Crashlytics」を利用します。無料で使えるので登録しておいてください。
Firebase Crashlyticsとは?
Firebase Crashlytics(クラッシュリティクス)はiOSやAndroidなどのモバイルアプリで活用できるクラッシュレポートツールです。テスト配布したものだけでなく、リリースしたアプリがクラッシュした際にリアルタイムでレポートを開発者に提供してくれます。
取得できるクラッシュレポートにはスタックトレース(実際のコード履歴)やデバイス情報、OSバージョン、発生したユーザーの割合などクラッシュの原因や解消に役立つ詳細な情報が含まれています。
管理画面を見てみると発生しているファイル名や関数名、行数、エラー内容などが表示されていることが確認できます。
iOSアプリでの導入とセットアップ
iOSアプリでCrashlyticsを有効にするための手順は色々やることがあるので注意が必要です。AndroidではSDKを導入すればクラッシュが検知できるようになるので少し手間が多い印象です。
手順
- Firebaseプロジェクトのセットアップ
- SDKの導入
- iOSプロジェクト内でFirebaseのセットアップ
- Run Scriptの追加
- デバッグモードでdSYMファイルが生成されるようにする
- テストでクラッシュさせてみる
公式リファレンス: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)
5.デバッグモードでdSYMファイルが生成されるようにする
通常デバッグモードだとdSYMファイルが生成されずCrashlyticsに反映されないので生成されるに変更します。「Build Settings」>「All」タブを選択しdebug information format
を検索します。ビルドごとに設定を変更できるのでDebugも「DWARF with dSYM File」に指定します。
これでセットアップは完了です。
6.テストでクラッシュさせてみる
実際にアプリをクラッシュさせてレポートが正しく反映されるかテストしてみます。コードに以下のようなクラッシュするコードを追加します。
Button {
fatalError("Crash was triggered")
} label: {
Text("Crash!!!")
}
シミュレーターや実機でビルドしたアプリがXcodeデバッガに接続したままだとクラッシュを検知できません。そのため以下の手順でテストします。
- シミュレーター or 実機にXcodeからアプリをビルド
- 「
■
」で一旦アプリを停止 - デバイス側からアプリをスワイプして完全に停止
- 再度アプリを立ち上げてクラッシュさせる
実際にクラッシュが発生するとFirebase Crashlyticsのコンソールに表示されるようになります。反映されるまでに5分程度かかることもあるようです。
レポートが表示されない場合
Firebase Crashlyticsのコンソールに5分以上待っても表示されない場合はうまく設定が完了していない可能性があります。
「4.Run Scriptの追加」か「5.デバッグモードでdSYMファイルが生成されるようにする」の設定がうまくいっていないことが原因のことが多いので確認してみてください。
デバッグロギングを有効にしてみる
公式リファレンス:Crashlytics のデバッグ ロギングを有効にする
5分待っても表示されない場合はデバッグロギングを有効にしてみてください。有効にするにはスキームに-FIRDebugEnabled
を追加するだけです。
- Xcode の「Product」>「Scheme」>「Edit scheme」
- 左側のメニューから「Run」を選択し「Arguments」タブを選択
- 「Arguments Passed on Launch」セクションで -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)
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。