(iOS) Expo Bare workflow に Firebase Crashlytics を導入する
Firebase Crashlytics を使うとアプリがクラッシュした際にエラーレポートを送信することができる。Expo Bare workflow のプロジェクトに Firebase Crashlytics を導入する手順について書く。
- 環境
- パッケージインストール
- firebase.json を作成する
- テストクラッシュを起こす実装をする
- アプリをビルドしシミュレータで起動する
- Firebase コンソールでレポートを確認する
- まとめ
環境
パッケージインストール
公式ドキュメントの手順通りにパッケージをインストールする。Firebase のサービス自体を初めて利用する場合は、@react-native-firebase/app
のインストールが必要。
// 未インストールの場合 yarn add @react-native-firebase/app yarn add @react-native-firebase/crashlytics cd ios/ && pod install
最終的に EAS build するとしても Podfile.lock
の更新のため pod install
は必要だと思う(多分)
firebase.json を作成する
プロジェクトディレクトリの直下に、firebase.json
を作成する。今回は疎通確認のため以下の設定値を有効にする。
ネイティブコードではなく、React Native で実行した JavaScript のエラーもレポート送信の対象にしている。
{ "react-native": { "crashlytics_debug_enabled": true, "crashlytics_auto_collection_enabled": true, "crashlytics_is_error_generation_on_js_crash_enabled": true, "crashlytics_javascript_exception_handler_chaining_enabled": true } }
設定値のリファレンスは Firebase JSON Config を参照。
テストクラッシュを起こす実装をする
crashlytics().crash()
を実行するとネイティブ領域でエラーを発生させアプリをクラッシュさせることができる。
<Button title="Test Crash" onPress={() => crashlytics().crash()} />
以下のような JS Error でも良い。
<Button title="Test Crash" onPress={() => throw new Error("test")} />
アプリをビルドしシミュレータで起動する
アプリをビルドし iOS シミュレータにインストールする。
デバッグ用に iOS シミュレータのログを確認できるようにしておく。
$ xcrun simctl spawn booted log stream --level debug --style compact | grep -i crash
crash で grep し、Crashlytics 関連のログのみが表示されるようにする。
以下のようにfirebase.json の設定値がログに出力されていればOK
2022-02-03 17:08:16.938 Df appName[63895:42a438] +[RNFBSharedUtils getConfigBooleanValue:key:defaultValue:] [Line 160] RNFBCrashlyticsInit crashlytics_auto_collection_enabled final value: 1
テストクラッシュ用に実装したボタンを押下するとアプリがクラッシュする。
再度アプリを起動すると以下のようなログが出力される。
2022-02-03 17:14:22.300 Df appName[64062:42b7c7] +[RNFBCrashlyticsInitProvider configureWithApp:] [Line 101] RNFBCrashlyticsInit initialization successful 2022-02-03 17:14:23.192 Df appName[64062:42b7d5] [com.apple.network:connection] [C6 4F05B069-6BF2-442B-9434-CF5F0223CBF1 crashlyticsreports-pa.googleapis.com:443 tcp, url hash: 668ea868, tls, definite, attribution: developer, context: com.apple.CFNetwork.NSURLSession.{4F3F6DE6-21E5-4E1C-8B27-6043E5450330}{(null)}{Y}{2} (private), proc: EA95ADB9-AD35-39EC-BB62-880027AC07B2] start 2022-02-03 17:14:23.192 I appName[64062:42b7d5] [com.apple.network:connection] nw_endpoint_handler_start [C6 crashlyticsreports-pa.googleapis.com:443 initial path ((null))]
Crashlytics の初期化成功後に、ネットワーク通信が始まりレポート送信が行われる。アプリがクラッシュしたタイミングではなく、クラッシュ後にアプリを起動しないとレポートは送信されないことに注意。
Firebase コンソールでレポートを確認する
送信したレポートを閲覧できていれば Firebase Crashlytics の導入に成功している。
crashlytics().setUserId(id)
によってユーザの識別子を付与してレポートを送信することも可能。
まとめ
Expo Bare workflow を利用した iOS アプリに Firebase Crashlytics を導入する手順を書いた。
Bare workflow の Android の場合はパッケージインストール以外にも追加で build.gradle を編集する必要があるが、iOS の場合は比較的ラクに導入できると思う。
手元では Android でも既に導入に成功しているので別の記事で手順やハマりポイントを書きたい。