# Firebase Crashlytics: “Upload missing dSYMs to see crashes” (iOS and Flutter)

> Crashlytics asks you to upload missing dSYMs and iOS crashes don’t show. Check the upload run script, the DWARF with dSYM setting, and upload from the archive.

Canonical: https://app369.com/fix/firebase-crashlytics-missing-dsym/
Last updated: 2026-11-08

The Crashlytics dashboard shows a Missing dSYM alert and iOS crashes for that version don’t appear. Crashlytics needs the debug symbol (dSYM) files for each build to turn crash addresses into code, and it holds those crashes until the files arrive. Usually the upload script didn’t run, or Xcode didn’t produce a dSYM.

**Short answer**

Open ios/Runner.xcworkspace, check the Runner target has the [firebase_crashlytics] Crashlytics Upload Symbols run script as its last build phase, and set Debug Information Format to DWARF with dSYM File for every build configuration. For a version already out, upload its dSYMs from the archive with the upload-symbols script or the dSYMs tab in the Crashlytics dashboard.

## **Why Crashlytics has no dSYM, and the fix**

1. 01 ### **The upload run script is missing or not last**
  > “Make sure this new Run Script phase is your project's last build phase.” [**Firebase, Get readable crash reports (Flutter)**](https://firebase.google.com/docs/crashlytics/flutter/get-deobfuscated-reports) flutterfire configure tries to add the script, but it can be skipped or end up above other phases. In the Runner target’s Build Phases, check the script is there and drag it to the bottom.
2. 02 ### **Xcode isn’t producing a dSYM**
  > “Set Debug Information Format to DWARF with dSYM File for all your build types.” [**Firebase, Get readable crash reports (Apple platforms)**](https://firebase.google.com/docs/crashlytics/ios/get-deobfuscated-reports) If Release builds use DWARF without the dSYM file, there is nothing to upload. In the Runner target’s Build Settings, search for debug information format and set it for every configuration, then rebuild.
3. 03 ### **The script runs but can’t read the files (Xcode 15 and later)**
  > “Specifically, Xcode 15 and later requires that you provide a more complete set of file locations.” [**Firebase, Get readable crash reports (Apple platforms)**](https://firebase.google.com/docs/crashlytics/ios/get-deobfuscated-reports) With user script sandboxing, the script only sees files listed in its Input Files. An error such as Unable to process Info.plist means the list is short. Add the dSYM, Info.plist, GoogleService-Info.plist and executable paths from Firebase’s guide.
4. 04 ### **A version is already in users’ hands**
  > “Within .xcarchive is a dSYMs directory that contains dSYMs generated as part of Xcode's archiving process.” [**Firebase, Get readable crash reports (Apple platforms)**](https://firebase.google.com/docs/crashlytics/ios/get-deobfuscated-reports) Upload that build’s dSYMs by hand. flutter build ipa leaves them in build/ios/archive/Runner.xcarchive/dSYMs; for an Xcode archive, show the package contents in Organizer. Zip them and drop the zip on the dSYMs tab of the Crashlytics dashboard, which works however Crashlytics was installed. The upload-symbols command below is the CocoaPods path; with Swift Package Manager there is no ios/Pods folder, so use the zip upload.```
ios/Pods/FirebaseCrashlytics/upload-symbols \
  -gsp ios/Runner/GoogleService-Info.plist -p ios \
  build/ios/archive/Runner.xcarchive/dSYMs
```

Checked against the vendor’s docs on November 8, 2026: [Firebase: Get readable crash reports (Flutter)](https://firebase.google.com/docs/crashlytics/flutter/get-deobfuscated-reports); [Firebase: Get readable crash reports (Apple platforms)](https://firebase.google.com/docs/crashlytics/ios/get-deobfuscated-reports).

## **Rather hand it over?**

Fixed scope, fixed price, paid upfront. The work happens in writing; no call needed.

- [from $450**App Fix Ticket**One reproducible bug in an existing mobile or web app, diagnosed and fixed.**See scope and start**](https://app369.com/fixed-price/flutter-firebase-bug-fix/)
- [from $450**AI-Built App Rescue**A Lovable, Bolt or Cursor app checked end to end in 3 days, then its worst problems fixed at a fixed price.****No issues worth fixing, no charge.**** If the Launch Check finds nothing rated medium or higher, Simon refunds the full $450. You keep the report either way. This applies to the first 10 Launch Checks bought after October 30, 2026.**See scope and start**](https://app369.com/fixed-price/ai-app-rescue/)

Related: [**Google Play “native code, no debug symbols”**](https://app369.com/fix/google-play-native-code-debug-symbols/) · [**Xcode PhaseScriptExecution failed**](https://app369.com/fix/xcode-phasescriptexecution-failed/) · [**Flutter pod install failed**](https://app369.com/fix/flutter-pod-install-failed/) · [**Firebase missing permissions**](https://app369.com/fix/firebase-missing-or-insufficient-permissions/)

Questions

## **More on this error**

<details>

<summary>**Are crashes lost while the dSYM is missing? **+</summary>

No. Firebase says the exceptions will be held by the backend until the missing files are uploaded, so uploading late still shows them.

</details>

<details>

<summary>**I build with --split-debug-info. Do I need anything else? **+</summary>

On iOS, Flutter 3.12.0 or later with the Crashlytics Flutter plugin 3.3.4 or later uploads the Flutter symbols through the same run script. On Android, upload them with firebase crashlytics:symbols:upload, pointing at the folder you gave to --split-debug-info.

</details>

<details>

<summary>**Can you fix it for me? **+</summary>

If one bug is the whole problem, the App Fix Ticket covers it: a written diagnosis first, then the fix. If the app has more going on, the Launch Check is a written check of the whole app. Each issue found is rated critical, high, medium or low, with where it is and how it was confirmed. No issues worth fixing, no charge. If the Launch Check finds nothing rated medium or higher, Simon refunds the full $450. You keep the report either way. This applies to the first 10 Launch Checks bought after October 30, 2026.

</details>

A different error?

## **Describe it and get a written quote**

Send the error and what you were doing. You get a written scope, a fixed price and a timeline; Simon replies by email, usually within one business day.

[**Describe your problem **→](https://app369.com/contact/) [**All fixes**](https://app369.com/fix/)