事象
クラッシュを起こしてもクラッシュログが作成されず、FirebaseコンソールのCrashlyticsトップ画面から切り替わらない。
クラッシュトリガーはドキュメントのものを利用
Button("Crash") {
fatalError("Crash was triggered")
}
結論
SPMでFirebaseを追加した時、Targetを選択していなかったため、Crashlyticsがプロジェクトに組み込めていなかった。
TargetのGeneralのFrameworksにFirebaseCrashlyticsを追加することでクラッシュレポートが上がるようになった。
導入したときの手順
Firebase Crashlytics を使ってみる
https://firebase.google.com/docs/crashlytics/get-started?authuser=0&_gl=1*1jxmrmj*_ga*NTAxODA3ODUuMTY5Mzc4ODk1OA..*_ga_CW55HF8NVT*MTY5NjU1NTI5NC4xNy4xLjE2OTY1NjAwOTguNDkuMC4w&hl=ja&platform=ios
- SPMで
https://github.com/firebase/firebase-ios-sdk
を追加 - インポート
import Firebase
- FirebaseAppインスタンスを構成
FirebaseApp.configure()
- dSYM ファイルを自動的にアップロードするように Xcode を設定
- 強制的にテスト クラッシュ(シミュレータをXcodeデバッガから切断してからクラッシュ→そのまま再実行・Xcodeから再実行)
- デバッグロギングを有効化
- 5.を再度実行
原因
Xcodeのコンソールログを確認してもCompleted report submission
のログが無かったため、そもそもCrashlyticsの導入に失敗していそうであったので、プロジェクトのFrameworksを確認するとCrashlyticsが無かったので追加したところ、ログが出るようになった。
おまけ
カスタムキーがFirebaseコンソール画面のクラッシュイベントに反映されない
「FirebaseCrashlyticsのクラッシュレポートのカスタマイズ」に沿ってカスタムキーを設定したが、FirebaseCrashlyticsのコンソール画面に反映されなかった。
// Set int_key to 100.
Crashlytics.crashlytics().setCustomValue(100, forKey: "int_key")
// Set str_key to "hello".
Crashlytics.crashlytics().setCustomValue("hello", forKey: "str_key")
原因
FirebaseApp.configure()
より前にsetCustomValue
していたことが原因だった。