FlutterFireのDart-only initializationとCrashlyticsのiOS symbol-upload
FlutterFire の Dart-only initialization で、Crashlytics の iOS debug symbol upload がどうなっているのかよくわからなかったので確認する
FlutterFire で Dart-only initialization が実装されたPRはこれ。
PRの説明に、GoogleServices.plist
をiOSプロジェクトから削除すると upload-symbols
の実行が失敗するようになってしまう問題が触れられている。
途中のコメントでも、Firebase Crashlytics の問題でPRがブロックされてる、と書かれている。
@eleojasmil Yes it is, we're currently blocked on a Firebase side issue on Crashlytics.
https://github.com/firebase/flutterfire/pull/6549#issuecomment-960582431
そのため、この問題が解決されてからPRはマージされているはず。が、どう解決したか、このPRに書かれていないのでよくわからない。
このPRでFlutterFireのドキュメントが更新されており、Crashlyticsの upload-symbols
を実行するBuild Phaseを設定する記述が削除されている。
Androidプロジェクトの設定に関する記述は残されていて、iOSプロジェクトの分だけ削除されているので、ドキュメントの更新間違いではなく、iOSのほうはたしかに不要になったと考えてよさそう。
upload-symbols
には、このPRでFlutterFireのCrashlyticsの初期化に関する修正が入っている。
修正の内容は upload-symbols
のバイナリ更新なので、具体的にどういう修正がされたのかはわからない。
この修正は、iOS Crashlyticsの v8.13.0 から有効になっている。
[added] Updated upload-symbols to 3.11 and added logic to process Flutter project information (#9379)
https://github.com/firebase/firebase-ios-sdk/blob/v8.13.0/Crashlytics/CHANGELOG.md#v8130
FlutterFire の firebase_crashlytics パッケージにこのPRで修正が入っており、
iOSアプリのBuild Phaseに以下のコマンドを実行するRun Script Build Phaseが自動的に追加されるようになっている。
"$PODS_ROOT/FirebaseCrashlytics/upload-symbols" --flutter-project "$PROJECT_DIR/firebase_app_id_file.json"
おそらく、upload-symbols
への --flutter-project
オプションの追加が、上コメントで触れた iOS Crashlytics v8.13.0 での変更点なのではないかと思われる。
この修正は firebase_crashlytics パッケージの v2.6.0 から有効になっている。
FEAT: add automatic Crashlytics symbol uploads for iOS & macOS apps (#8157). (c4a3eaa7)
https://github.com/firebase/flutterfire/blob/master/packages/firebase_crashlytics/firebase_crashlytics/CHANGELOG.md#260
Run Script Build Phase の追加は、CocoaPods の依存関係に firebase_crashlytics
が追加されたとき or バージョンが更新されたときに実行される。そのため、既存アプリでBuild Phaseを追加させるのは、以下の手順を経る必要がありそう。
-
pubspec.yaml
からfirebase_crashlytics
をいったん削除 -
pub get
とpod install
を実行 -
pubspec.yaml
にfirebase_crashlytics
を再び追加 -
pub get
とpod install
を実行
or
-
pubspec.yaml
のfirebase_crashlytics
のバージョンを更新 -
pub get
とpod install
を実行
👆のBuild Phaseの追加は ios/firebase_app_id_file.json
が存在していないと実行されないので、flutterfire configure
を先に実行しておく必要がある。