By default,Firebase Crashlyticsautomatically instruments your Flutter
project to upload the necessary symbol files that ensure crash reports are
deobfuscated and human readable.
Unfortunately, there are cases that can result in the project not being fully
configured. This guide outlines what the automation does and provides first
steps to debug your project setup.
Apple platforms
Check your configuration for uploading dSYM files
Adding theCrashlyticsFlutter plugin and running theflutterfire configurecommand will attempt to add a run script to your
project’s Xcode workspace that finds and uploads the necessary dSYM symbol files
toCrashlytics. Without these files, you'll see a "Missing dSYM" alert in
theCrashlyticsdashboard and exceptions will be held by the backend until
the missing files are uploaded.
If you have this issue, first make sure that you have the run script installed:
Locate and open the Xcode workspace file in your project's iOS directory
(FLUTTER_PROJECT_NAME/ios/Runner.xcworkspace).
Identify whether a run script titled[firebase_crashlytics] Crashlytics Upload Symbolshas been added to the
Runner target's Build Phases.
If this run script doesnotexist, you can add it manually:
Locate the Firebase App ID for your Apple app. Here are two different places
where you can find this ID:
In theFirebaseconsole, go to yoursettings>Project settings.
Go to theYour appscard, then click your
Firebase Apple App to view the app's information, including itsApp ID.
In your Flutter project's top-level directory, find yourfirebase_options.dartfile. The Firebase App ID for your Apple app is
labeled asappId.
Clickadd>New Run Script Phase.
Make sure this newRun Scriptphase is your project's last build
phase. Otherwise,Crashlyticscan't properly process dSYMs.
Expand the newRun Scriptsection.
In the script field (located under theShelllabel), add the
following run scripts.
These scripts process your dSYM files and upload the files toCrashlytics.
Understand why the locations of these files are
needed
Xcode looks in the specified locations for these input files to ensure
that the build files are available for the run script. Also, ifUser Script Sandboxingis enabled, Xcode only allows the run
script to access files specified in theInput Files.
Providing the location of your project's dSYM files enablesCrashlyticsto process dSYMs.
Providing the location of your app's builtGoogleService-Info.plistfile enablesCrashlyticsto associate the dSYMs with your
Firebase app.
Providing the location of your app's executable allows the run
script to prevent duplicate uploads of the same dSYM. Note that app
binaries arenot uploaded.
Run script for auto-upload of dSYMs exists
If the run script does exist, refer to theApple-specific guide for troubleshooting dSYM issues.
You'll need to take the following additional steps if you choose to upload your
dSYM files via the described process:
Locate the Firebase App ID for your Apple app. Here are two different places
where you can find this ID:
In theFirebaseconsole, go to yoursettings>Project settings.
Go to theYour appscard, then click your
Firebase Apple App to view the app's information, including itsApp ID.
In your Flutter project's top-level directory, find yourfirebase_options.dartfile. The Firebase App ID for your Apple app is
labeled asappId.
When running theupload-symbolsscript, use-aiFIREBASE_APPLE_APP_IDinstead of-gsp /path/to/GoogleService-Info.plist.
Check your version configuration for Flutter andCrashlytics(if using the--split-debug-infoflag)
If your Flutter project uses the--split-debug-infoflag (and, optionally,
also the--obfuscateflag), additional steps are required to show readable
stack traces for your app.
Make sure that your project is using the recommended version configuration
(Flutter 3.12.0+ andCrashlyticsFlutter plugin 3.3.4+) so that your project
can automatically generate and upload Flutter symbols (dSYM files) toCrashlytics.
Android
Check your dependency configuration
Theflutterfire configurecommand attempts to add necessary dependencies to
your project's Gradle build files. Without these dependencies, crash reports in
theFirebaseconsole may end up obfuscated if obfuscation is turned on.
Make sure the following lines are present in the project-levelbuild.gradleand in the app-levelbuild.gradle:
In theproject-levelbuild file (android/build.gradle), check for the
following line:
dependencies {
// ... other dependencies
classpath 'com.google.gms:google-services:4.3.5'classpath 'com.google.firebase:firebase-crashlytics-gradle:2.7.1'}
In theapp-levelbuild file (android/app/build.gradle), check for the
following line:
// ... other importsandroid{// ... your android config}dependencies{// ... your dependencies}// This section must appear at the bottom of the fileapplyplugin:'com.google.gms.google-services'applyplugin:'com.google.firebase.crashlytics'
Check that you're using the CLI to upload Flutter symbols(if using the--split-debug-infoflag)
If your Flutter project uses the--split-debug-infoflag (and, optionally,
also the--obfuscateflag), additional steps are required to show readable
stack traces for your app.
Use theFirebaseCLI(v.11.9.0+) to upload Flutter debug
symbols. You need to upload the debug symbolsbeforereporting a crash from an
obfuscated code build.
From the root directory of your Flutter project, run the following command:
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-12-17 UTC."],[],[]]