---
title: Upload dSYM files
source: https://docs.newrelic.com/docs/mobile-monitoring/new-relic-mobile-ios/configuration/upload-dsyms-bitcode-apps
---

Your app's dSYM files are stored in Xcode's dSYM archive path folder. This is the folder where the iOS agent gets the dSYM files that are used to symbolicate your crash reports.
New Relic provides a post-build script as part of the [iOS agent's install process](https://docs.newrelic.com/docs/mobile-monitoring/new-relic-mobile-ios/installation/spm-installation/#configure-using-swift-package-manager).
This script automatically converts your dSYM to the New Relic map file format and uploads the files needed for crash symbolication to New Relic.

## Automatic script [#Automatic]

A Swift script is included with the iOS agent that is intended to be run from a build script in your target's build phases in Xcode.
The script automatically uploads dSYM files in the background (or converts your dSYM to the New Relic map file format), and then performs a background upload of the files needed for crash symbolication to New Relic.

In Xcode 14 Apple changed the default setting on newly created projects to disable bitcode. The App Store now only accepts app submissions with bitcode turned off. See [Xcode 14 release notes](https://developer.apple.com/documentation/xcode-release-notes/xcode-14-release-notes).
If your project still has bitcode enabled you must disable it. The automatic script requires bitcode to be disabled.

Apple generates dSYM files for Bitcode-enabled apps. You must [download the dSYM files for Bitcode-enabled apps from Apple](https://docs.newrelic.com/docs/mobile-monitoring/new-relic-mobile-ios/install-configure/retrieve-upload-dsyms-bitcode-enabled-apps) and upload them to New Relic through the [mobile monitoring UI](#mobile-ui).

If you see unreadable machine code in the [**Crashes** page](https://docs.newrelic.com/docs/mobile-monitoring/mobile-monitoring-ui/crashes/mobile-apps-crashes-dashboard), your dSYM files may not be uploaded correctly. In some cases, you may need to [manually upload dSYM files](#manual-dsym).

In New Relic iOS agent version 7.4.0 we introduced a new symbol upload script which uses Swift. The Python version of the symbol upload script is still available but will be removed in a future release.
With the New Relic iOS agent version 7.3.8, the python version of the automatic script uses Python 3. If you use macOS 12.3 [macOS 12.3 (Monterey)](https://developer.apple.com/documentation/macos-release-notes/macos-12_3-release-notes), Python 3 will be installed by default with Xcode. But if you use the python automatic script on macOS 12.2 or before, you may need to manually install [Python 3](https://www.python.org/downloads/mac-osx/).

## Identify missing dSYMs [#IdentifyingMissingdSYMs]

When a Bitcode-enabled app is uploaded to Apple for App Store review or ad-hoc distribution, dSYMs need to be manually downloaded from Apple and uploaded to New Relic to allow the [mobile crash reports](https://docs.newrelic.com/docs/mobile-monitoring/new-relic-mobile/getting-started/ios-agent-crash-reporting) to be properly symbolicated. These dSYMs can be downloaded through the archives organizer in Xcode within several minutes of uploading the app. In this situation follow the procedures to [find the archive and download dSYMs](#Archive).

If an app is missing a dSYM file, you'll see three indicators in the mobile monitoring UI:

-   **Banner notification**: A banner warning appears on the [**Crash report** page](https://docs.newrelic.com/docs/mobile-monitoring/mobile-monitoring-ui/crashes/mobile-apps-crash-report-dashboard). The warning reads:

```
We were unable to locate your dsym.
```

-   **Upload prompt**: From the **Crash type summary** page you will be automatically prompted to upload a dSYM file if it is missing.
-   **Machine code**: The crash stack trace on the **Crash report** page displays machine code and not a human-readable error message.

## Upload dSYM files through the mobile monitoring UI [#mobile-ui]

You can easily upload your dSYM files directly from the New Relic UI. The maximum file size is 600 MB. To upload your dSYM files:

1.  Go to **[one.newrelic.com > All capabilities](https://one.newrelic.com/all-capabilities) > Mobile**. Then select your app from the list.
2.  View **Crashes**.
3.  Select a specific crash from the **Total crashes** in Group crashes.
4.  Click **Upload dSYM**. You can either drag and drop your dSYMs directly, or select the file from your computer.

> #### ⚠️ IMPORTANT
>
> The Upload dSYM button appears only if the `platform` attribute is set to `native`. This button is not displayed in the UI for apps on hybrid platforms such as React Native or MAUI.

## Manually upload dSYM files [#manual-dsym]

In some circumstances, New Relic's automatic upload of dSYM files may fail. If the dSYM upload fails, it creates an `upload_dsym_results` file. For example, if there's a network failure and the dSYM upload isn't completed, `upload_dsym_results` will contain a log of what went wrong. For additional information about how New Relic handles dSYM uploads, see [New Relic's Online Technical Community](https://support.newrelic.com/s/hubtopic/aAX8W0000008Yv9/relic-solution-ios-dsym-upload-deepdive).

If the automatic upload fails, you can manually upload your dSYM file. If you have multiple dSYM files, they can be within a single zip with a maximum file size of 600 MB. The `YOUR_NEW_RELIC_APPLICATION_TOKEN` value in the commands below is the same key used for `+[NewRelic startWithApplicationToken:]` (in Objective-C) or `NewRelic.start(withApplicationToken:)` (in Swift).

To manually upload your dSYM files:

**Via Python script (agent versions 6.0.0 or higher)**

In iOS agent versions 6.0.0 or higher, the agent includes a Python script that automatically processes and uploads symbols. You can call this script from the command line:

````shell
NewRelicAgent.framework/Resources/generateMap.py "DSYM_ARCHIVE_PATH" "YOUR_NEW_RELIC_APPLICATION_TOKEN"
```

````

**Via command line**

To manually upload individual dSYM files from the command line:

1.  Zip up your dSYM file or files using the following command. Replace `~/ZIPPED_DSYM_PATH` with your new dSYM archive path and file name (for example, `Users/my-name/desktop`). Also replace `~/dSYM_PATH` with your existing dSYM file path.

    ```shell
    /usr/bin/zip --recurse-paths --quiet "~/ZIPPED_DSYM_PATH" "~/dSYM_PATH"
    ```
2.  Upload the dSYM zip file using the following command:

    -   For **US accounts (default)**:

        ```shell
        curl -F dsym=@"~/DSYM_ZIP_PATH" -H "X-APP-LICENSE-KEY: YOUR_NEW_RELIC_APPLICATION_TOKEN" https://mobile-symbol-upload.newrelic.com/symbol
        ```
    -   For **EU accounts**:

        ```shell
        curl -F dsym=@"~/DSYM_ZIP_PATH" -H "X-APP-LICENSE-KEY: YOUR_NEW_RELIC_APPLICATION_TOKEN" https://mobile-symbol-upload.eu01.nr-data.net/symbol
        ```
    -   For **JP accounts**:

        ```shell
        curl -F dsym=@"~/DSYM_ZIP_PATH" -H "X-APP-LICENSE-KEY: YOUR_NEW_RELIC_APPLICATION_TOKEN" https://mobile-symbol-upload.jp.nr-data.net/symbol
        ```

## Troubleshooting [#auto-upload-fail-troubleshooting]

The automatic script will create an `upload_dsym_results.log` file in your project's root directory, which  contains information about any failures that occur during symbol upload.

### Missing dSYMs [#troubleshooting-missing-dsyms]

If dSYM files are missing, you may need to check Xcode build settings to ensure the file is being generated. Frameworks which are built locally have separate build settings and may need to be updated as well.

Build settings:

```
Debug Information Format : Dwarf with dSYM File
Deployment Postprocessing: Yes
Strip Linked Product: Yes
Strip Debug Symbols During Copy : Yes
```

### Limitations

dSYM files are limited in size to 1 GB each.
