前提とする環境
- react native 0.73.6
- expo 50
- firebaseを使用するためのセットアップが終わっていること
使用パッケージ
- @react-native-firebase/app 20.4.0
- @react-native-firebase/crashlytics 20.4.0
発生した問題
開発中のアプリでFirebase Crashlyticsにログが送られているかを確かめるため、ios simulatorでデバッグをしていたがいくらログを送信しようとしてもされなかった。
また、crashlytics().crash()
を実行してもアプリがクラッシュしなかった。
Crashlyticsが有効化されているならクラッシュするはず。
よくみると以下のログがXCodeで出力されていた。
+[RNFBSharedUtils getConfigBooleanValue:key:defaultValue:] [Line 165]
RNFBCrashlyticsInit crashlytics_debug_enabled final value: 0
+[RNFBCrashlyticsInitProvider isCrashlyticsCollectionEnabled] [Line 67]
RNFBCrashlyticsInit isCrashlyticsCollectionEnabled after checking crashlytics_debug_enabled: 0
どちらも0となっていて、crashlyticsが有効化されていないことがわかる。
これをなんとか1(有効)に変えたいので、ググってでてきたそれっぽいのを片端から色々試してみた。
解決法
アプリのルートディレクトリに以下のファイルを作成、中身を記載
firebase.json
{
"react-native": {
"crashlytics_debug_enabled": true
}
}
この状態でnpx expo prebuild
後、npx expo run:ios
実行。
XCodeでビルドして、以下のコードを実行させると、Test error
の非重大ログ、クラッシュログが送信された。(アプリもしっかりとクラッシュした)
crashlytics().recordError(new Error('Test error'));
crashlytics().crash();
また、一部情報でXCodeを終了した状態でないとCrashlyticsにログが送信されないとあったが、今回においてはXCodeを終了せずともしっかり送信されていました。
今回試してみて意味がなかったこと
今回解決しなかっただけで、状況によっては解決につながる可能性があるため書いておきます。
-
GoogleService-Info.plist
に以下の記載<key>FirebaseCrashlyticsCollectionEnabled</key> <true></true>
-
XCode shemaに以下のフラグ記載
-FIRDebugEnabled
analyticsの場合だと、-FIRAnalyticsDebugEnabled
を記載しないとダメだったがCrashlyticsの場合そうではないよう。
-
Expoの
app.config.js
に以下の記載{ "expo": { "plugins": [ [ "@react-native-firebase/app", { "crashlytics_auto_collection_enabled": true ← これ } ], ] } }
-
crashlytics().setCrashlyticsCollectionEnabled(true)
の実行 -
Podfileへの追記
pod 'Firebase/Crashlytics' pod 'Firebase/Analytics'
package.jsonに記載あれば多分いらない(Expoが処理してくれるため)
参考リンク
↑解決に導いてくれた神issues