Open9

FlutterFireのDart-only initializationとCrashlyticsのiOS symbol-upload

kafumikafumi

PRの説明に、GoogleServices.plist をiOSプロジェクトから削除すると upload-symbols の実行が失敗するようになってしまう問題が触れられている。

kafumikafumi

途中のコメントでも、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に書かれていないのでよくわからない。

kafumikafumi

このPRでFlutterFireのドキュメントが更新されており、Crashlyticsの upload-symbols を実行するBuild Phaseを設定する記述が削除されている。

https://github.com/firebase/flutterfire/pull/8448

Androidプロジェクトの設定に関する記述は残されていて、iOSプロジェクトの分だけ削除されているので、ドキュメントの更新間違いではなく、iOSのほうはたしかに不要になったと考えてよさそう。

kafumikafumi

upload-symbols には、このPRでFlutterFireのCrashlyticsの初期化に関する修正が入っている。

https://github.com/firebase/firebase-ios-sdk/pull/9379

修正の内容は 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

kafumikafumi

FlutterFire の firebase_crashlytics パッケージにこのPRで修正が入っており、

https://github.com/firebase/flutterfire/pull/8157

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

kafumikafumi

Run Script Build Phase の追加は、CocoaPods の依存関係に firebase_crashlytics が追加されたとき or バージョンが更新されたときに実行される。そのため、既存アプリでBuild Phaseを追加させるのは、以下の手順を経る必要がありそう。

  1. pubspec.yaml から firebase_crashlytics をいったん削除
  2. pub getpod install を実行
  3. pubspec.yamlfirebase_crashlytics を再び追加
  4. pub getpod install を実行

or

  1. pubspec.yamlfirebase_crashlytics のバージョンを更新
  2. pub getpod install を実行
kafumikafumi

👆のBuild Phaseの追加は ios/firebase_app_id_file.json が存在していないと実行されないので、flutterfire configure を先に実行しておく必要がある。