This documentation is for version 5 of the BugSnag macOS notifier. We recommend upgrading to the latest release using our Upgrade guide. Documentation for the current release can be found here.
Stacktraces from Apple platforms include backtraces with memory addresses, but symbolication is required to replace the memory addresses with human-readable function names, file paths, and line numbers. BugSnag supports symbolicating crash reports using the contents of your debug symbol (dSYM) files, which are generated by compiling your app.
If you have Bitcode enabled in your application’s project settings, the dSYM files available on your Mac will not contain the information needed to symbolicate crash reports. Instead, dSYM files are generated by the App Store when your app is recompiled after upload and will need to be downloaded using Xcode or App Store Connect or with tools like Fastlane.
Fastlane is a suite of tools for automating mobile development tasks. It handles authentication with App Store Connect to ease downloading dSYM files.
BugSnag provides an action to upload debugging symbols. See our Fastlane plugin docs for details.
To get started, download the dSYM ZIP archive using Xcode or App Store Connect.
It may take time for the download to become available, as the App Store needs to
recompile the your app. Once downloaded, the file can be uploaded to BugSnag using
bugsnag-dsym-upload, a
script for validating and uploading your dSYM files. bugsnag-dsym-upload
is available
for download using Homebrew
or by downloading the source.
$ bugsnag-dsym-upload --api-key API_KEY YOUR-dSYM-FILES.zip
If you are using BugSnag On-premise, you should supply your BugSnag Upload API endpoint by specifying the following option:
--upload-server "https://upload.example.com"
For more information on the Bitcode recompilation process and downloading dSYMs, see the Apple developer documentation on understanding crash reports.
After completing each app build, the dSYM files are available on your local machine and ready to be uploaded to BugSnag. This process can be automated by adding a build phase to your project which uploads any generated dSYM files to BugSnag after each build.
Fastlane is a suite of tools for automating mobile development tasks.
BugSnag provides an action to upload debugging symbols. See our Fastlane plugin docs for details.
If you are using CocoaPods, installing the cocoapods-bugsnag plugin will add a Run Script build phase to your project workspace to upload your dSYM files so the BugSnag service can provide you with symbolicated stack traces. To install, run:
gem install cocoapods-bugsnag
Add pod 'Bugsnag'
, and plugin 'cocoapods-bugsnag'
to your Podfile
:
pod 'Bugsnag'
plugin 'cocoapods-bugsnag'
Then, install with:
pod install
Once added, uploading your dSYM files to BugSnag will occur automatically.
If using neither Fastlane, nor the CocoaPods plugin, adding a build phase to your project can be configured manually.
/usr/bin/ruby
fork do
Process.setsid
STDIN.reopen("/dev/null")
STDOUT.reopen("/dev/null", "a")
STDERR.reopen("/dev/null", "a")
require 'shellwords'
Dir["#{ENV["DWARF_DSYM_FOLDER_PATH"]}/*/Contents/Resources/DWARF/*"].each do |dsym|
system("curl --http1.1 -F apiKey=your-api-key-here -F dsym=@#{Shellwords.escape(dsym)} -F projectRoot=#{Shellwords.escape(ENV["PROJECT_DIR"])} https://upload.bugsnag.com/dsym")
end
end
Once added, uploading your dSYM files to BugSnag will occur automatically.
When BugSnag receives an error and dSYM files are not available to symbolicate the error, the error’s stacktrace displays raw memory addresses. Finding and uploading the missing files automatically triggers symbolication of recorded errors in BugSnag, revealing human-readable function names, file paths, and line numbers in place of memory addresses.
Following the guide above for configuring dSYM file uploads should resolve issues in future builds, however the following steps should help with troubleshooting issues with missing dSYM files in existing app builds with errors in BugSnag.
If Bitcode is enabled in your application settings, your dSYM files are generated by the App Store when your app is recompiled after upload. It is possible that your dSYM files are not yet available as recompilation has not completed, or that errors or failure occurred while the files were being uploaded. To fix, configure or retry the steps for uploading dSYM files for Bitcode-enabled apps above.
Contact support if you have questions or further issues persist after dSYM file upload has been successfully configured.
When not using Bitcode, the dSYM files for a particular build of an app are available on the machine where it was compiled. Resolving this issue requires finding and uploading those files.
A list of missing dSYM files is available within a BugSnag project’s
settings on a page named “Missing dSYMs”. The missing files can be located
using mdfind
and the UUIDs listed in the table on that page.
$ mdfind YOUR_UUID_HERE
Once a required dSYM file has been located, use
bugsnag-dsym-upload
to upload all dSYM files in the same directory. bugsnag-dsym-upload
is available
for download using Homebrew
or by downloading the source.
$ mdfind YOUR_UUID_HERE
path/to/dsyms/MyApp.dSYM
$ bugsnag-dsym-upload path/to/dsyms
Completing these steps for all missing dSYM files should resolve the issue, however if issues persist or you have further questions, please contact support.
If you have enabled bitcode and opted not to send the app symbols to Apple, the
dSYMs uploaded to BugSnag will not contain the original symbols so the file and
class will be displayed as hidden, for example __hidden#231_
.
This can be fixed by combining the dSYMs downloaded from Apple with symbol maps that were generated at build time.
If you are using Fastlane, set the symbol_maps_path
parameter to the directory
containing the symbol maps:
upload_symbols_to_bugsnag(symbol_maps_path: "path/to/BCSymbolMaps")
If you are using bugsnag-dsym-upload
set the --symbol-map
argument to the
directory containing the symbol maps:
$ bugsnag-dsym-upload --symbol-map path/to/BCSymbolMaps dSYMs.zip
The symbol maps can be found in the BCSymbolMaps
directory of your archive, for example:
~/Library/Developer/Xcode/Archives/2017-01-01/example-app.xcarchive/BCSymbolMaps