Crashlytics ダッシュボードで読み取り可能なクラッシュ レポートを取得する


デフォルトでは、Firebase Crashlytics は Flutter プロジェクトを自動的に計測可能にして、必要なシンボル ファイルをアップロードします。これにより、クラッシュ レポートの難読化が解除され、人が読めるようになります。

ただし、プロジェクトの構成が完了しない場合もあります。このガイドでは、自動化の内容の概要と、プロジェクト設定をデバッグするための最初のステップについて説明します。

Apple プラットフォーム

dSYM ファイルのアップロードの構成を確認する

Crashlytics Flutter プラグインを追加して flutterfire configure コマンドを実行すると、必要な dSYM シンボル ファイルを見つけて Crashlytics にアップロードする実行スクリプトを、プロジェクトの Xcode ワークスペースに追加しようとします。これらのファイルがないと、Crashlytics ダッシュボードに「dSYM の不足」に関するアラートが表示され、不足しているファイルがアップロードされるまで、バックエンドで例外が保持されます。

この問題が発生した場合は、まず実行スクリプトがインストールされていることを確認します。

  1. プロジェクトの iOS ディレクトリ(FLUTTER_PROJECT_NAME/ios/Runner.xcworkspace)で Xcode ワークスペース ファイルを見つけて開きます。

  2. [firebase_crashlytics] Crashlytics Upload Symbols という実行スクリプトがランナー ターゲットのビルドフェーズに追加されているかどうかを確認します。

    実行スクリプトが存在しないか、実行スクリプトが存在するかに応じて、以下の該当するセクションをご覧ください。

この実行スクリプトが存在しない場合は、手動で追加できます。

  1. Apple アプリの Firebase アプリ ID を見つけます。この ID は、次の 2 つの場所で確認できます。

    • Firebase コンソールで [] > [プロジェクトの設定]に移動します。[マイアプリ] カードまで下にスクロールし、Firebase Apple アプリをクリックして、アプリ ID などのアプリの情報を表示します。

    • Flutter プロジェクトの最上位ディレクトリで、firebase_options.dart ファイルを見つけます。Apple アプリの Firebase アプリ ID には GOOGLE_APP_ID というラベルが付きます。

  2. [] > [New Run Script Phase] をクリックします。

    この新しい Run Script フェーズがプロジェクトの最後のビルドフェーズになるようにします。そうでない場合、Crashlytics は dSYM を適切に処理できません。

  3. 新しい [Run Script] セクションを開きます。

  4. スクリプト フィールド([Shell] ラベルの下)に、次の実行スクリプトを追加します。

    これらのスクリプトは、dSYM ファイルを処理して Crashlytics にアップロードします。

    $PODS_ROOT/FirebaseCrashlytics/upload-symbols --build-phase --validate -ai FIREBASE_APP_ID -- $DWARF_DSYM_FOLDER_PATH/App.framework.dSYM
    $PODS_ROOT/FirebaseCrashlytics/upload-symbols --build-phase -ai FIREBASE_APP_ID -- $DWARF_DSYM_FOLDER_PATH/App.framework.dSYM 
    • FIREBASE_APP_ID: Firebase Apple アプリ ID(Apple バンドル ID ではない)
      Firebase Apple アプリ ID の例: 1:1234567890:ios:321abc456def7890

    次の 2 つの方法で Firebase アプリ ID を確認することができます。

    • GoogleService-Info.plist ファイル内の GOOGLE_APP_ID の値がアプリ ID です。

    • Firebase コンソールで、[プロジェクトの設定] に移動します。下にスクロールして [マイアプリ] カードを表示し、目的の Firebase アプリをクリックしてアプリ ID を確認します。

  5. [Input Files] セクションに、以下のファイルの場所のパスを追加します。

    ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}
    ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${PRODUCT_NAME}
    ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist
    $(TARGET_BUILD_DIR)/$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/GoogleService-Info.plist
    $(TARGET_BUILD_DIR)/$(EXECUTABLE_PATH)

    Xcode は、実行スクリプトでビルドファイルを使用できるように、これらの入力ファイルの指定場所を探します。また、ユーザー スクリプト サンドボックスが有効になっている場合、Xcode は実行スクリプトが Input Files で指定されたファイルにのみアクセスできるようにします。

    • プロジェクトの dSYM ファイルの場所を指定すると、Crashlytics は dSYM を処理できます。
    • アプリのビルド済み GoogleService-Info.plist ファイルの場所を指定すると、Crashlytics は dSYM を Firebase アプリに関連付けることができます。
    • アプリの実行可能ファイルの場所を指定することで、実行スクリプトで同じ dSYM の重複アップロードを防ぐことができます。アプリのバイナリはアップロードされません

実行スクリプトが存在する場合は、dSYM 問題のトラブルシューティングに関する Apple 固有のガイドをご覧ください。説明されたプロセスで dSYM ファイルをアップロードする場合は、以下の追加の手順が必要です。

  1. Apple アプリの Firebase アプリ ID を見つけます。この ID は、次の 2 つの場所で確認できます。

    • Firebase コンソールで [] > [プロジェクトの設定]に移動します。[マイアプリ] カードまで下にスクロールし、Firebase Apple アプリをクリックして、アプリ ID などのアプリの情報を表示します。

    • Flutter プロジェクトの最上位ディレクトリで、firebase_options.dart ファイルを見つけます。Apple アプリの Firebase アプリ ID には GOOGLE_APP_ID というラベルが付きます。

  2. upload-symbols スクリプトを実行する場合は、-gsp /path/to/GoogleService-Info.plist ではなく -ai FIREBASE_APPLE_APP_ID を使用します。

Flutter と Crashlytics のバージョン構成を確認する(--split-debug-infoフラグを使用している場合)

Flutter プロジェクトで --split-debug-info フラグ(および必要に応じて --obfuscate フラグ)を使用する場合は、アプリで読み取り可能なスタック トレースを表示するために追加の手順が必要になります。

プロジェクトで推奨されるバージョン構成(Flutter 3.12.0 以降、Crashlytics Flutter プラグイン 3.3.4 以降)を使用していることを確認して、プロジェクトで Flutter シンボル(dSYM ファイル)を自動的に生成して Crashlytics にアップロードできるようにします。

Android

依存関係構成を確認する

flutterfire configure コマンドは、プロジェクトの Gradle ビルドファイルに対して必要な依存関係の追加を試みます。これらの依存関係がないと、難読化が有効になっている場合、Firebase コンソールのクラッシュ レポートが難読化される可能性があります。

プロジェクト レベルの build.gradle とアプリレベルの build.gradle に次の行があることを確認します。

  • プロジェクト レベルのビルドファイル(android/build.gradle)で、次の行を確認します。

    dependencies {
    // ... other dependencies
    
    classpath 'com.google.gms:google-services:4.3.5'
    classpath 'com.google.firebase:firebase-crashlytics-gradle:2.7.1'
    }
  • アプリレベルのビルドファイル(android/app/build.gradle)で、次の行を確認します。

    // ... other imports
    
    android {
    // ... your android config
    }
    
    dependencies {
    // ... your dependencies
    }
    
    // This section must appear at the bottom of the file
    apply plugin: 'com.google.gms.google-services'
    apply plugin: 'com.google.firebase.crashlytics'

CLI を使用して Flutter シンボルをアップロードすることを確認する(--split-debug-info フラグを使用している場合)

Flutter プロジェクトで --split-debug-info フラグ(および必要に応じて --obfuscate フラグ)を使用する場合は、アプリで読み取り可能なスタック トレースを表示するために追加の手順が必要になります。

Firebase CLI(v.11.9.0 以降)を使用して、Flutter デバッグ シンボルをアップロードします。難読化されたコードビルドのクラッシュを報告する前に、デバッグ シンボルをアップロードする必要があります。

Flutter プロジェクトのルート ディレクトリから、次のコマンドを実行します。

firebase crashlytics:symbols:upload --app=FIREBASE_APP_ID PATH/TO/symbols
  • FIREBASE_APP_ID: Firebase Android アプリ ID(パッケージ名ではありません)
    Firebase Android アプリ ID の例: 1:567383003300:android:17104a2ced0c9b9b

    次の 2 つの方法で Firebase アプリ ID を確認することができます。

    • google-services.json ファイル内の mobilesdk_app_id の値がアプリ ID です。

    • Firebase コンソールで、[プロジェクトの設定] に移動します。下にスクロールして [マイアプリ] カードを表示し、目的の Firebase アプリをクリックしてアプリ ID を確認します。

  • PATH/TO/symbols: アプリケーションのビルド時に --split-debug-info フラグに渡すのと同じディレクトリ

問題が解決しない場合は、難読化されたレポートのトラブルシューティングに関する Android 固有のガイドをご覧ください。