Get deobfuscated crash reports


Firebase Crashlytics automatically processes your debug symbol (.dSYM) files to give you deobfuscated, human-readable crash reports.

Unfortunately, there are a few situations when dSYM uploads fail, usually because of unique project configurations or Bitcode in your app. When an upload fails, Crashlytics displays a "Missing dSYM" alert in the Firebase console to let you know that it can't display crash reports properly.

If you get that alert, there are two things you can try to resolve the issue: check that Xcode is producing the correct dSYM files and, if it is, run the dSYM upload script manually.

Check if Xcode is producing debug symbol files

More often than not, symbol files go missing because Xcode simply isn't producing them. Here's how to check if your project is generating dSYMs with every build:

  1. Open your project in Xcode, and select the project file in the Xcode Navigator.
  2. Select your main build target from the Select a project or target dropdown.
  3. Open the target's Build Settings tab.
  4. Click All near the top of the tab.
  5. Search for "debug information format".
  6. Set Debug Information Format to DWARF with dSYM File.

Once you've done that, build your app again and check the Firebase console to see if Crashlytics can find your dSYMs.

Run the upload symbols script manually

As a back-up, Crashlytics also includes upload-symbols, a script that you can call anywhere in your build process to upload your dSYMs manually. The script provides more information about the upload process and more robust error messaging. To run it, include the following line in your build process:

find dSYM_directory -name "*.dSYM" | xargs -I \{\} $PODS_ROOT/Fabric/upload-symbols -gsp /path/to/GoogleService-Info.plist -p platform \{\}

You can also run the script from your terminal:

/path/to/pods/directory/Fabric/upload-symbols -gsp /path/to/GoogleService-Info.plist -p ios /path/to/dSYMs
Note: If you're having trouble, run upload-symbols without any parameters to get usage notes and additional instructions.

Crashlytics uses ProGuard and DexGuard mapping files to render your app's stack traces as unobfuscated, human-readable code. To generate a suitable mapping file, configure Proguard or Dexguard for Crashlytics:

  1. To preserve the info Crashlytics needs for readable crash reports, add the following lines to your config file:

    -keepattributes *Annotation*                      // Keep Crashlytics annotations
    -keepattributes SourceFile,LineNumberTable        // Keep file names/line numbers
    -keep public class * extends java.lang.Exception  // Keep custom exceptions (opt)
  2. To let Crashlytics automatically upload the ProGuard or DexGuard mapping file, remove this line from the config file:

    -printmapping mapping.txt
For faster builds with ProGuard, exclude Crashlytics. Remove the following lines from your config file:
-keep class com.crashlytics.** { *; }
-dontwarn com.crashlytics.**

Send feedback about...

Need help? Visit our support page.