はじめに
業務としてアプリ開発する時にinhouse版を作ったり、stage版、develop版を作ったりすることがあるかと思います。
その際にFirebaseプロジェクトを本番とstage版などで分けた場合に自分がやった方法を解説します。
firebase_options.dartの生成
まず、環境わけはできているという前提でFlutterFireを用いてFlutterアプリケーションをFirebaseに登録していきます。
flutterfire configure -p [FirebaseのプロジェクトID] -i [iOSのbundleId] -a [AndroidのapplicationId] -o lib/firebase/stg/firebase_options.dart
まず -p
についてですが、なくても問題はありませんがたくさんFirebaseプロジェクトがあると探しづらいので指定しています。
そして -i, -a
です。こちらを指定しない場合、各環境のIDのものがランダムでFirebaseに登録されてしまうので指定してください。
最後に -o
です。こちらは生成される firebase_options.dart
がどこに生成されるか指定できます。指定しない場合lib直下に作成され、複数環境があるので競合してしまい書き換えなどなってしまうので指定しておいた方がいいです。 firebase_options.dart
という名前自体も変更できます。
各OSごとの設定
iOS
iOSでは GoogleServices-Info.plist
, firebase_app_id_file.json
が生成されます。どちらもファイル名指定がなかったので一つ生成ごとに名前を変えるかディレクトリを分けた方がいいです。
完了しましたら、 Build Phases
にCrashlyticsに関するRunScriptがあるかと思います。以下に使用しているScriptを貼っておくので参考にしてみてください。
if [ "${CONFIGURATION}" == "Production" ] || [ "${CONFIGURATION}" == "Debug-Production" ] || [ "${CONFIGURATION}" == "Release-Production" ]; then echo "Upload symbols for PRODUCTION." cp "${PROJECT_DIR}/${PROJECT_NAME}/Resources/Firebase/Development/GoogleService-Info.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist" "$PODS_ROOT/FirebaseCrashlytics/upload-symbols" --flutter-project "$PROJECT_DIR/firebase_app_id_file.production.json" elif [ "${CONFIGURATION}" == "Development" ] || [ "${CONFIGURATION}" == "Debug-Development" ] || [ "${CONFIGURATION}" == "Release-Development" ]; then echo "Upload symbols for DEVELOPMENT." cp "${PROJECT_DIR}/${PROJECT_NAME}/Resources/Firebase/Development/GoogleService-Info.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist" "$PODS_ROOT/FirebaseCrashlytics/upload-symbols" --flutter-project "$PROJECT_DIR/firebase_app_id_file.development.json" elif [ "${CONFIGURATION}" == "Staging" ] || [ "${CONFIGURATION}" == "Debug-Staging" ] || [ "${CONFIGURATION}" == "Release-Staging" ]; then echo "Upload symbols for STAGING." cp "${PROJECT_DIR}/${PROJECT_NAME}/Resources/Firebase/Staging/GoogleService-Info.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist" "$PODS_ROOT/FirebaseCrashlytics/upload-symbols" --flutter-project "$PROJECT_DIR/firebase_app_id_file.staging.json" else echo "unknown scheme! (scheme: ${CONFIGURATION})" return -1 fi
こちらでiOSの設定は以上です。
Android
iOSと同様に google-services.json
が生成されるたびに android/app/{各環境のディレクトリ}
に自分は入れました。
そして android/app/build.gradle
に
dependencies { // これ classpath 'com.google.firebase:firebase-crashlytics-gradle:2.7.1' }
android/build.gradle
に
apply plugin: 'com.google.firebase.crashlytics'
以上を追加してください
こちらでAndroidの設定は以上です。
実装
ディレクトリを分けた人は、main関数の方に書くFirebase.initializeAppに生成した firebase_options.dart
を入れるために以下のようにインポートします。
import 'firebase/dev/firebase_options.dart' as dev; import 'firebase/stg/firebase_options.dart' as stg; import 'firebase/prod/firebase_options.dart' as prod;
あとは環境ごとにFirebaseOptionsを取得する関数を作成し、以下のように記述します
await Firebase.initializeApp(options: getFirebaseOptions(), name: AppName.getName()); await FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(kReleaseMode); FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterFatalError;
気をつけなければいけない点が一点あり、 Firebase.initializeApp()
のnameを指定しない場合、どれだか判別できなくなりエラーとなってしまうので任意の値を入れてあげましょう。
以上でCrashlyticsの設定が完了したかと思います。
最後に
エキサイトではフロントエンジニア、バックエンドエンジニア、アプリエンジニアを随時募集しております。募集にはありませんが、長期インターンも歓迎していますので、興味があれば連絡いただければと思います。
カジュアル面談はこちらになります! meety.net
募集職種一覧はこちらになります!(カジュアルからもOK) www.wantedly.com