Crash reports are hard to read. iOS crashes contain mainly module names and offset values, leaving you without any clue as to which method the crash actually occurred in. On Android, most people use tools like Proguard to obfuscate the stack trace and replace meaningful method names with random combinations of letters. Symbolication and deobfuscation is the process of restoring crash reports into a human-readable format by applying debug symbols and mapping files on the original stack trace.
Join the Preview for our new mobile symbol service
With Dynatrace version 1.164, we’re happy to announce the start of a Preview for the mobile symbol service that allows you to upload debug symbols and mapping files to Dynatrace in an automated way directly from your build pipeline. In addition, we’ve improved our symbolication for iOS to also support code from third-party frameworks. Read on for an overview of the cool new features that are now available.
Symbol REST service
We’ve extended the Configuration API with a new endpoint that allows you to manage Android and iOS symbols. This endpoint allows you to list all symbols in your storage, upload new symbols, or delete existing symbols to free up space.
Symbol management page
We’ve also improved the symbol management workflow. Previously, the only way to upload symbols was by locating the crash of an app version in the crash list and uploading them from there. As a result, it wasn’t possible to upload symbols for app versions that didn’t experience crashes. Deleting symbols was possible only through Dynatrace global symbol settings, which weren’t available to all users due to permission issues.
With our new symbol management interface, you can now either manage all symbols globally for your environment (go to Settings > Web & mobile monitoring > Source maps & symbol files) or you can manage symbols on a per-app basis in Mobile application settings > Symbol files (see the example below). We’ve separated Android mapping files and iOS symbols into two lists as the metadata for both operating systems is different. And we’ve added functionality to upload new symbols right from the Symbol files page. The list of symbols shown contains options to delete each symbol as well as to pin it.
Pinning symbols can be useful if you also plan to upload symbol files for development and staging builds. Based on a quota (default is 100 MB), when you upload symbol files Dynatrace automatically frees up space by deleting the oldest symbol files. Pinning symbols from production builds assures you that those symbols won’t be deleted. You can also see that all symbols that were previously uploaded are already there. Pinning isn’t supported for these symbols (they’re grayed out), but you can delete them.
You can now upload Android symbols by selecting a Proguard mapping file and providing the required metadata (package name, version code, and version name).
To upload an iOS symbol file, you need to download the
decode.sh utility, which generates a ZIP file that can be uploaded along with the required metadata (bundle identifier, bundle name, bundle version, and bundle version string). See the example below.
Symbolicating code of third-party frameworks
If your dSYM file contains the symbols of third-party frameworks, Dynatrace now also processes these to give you a more readable stack trace. Be aware that system libraries currently aren’t supported.
We’re already working on some supporting features that will make mobile crash management with Dynatrace even better:
- fastlane plugin: This plugin will retrieve Bitcode symbols from iTunes Connect and upload them automatically to Dynatrace via the REST API.
- Gradle upload: An extension of the Gradle plugin that can automatically upload Proguard mapping files to Dynatrace via the REST API.
- Support for iOS system libraries.
- Improved crash reporting analysis views, including a multi-dimensional analysis view and drill-downs to specific user sessions that led to the crashes.
If you like what you’ve read so far and would like to give Dynatrace mobile symbol support a try in your own environment, please sign up for the Preview. We’ll reach out to you once we’ve enabled this feature in your environment.