デフォルトでは、Firebase Crashlytics は Flutter プロジェクトを自動的に計測可能にして、必要なシンボル ファイルをアップロードします。これにより、クラッシュ レポートの難読化が解除され、人が読めるようになります。
ただし、プロジェクトの構成が完了しない場合もあります。このガイドでは、自動化の内容の概要と、プロジェクト設定をデバッグするための最初のステップについて説明します。
Apple プラットフォーム
dSYM ファイルのアップロードの構成を確認する
Crashlytics Flutter プラグインを追加して flutterfire configure
コマンドを実行すると、必要な dSYM シンボル ファイルを見つけて Crashlytics にアップロードする実行スクリプトを、プロジェクトの Xcode ワークスペースに追加しようとします。これらのファイルがないと、Crashlytics ダッシュボードに「dSYM の不足」に関するアラートが表示され、不足しているファイルがアップロードされるまで、バックエンドで例外が保持されます。
この問題が発生した場合は、まず実行スクリプトがインストールされていることを確認します。
プロジェクトの iOS ディレクトリ(
FLUTTER_PROJECT_NAME/ios/Runner.xcworkspace
)で Xcode ワークスペース ファイルを見つけて開きます。[firebase_crashlytics] Crashlytics Upload Symbols
という実行スクリプトがランナー ターゲットのビルドフェーズに追加されているかどうかを確認します。実行スクリプトが存在しないか、実行スクリプトが存在するかに応じて、以下の該当するセクションをご覧ください。
dSYM の自動アップロード用の実行スクリプトが存在しない
この実行スクリプトが存在しない場合は、手動で追加できます。
Apple アプリの Firebase アプリ ID を見つけます。この ID は、次の 2 つの場所で確認できます。
Firebase コンソールで
[ 。[マイアプリ] カードまで下にスクロールし、Firebase Apple アプリをクリックして、アプリ ID などのアプリの情報を表示します。 ] > [プロジェクトの設定]に移動しますFlutter プロジェクトの最上位ディレクトリで、
firebase_options.dart
ファイルを見つけます。Apple アプリの Firebase アプリ ID にはGOOGLE_APP_ID
というラベルが付きます。
[
] > [New Run Script Phase] をクリックします。この新しい Run Script フェーズがプロジェクトの最後のビルドフェーズになるようにします。そうでない場合、Crashlytics は dSYM を適切に処理できません。
新しい [Run Script] セクションを開きます。
スクリプト フィールド([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
Firebase アプリ ID を確認する方法
次の 2 つの方法で Firebase アプリ ID を確認することができます。
GoogleService-Info.plist
ファイル内のGOOGLE_APP_ID
の値がアプリ ID です。Firebase コンソールで、[プロジェクトの設定] に移動します。下にスクロールして [マイアプリ] カードを表示し、目的の Firebase アプリをクリックしてアプリ ID を確認します。
- FIREBASE_APP_ID: Firebase Apple アプリ ID(Apple バンドル ID ではない)
[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 の自動アップロード用の実行スクリプトが存在する
実行スクリプトが存在する場合は、dSYM 問題のトラブルシューティングに関する Apple 固有のガイドをご覧ください。説明されたプロセスで dSYM ファイルをアップロードする場合は、以下の追加の手順が必要です。
Apple アプリの Firebase アプリ ID を見つけます。この ID は、次の 2 つの場所で確認できます。
Firebase コンソールで
[ 。[マイアプリ] カードまで下にスクロールし、Firebase Apple アプリをクリックして、アプリ ID などのアプリの情報を表示します。 ] > [プロジェクトの設定]に移動しますFlutter プロジェクトの最上位ディレクトリで、
firebase_options.dart
ファイルを見つけます。Apple アプリの Firebase アプリ ID にはGOOGLE_APP_ID
というラベルが付きます。
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
Firebase アプリ ID を確認する方法
次の 2 つの方法で Firebase アプリ ID を確認することができます。
google-services.json
ファイル内のmobilesdk_app_id
の値がアプリ ID です。Firebase コンソールで、[プロジェクトの設定] に移動します。下にスクロールして [マイアプリ] カードを表示し、目的の Firebase アプリをクリックしてアプリ ID を確認します。
PATH/TO/symbols
: アプリケーションのビルド時に--split-debug-info
フラグに渡すのと同じディレクトリ
問題が解決しない場合は、難読化されたレポートのトラブルシューティングに関する Android 固有のガイドをご覧ください。