How to Manually Symbolicate a .crash or .ips File in Xcode

Anas Poovalloor
3 min readJul 4, 2024

--

When your app crashes, it generates a crash report. These reports are invaluable for diagnosing and fixing bugs, but they are often difficult to interpret in their raw form. To make sense of them, you need to symbolicate them, translating memory addresses and binary data into human-readable method and function names. This guide will walk you through the steps to manually symbolicate a crash report using Xcode tools.

Prerequisites

Before you begin, ensure you have the following:

  1. Crash report file: The .crash or .ips file — This is typically retrieved from the device or crash reporting service.
  2. dSYM file(.dSYM): The debug symbols file for the specific build that crashed.
  3. App Binary(.app): The executable file of the app for the build that crashed.
  4. The symbolicatecrash tool, provided by Xcode, is used for symbolication. You can find it within the Xcode app bundle.

Finding dSYM File:

  • Open Xcode.
  • Go to Window > Organizer.
  • Select your app under the Archives tab.
  • Choose the specific archive corresponding to the build that crashed.
  • Right-click and select Show in Finder.
  • In the Finder window, right-click the .xcarchive file and select Show Package Contents.
  • The dSYM file is located in the dSYMs folder.

Finding the App Binary:

  • In the same Show Package Contents window from the .xcarchive file.
  • The app binary is located under Products > Applications.

Locate symbolicatecrash Tool:

The symbolicatecrash tool, provided by Xcode, is used for symbolication. You can find it within the Xcode app bundle:

/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash

Step 1: Obtain the Required Files

First, ensure you have all the necessary files and move the .app, .dSYM, .crash, or .ips files into a folder. Then, copy the symbolicatecrash file from its location and paste it into the same folder.

Step 2: Open Terminal and Navigate to the Folder

Open Terminal and change directory (cd) to the folder where you moved your files:

cd /path/to/SymbolicateFolder/

Replace /path/to/SymbolicateFolder/ with the actual path to your folder containing .app, .dSYM, .crash, and symbolicatecrash files.

Step 3: Set Up Your Environment

Ensure your Xcode environment is properly set up by exporting the DEVELOPER_DIR environment variable. Next, run the following command in the terminal:

export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"

Step 4: Run symbolicatecrash

Now, you can use the symbolicatecrash tool to symbolicate your crash report. Use the following command syntax:

./symbolicatecrash /path/to/crash_report.crash /path/to/dSYM > symbolicated_report.crash

Ex Command:

./symbolicatecrash ios_crash_report.crash ios_app.dSYM > symbolicated_report.crash

To show Symbolicated logs on terminal screen:

./symbolicatecrash -v /path/to/crash_report.crash /path/to/dSYM

Ex Command:

./symbolicatecrash -v ios_crash_report.crash ios_app.dSYM

Step 5: Verify Symbolication

Check the symbolicated_report.crash file to ensure that the crash report has been successfully symbolicated. It should now contain human-readable method and function names instead of memory addresses.

Troubleshooting Tips

Ensure Matching Build: Make sure the dSYM file and the app binary match the exact build that generated the crash. Different builds, even minor changes, will result in different dSYM files.

UUID Verification: Verify that the UUIDs in the crash report match those in the dSYM file. You can check the UUIDs using the dwarfdump tool:

dwarfdump --uuid /path/to/myapp.app.dSYM

Compare this output to the Binary Images section of the crash report to ensure they match.

Check Paths: Ensure that the paths to the dSYM file and crash report are correct. Relative paths can sometimes cause issues, so use absolute paths where possible.

Manually symbolicate your crash reports to make debugging easier and faster. By following these steps, you can translate cryptic crash logs into readable and actionable information, helping you to quickly identify and fix issues in your app. Happy debugging!

Ready to level up your Swift skills? Don’t miss ‘Understanding Swift’s Async/Await.

--

--