LoginSignup
2
0

More than 3 years have passed since last update.

FlutterアプリにCrashlyticsを導入する

Posted at

FlutterアプリにCrashlyticsを導入する。

前提

  • FlutterアプリのFirebaseプロジェクトを作成済み
  • Firebaseプロジェクト設定から、AndroidアプリとiOSアプリを登録して、GoogleService-Info.plistを取得済み

ビルド設定

基本

FlavorでFirebaseのプロジェクトを分ける場合

"develop"と"production"の2つのFlavorでFirebaseのプロジェクトを分けているとする。
flavor導入の設定は済んでいる前提。

iOSの設定手順

全てXCode上の操作。

  1. ios/Runner.xcodeworkspaceをXCodeで開く
  2. GoogleService-Info.plistの設定(Runnerフォルダ配下)
    • develop向けにGoogleService-Info-develop.plistを追加
    • production向けにGoogleService-Info-dev.plistを追加
    • GoogleService-Info-dev.plistを追加
      • Target MembershipにRunnerを含めること
      • 中身は適当でも大丈夫のはず
  3. XCodeのトップ階層にあるRunnerを開く(フォルダでなく、.xcodeprojの方)
  4. Build Phasesを開く
  5. 画面上の方の+ボタンからNew Run Script Phaseを選択
  6. Build Phansesの最後に「Run Script」が追加されるので、上の方にある「Check Pods Manifest.lock」の直後に移動する
    • 名前も分かりやすい名前に変えておくと良い
    • 「Replace GoogleService-Info.plist」など
  7. flavor別のGoogleService-Info.plistを所定の場所と名前でコピーする
    • 追加したRun Script Phaseに、以下のスクリプトを書く。
# $CONFIGURATIONは、Build Configurationの名前が入る。
# Build Configurationにflavor名を含めていることが前提の判別方法。

if [[ $CONFIGURATION == *"develop"* ]]; then
    cp $SRCROOT/Runner/GoogleService-Info-develop.plist $SRCROOT/Runner/GoogleService-Info.plist
else
    cp $SRCROOT/Runner/GoogleService-Info-production.plist $SRCROOT/Runner/GoogleService-Info.plist
fi

8. 追加したRun Script PhaseのOutput Filesに、「$SRCROOT/Runner/GoogleService-Info.plist」を追加する

9. \${PODS_ROOT}/FirebaseCrashlytics/runを実行しているPhaseのInput Filesに「\$SRCROOT/Runner/GoogleService-Info.plist」を追加する(基本の手順に従って、\$(BUILT_PRODUCTS_DIR)/\$(INFOPLIST_PATH)を追加している場合は、そちらは削除してOK)

Android

  • android/app/developに、develop向けGoogleService-Info.plistを置く
  • android/app/productionに、production向けGoogleService-Info.plistを置く

(ファイル名にflavor名は含める必要なし)

Dart

Crashlyticsを使うための準備処理をmain()あたりに書く。

main.dart
void main() async {
  WidgetsFlutterBinding.ensureInitialized();   # これをしておかないと、Firebase.initializeApp()がエラーになる
  await Firebase.initializeApp();

  // DartのエラーをCrashlyticsに報告する
  FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterError;

  // Dart以外のエラーログをCrashlyticsに報告する
  Isolate.current.addErrorListener(RawReceivePort((pair) async {
    final List<dynamic> errorAndStacktrace = pair;
    await FirebaseCrashlytics.instance.recordError(
      errorAndStacktrace.first,
      errorAndStacktrace.last,
    );
  }).sendPort);

  runApp(App());
}

後は、クラッシュさせて見て試す。以下の処理でクラッシュさせられる。

FirebaseCrashlytics.instance.crash();
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0