Why aren't the crashlogs from Testflight symbolicating in Xcode? - ios

I just started getting crash reports from Testflights for a pre-release app that I'm working on, but for whatever reason Xcode isn't properly symbolicating the logs.
The build is available (was built, archived and uploaded on this computer in this version of Xcode), so what am I missing here? Why aren't these crash logs symbolicated?

Apparently this is a bug that started happening when Apple started accepting bitcode. Not all of the dSYMs are downloaded when you click on 'Download dSYMs…' in the Xcode organizer. Here's how I fixed it:
Manually downloaded the dSYMs from the build page in iTunes Connect
Right-clicked on the crash log in Xcode and opened it in Finder
The xcrashpoint file you'll find is an archive, so right-click and show package contents
Drill down to your .crash file(s)
Copy the .crash file(s) to a different directory, for instance the desktop
Copy the dSYMs folder you downloaded to the same directory
Open Terminal, cd to the folder
In terminal, set the developer dir path:
export DEVELOPER_DIR='/Applications/Xcode.app/Contents/Developer'
Then symbolicate the files with (replace your paths and filenames here):
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash name_of_crashfile.crash name_of_downloaded_dSYMs_dir/ > output.log
And voila! You have your symbolicated crash log.

I still get this in Xcode 10. As a work around. Add the crash logs to your devices logs and they will be symbolicated. At least in my experience.
Step 1-
In Xcode Window>Devices & Simulators [select your device on the left]>view device logs.
Step 2-
Then Xcode> Window> Organizer > Crashes tab.
Right click a crash and click show in finder. This shows .xccrashpoint files. Right click> show package contents. Drill down into the folders until you see the .crash files. Then drag them into the device logs list we opened in step 1

Related

Splunk Mint: Failed to archive dSYMs for "MyApp" to "/tmp/splunk-mint-dsyms"

How to fix this error?
Splunk Mint: Archiving "MyApp" to "/tmp/splunk-mint-dsyms/MyApp.zip"
adding: MyApp
zip error: Interrupted (aborting)
Splunk Mint: Failed to archive dSYMs for "MyApp" to "/tmp/splunk-mint-dsyms"
Command /bin/sh failed with exit code 252
Second error is
Splunk Mint: Archiving "MyApp" to "/tmp/splunk-mint-dsyms/MyApp.zip"
adding: MyApp (deflated 68%)
Splunk Mint: ERROR "400" while uploading "/tmp/splunk-mint-dsyms/MyApp.zip"
Please remove run script added for auto upload DSYM file.
And manually upload DSYM for crash report symbolication.
Please check for how to upload DSYM manually.
Download dSYM bundles using Xcode Organizer after archiving your app
In Xcode, from the Xcode menu select Window > Organizer.
In Xcode Organizer, click the Archives tab.
Under iOS Apps, select your app from the list.
From the Version column, select the archive for your app, displayed as App Version (Build Uuid).
Click Download dSYMs to download the dSYM bundles from Apple.
Compress and upload dSYM bundles to MINT
In Finder, find the dSYM bundles (archive files) you just downloaded.
Right-click the archive file and select Show package contents.
Open the dSYMs folder.
Compress each dSYM file named with your app's build UUID to a ZIP file.
Open MINT Management Console by logging in to mint.splunk.com.
Select your app project.
Click the Settings dashboard.
Under Project Settings, click dSYMs.
Click Browse & Upload, then navigate to and select the dSYM bundles you compressed.
For more info check out docs
The answer that worked for me was contained here:
Run Script Phase after dSYM is generated with Xcode 10 (on build)
Adding sleep 5 to the top of:
iOS/Pods/SplunkMint/SplunkMint.framework/Resource/splunkmint_postbuild_dsym_upload_script.sh
A hack, yes, but better than having to disable the upload completely IMO.

Firebase Crashlytics: Upload missing dSYMs to see crashes from 1 versions.(iOS)

Error Message: Upload missing dSYMs to see crashes from 1 versions.
Versions affected: 1.0 (1)
I am trying to implement Firebase Crashlytics in my iOS project. I did all the setups according to Firebase Crashlytics Doucmentation. The crash is performed manually when the button is clicked just to see whether the crashlytics is working.
#IBAction func onTestCrashButtonClick(_ sender: UIButton) {
Crashlytics.sharedInstance().crash()
}
But when i tried to see the error report in the firebase console, it shows something like this image.
After reading Get Deobfuscated crash reports I just Set Debug Information Format to DWARF with dSYM File like below but the problem not fixed till now.
Download appDsyms archive from App Store
1.1 Login: https://appstoreconnect.apple.com
1.2 Go to: MyApps -> Choose your app -> Test Flight -> Select app version that is in the App Store -> Build Metadata -> Includes Symbols (right side) -> Press: Download dSYM.
New way - June 2022
New way to upload directly in Firebase Crashlytics.
Go to firebase crashlytics https://console.firebase.google.com
-> Select your project -> Go to crashlytics (left side) -> Upload your dSYM files.
Other way - Upload dSYM files via terminal
Open terminal, drag and drop 3 files on terminal on this order:
1.1 drag an drop: "upload-symbols" which can be found in
/project/Pods/FirebaseCrashlytics/upload-symbols
1.2 write " -gsp "
1.3 drag an drop: "GoogleService-Info.plist" which can be found in /project/GoogleService-Info.plist
1.4 write " -p ios "
1.5 drag an drop: "appDsyms" folder (unarchived, zip file might not work!) which usually is in Download folder /Users/username/Downloads/appDsyms
1.6 Press Enter
In terminal the complete command should include -gsp and -p ios, full command looks like this: 1.1 -gsp 1.3 -p ios 1.5
/project/Pods/FirebaseCrashlytics/upload-symbols -gsp /project/GoogleService-Info.plist -p ios /Users/username/Downloads/appDsyms
All Set, wait for upload in the terminal!
Terminal example:
-
One way how to get a file or folder location with a drag and drop to terminal:
-
AppStore Connect, Download dSYM:
I have been having this same issue for a while and I was finally able to resolve it, thought I would share what worked for me:
For context, I am working on a larger app which uses several Cocoapods.
I found that same red banner on my Firebase Crashlytics page and after following all of their instructions I was still seeing it.
I tried the "archive/find .dSYMs/upload manually via terminal" solution several times to no avail.
Finally, I decided to download the .dSYMs from iTunesConnect.
[Your App] > Activity > [Desired Build Number] > Download dSYM
I then uploaded those .dSYMs manually and within minutes Firebase Crashlytics was happy and showing the crash reports.
UPDATE
Google has added a swanky .dSYM upload feature on the Firebase Crashlytics dashboard, no more uploading from the terminal.
Edit on March 16, 2020.
Google is soon removing the upload feature on the Firebase Dashboard. An uploader script should be used from the terminal to upload dSYMs to Firebase. See Google's instructions here.
After updating Fabric Crashlytics to Firebase Crashlytics SDK. I was also getting same issue(Upload 1 missing dSYM required to process 5 crashes). I solved with the help of following steps-:
Step 1-:
Open Target-> Build Settings -> Search for "debug information format".
Set Debug Information Format to DWARF with dSYM File for all
your build types.
Step 2-:
Open Run Script section and input the script
"${PODS_ROOT}/FirebaseCrashlytics/run"
and then add input files-
${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}
$(SRCROOT)/$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)
Step 3-: Add one more script to upload dSYM file
${PODS_ROOT}/FirebaseCrashlytics/upload-symbols -gsp ${PROJECT_DIR}/Your_path/GoogleService-Info.plist -p ios ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}
If everything is fine you setup all without missing any step and then also you see Upload missing dSYMs to see crashes error in firebase. (New way - June 2022)
You can upload directly in Firebase Crashlytics. Go to firebase crashlytics https://console.firebase.google.com -> Select your project -> Go to crashlytics (left side) -> Upload your dSYM files.
Download the .dSYMs from iTunesConnect only no anywhere else and upload those to the Firebase.
Another way - Upload dSYM files via terminal
Run the script directly from your terminal to upload dSYMs :
/path/to/pods/directory/FirebaseCrashlytics/upload-symbols -gsp /path/to/GoogleService-Info.plist -p ios /path/to/dSYMs
After two days of long research and try lots of solutions but no anyone works for me :(
But by this solution Firebase Crashlytics was happy and showing the crash reports within a few minutes.
Pods/Fabric/upload-symbols -gsp APP/Resources/GoogleService_Info.plist -p ios /Users/ME/Desktop/APP.app.dSYM
This one I used recently to upload my dsym to fabric. I was using fabric with crashlytics SDK not firebase one(which is currently in beta). Just replace your app name for 'APP' and your DSYM path instead of '/Users/ME/Desktop/APP.app.dSYM.
In my case, I have done the following things and it worked:
Select 'Run script only when installing' in Build Phases -> Run Script
(Shell = ${PODS_ROOT}/Fabric/run)
Build the app
Now you can find the .dsym file in the path,
/Library/Developer/Xcode/DerivedData/XXX-arctjcalvfslmbakanpyivuuxjmm/Build/Products/Release-iphoneos
Upload the zipped .dsym file to firebase console
After few minutes, you can find the crash reports
NOTE:
I have disabled bitcode while exporting ipa file (Adhoc or Appstore)
If you need ipa with bitcode enabled, then download dsym file from iTunes connect
Find and upload debug symbols for Crashlytics
Copy the UUID of your missing dSYM and run
mdfind "com_apple_xcode_dsym_uuids == <UUID>" on a terminal window.
The above command will return something like .../build/ios/Release-Staging-iphoneos/your.app.dSYM
Zip up the package and upload to Crashlytics using Firebase dashboard
Wait for 10-15 minutes before the crashes start to appear on the console.
I also faced the same issue.
Basically I was missing a simple step that is why Firebase script could not upload dSYM file.
Step followed to solve it.
Click on project file
Select target
Go to build settings
Search "debug information format"
For all scheme change the settings to "DWARF with dYSM file"
Now run the project again
dYSM error of firebase dashboard should go...
March 2021
The activity tab is no longer on itunesconnect so for you to get the Dsyms file you will have to
Go to itunes connect.
My Apps.
Select the specific app.
Navigate to testflight.
select the build you want to generate the Dsyms file for.
Click build meta data.
search for "includes symbols" and then click then click the download.
Then after downloading it run this code in your terminal replacing the quoted parts with the right file path.
/path/to/pods/directory/FirebaseCrashlytics/upload-symbols
-gsp /path/to/GoogleService-Info.plist -p ios /path/to/dSYMs
If you are using the dynamic library is your project using cocoa pods or any other tool then Firebase needs Duplicate Symbol files to locate the faulty code in your library. If you want to read more about dSysms read this : https://stackoverflow.com/questions/3656391/whats-the-dsym-and-how-to-use-it-ios-sdk
To find dsysm folder, you first need the .ipa file on which crash was reported on your firebase. In your case, I suppose you are running on the simulator for testing. To get IPA follow these steps: How to create ipa in xcode 6 without Apple Developer account?
When you reach .iPA then right click and select show package contents, or follow this link: iphone: Where the .dSYM file is located in crash report
There you will find system folder. Upload this folder to firebase crashalytics.
Hope this helps!
I hope you have a resolved it till now. But for other who are using Firebase/Crashlytics. I uploaded the build and got crash but it was not showing in the console due to missing dsyms.
I logged into the itunes and goto the activity section. Then download the dsyms.
After that I uploaded the dsyms to firebase console using below command:
/Users/ankitjaiswal/Code/oliobox-ios/Pods/FirebaseCrashlytics/upload-symbols
-gsp /Users/ankitjaiswal/Code/oliobox-ios/JacksonArtGallery/GoogleService-Info.plist
-p ios /Users/ankitjaiswal/Downloads/appDsyms.zip
But in this way you always manually need to download and upload it. This is not recommended instead you can follow this link: https://firebase.google.com/docs/crashlytics/get-deobfuscated-reports-new-sdk
I have created Medium Story about dSYMs upload.
Stap by step how to upload with the terminal
Medium Link:
https://medium.com/#petarlemajic/firebase-dsyms-upload-1cf432c475f7
I will be happy if this helps somebody.
Cheers!
After download dsym .zip file. You should run code below in Terminal.
/ProjectPath/Pods/Crashlytics/Crashlytics.framework/upload-symbols -gsp /ProjectPathForGoogleServiceFile/GoogleService-Info.plist -p ios /dSYMFilePath/dSYMs.zip
If upload-symbols command not found, you should update pods for Firebase.
Question is answered well already if you still want a ready-made script that you can copy and paste. Here you go.
find
$HOME/Library/Developer/Xcode
/DerivedData/<target-name>-*/Build/Products/Develop-iphoneos
-name "*.dSYM" | xargs -I \{\}
$PODS_ROOT/FirebaseCrashlytics/upload-symbols
-gsp ${PROJECT_DIR}/<target-name>/GoogleService-Info.plist
-p ios \{\}
(October 21 - 2020)
I was having a lot of trouble uploading my dsyms to firebase, this happend to me after i updated to FirebaseCrashlytics and removed my fabric SDK, before that i had no issues. I tried all solutions with no luck but finally figured out my problem after making a few changes in my code. It seems i had some conflicting values in my info.plist file and were not lining up with what was in my GoogleService-Info.plist file. The bundle ID in the GoogleService-Info.plist should be the same used as the url schemes within info.plist. After i made these changes i uploaded the DSYMs manually.
This is an example of how my bundle ids look in my project after updating:
GoogleService-Info.plist
info.plist
I then wanted this automated. I added the following script to the Build Phases > Run Script and i now have this automated as it was before when i was using the Fabric sdk. Just copy this code into run script, it should require no changes.
"${PODS_ROOT}/FirebaseCrashlytics/upload-symbols" -gsp "${PROJECT_DIR}/GoogleService-Info.plist" -p ios "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}"
PS: Make sure you follow the other posts making sure you have "DWARF with dYSM file" set in build options as well.
According to firebase documents, instead of uploading dsym You can also provide your app's built Info.plist location to the build phase's Input Files field:
$(SRCROOT)/$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)
They fixed bug and document updated
If Bitcode enable = Yes
Go to App Store Connect
Go to iOS Build and Download dSYM
Open a terminal
Run the command
/Users/your-project-path/ios/Pods/FirebaseCrashlytics/upload-symbols -gsp /Users/your-project-path/ios/GoogleService-Info.plist -p ios /Users/your-username/Downloads/appDsyms
Once you get the success message and refresh the Firebase console within some time you will see the reflections
Note: Upload all the built dSYM files to the Firebase
My appstore connect doesn't show any download dSYM link.
So, I followed these instructions and it worked for me.
Simple Steps Follow 1 Go to archive and right click on the latest version in which you want to get crash report on firebase 2 see the dsyms folder 3 create the Zip file of dsyms folder 4 finally upload that zip file into the firebase console
The accepted answer is perfect and what I also followed. I would just like to add another way to download these dSyms.
Open Organizer from Xcode menu > Window > Organizer
Select the Application from left panel and select Archives tab.
Select the archive for the app release you want to download dSyms of. (If you have deleted archives, then you better follow the accepted answer)
On the right panel, click Download Debug Symbols. Now this will download those symbols into the archive itself. Simply right click the archive version > Show in Finder.
Here in finder, right-click archive > Show package contents.
This will open the contents to reveal the dSyms.
Now you don't need all of them, some of them will be your added frameworks/libs from pods and other imports.
Select only the ones with alphanumeric labels.
You can zip these and upload to Firebase.
Go to developer.apple.com > Activity > iOS Build > Select Version > Download dSYM
Change your-project-path and your-username
Run this code on Terminal
/Users/your-project-path/ios/Pods/FirebaseCrashlytics/upload-symbols -gsp /Users/your-project-path/ios/GoogleService-Info.plist -p ios /Users/your-username/Downloads/appDsyms.zip
You'll see success message on the Terminal.
Check the crash logs on Firebase Console after 15-30 minutes.
The top solutions are good, thanks to their authors. Maybe this tips could help someone : when you want to test your configuration by crashing your app, build it with Xcode on the simulator, then stop the app and relaunch it directly in the simulator.
As the firebase doc says : The initial instance includes a debugger that interferes with Crashlytics. https://firebase.google.com/docs/crashlytics/test-implementation?platform=ios#test_it_out

Fabric crashlytics showing Missing .dSYM file for latest iOS app version UUID

I have uploaded several version of iOS app in app store with Crashlytics enabled, where some old version got crashed. I am trying to get crash logs from Crashlytics(fabric) but it is showing 0 crashes, 'Missing dSYM file', and UUID of latest app version. Here i can upload only .zip file of .dSYM files which has latest UUID, but how can we get older app crash reports(logs).
Uploading symbol files to Fabric
In xcode go to Window -> Organiser
Find the relevant build that was uploaded to AppStore and click "Download DSYMs"
Right-click build and choose "Show in finder"
Right-click the selected xcarchive file and choose "Show package contents"
Go to DSYMs folder. If you have performed step 2, there should be one file called NP.app.dSYM and some more [Unique UUID].dSYM files (if Bitcode is enabled)
Copy all DSYM files, paste in desktop and compress them into one zip
Go to https://fabric.io, Click the Settings icon (upper right corner).
Go to Apps -> [app name] -> Missing dSYMs and upload the zip

Xcode - There are no dSYMs available for download

I want to extract the dSYM file from but when I click on "Download dSYMs..." in the Organizer I get the follow message: "There are no dSYMs available for download.".
I'm using Xcode 7.2 with a workspace generated by Cocoapods 0.39.
How can I get them?
NON-BITCODE
Here's a GIF on how to get DSYMS, compress and upload to crashlytics/fabric
Press Window > Organizer
Right-click on your app> Show in Finder
Right-click on first .xcarchive file > Show package contents
BITCODE ENABLED
You'll need to download dsyms from App Store Connect. The easiest would be to use fastlane
lane :refresh_dsyms do
download_dsyms # Download dSYM files from App Store Connect
upload_symbols_to_crashlytics # Optional for uploading to Crashlytics
end
I think #Jordan is correct--it seems that iTunes Connect is recompiling apps with bitcode so that the UUID changes, and the dSYM inside the .xcarchive can't actually be used to symbolicate the app (this appears to be a new development).
You can download the correct dSYM from iTunes Connect. Login, go to My Apps, select your app, then tap on the Activity tab at the top. Tap on the relevant build, and, assuming the app was submitted with symbols in the first place, you should see the option to "Download dSYM."
The file you get is called dSYMs (without an extension) but it is in fact a zip file. Add the .zip extension, unzip, and you'll find your dSYM(s) inside.
(I needed to do this this week since Crashlytics was complaining about a missing dSYM.)
Actually you can't download dSYM file from iTunesConnect now. There is another way to get that file.
Xcode -> Window -> Organizer -> Show xcarchive file in Finder -> Right Click Your xcarchive file -> Select "Show Package Contents"
You can see your dSYM file now.
bitcode must be enabled
if you want to get your dSYM from iTunesConnect
Build Settings > Build Options > Enable Bitcode > YES
Select device "Generic iOS Device" (or anything that works)
Archive
When exporting from archive
CHECK "include app symbols for your application to receive symbolicated crash logs from Apple"
CHECK "include bitcode"
Upload using Application Loader
Once your app has been successfully uploaded to iTunesConnect you can go to iTunesConnect.com > MyApps > [YOUR APP] > Activity > All Builds > [YOUR BUILD] > General Information > Includes Symbols > Download dSYM
#xcode8.2.1 #osx10.12.6
I've found a solution from https://twittercommunity.com/t/not-matching-uuid-bitcode/61000/2
"Crashlytics was reporting missing dSYMs with UUID looking like this: 83889b11dedd363c8e5ee56233bcc90c.
As I said, I followed the guide7 but I couldn't find that UUID. So I went in the iTunesConnect and I did the following:
Select the app
Choose the Activity tab on top
Select the build version Crashlytics is complaining about
Click the Download dSYM blue link
The downloaded file is called dSYM has no extension but it is actually a zip. So I added the zip extension and unzipped it. Inside the unzipped folder I found many dSYM files, one on which has called 83889B11-DEDD-363C-8E5E-E56233BCC90C.dSYM which matched the UUID Crashlytics was reporting as missing (even if formatted in a different way). Note also that this file is not inside the xcarchive.
Hope it can help!"
in my case, it works like charms
In my case, I could not find a dSYM file of my app in the Archives folder. If you face this, go to your Project Build Settings > Build Options > Debug Information Format and make sure it is set to DWARF with dSYM file
If dSYMs folder in package contents is empty (Ted's answer), try to check:
Build Settings > Build Options > Enable Bitcode is set to YES (Jacksonkr's answer)
Build Settings > Build Options > Debug Information Format is set to DWARF with dSYM file (daisura99's answer)
Please check them both.
Then in show package contents -> dSYMs folder, this time, you should find something.
In my case, it worked.
Form latest updates you no need to upload dSYM files manually, automatic upload is done with below process.
Step-1: Goto Target-> Build Settings -> Search for "debug information format". Set Debug Information Format to DWARF with dSYM File for all your build types.
Step-2: Goto Build Phases -> Expand Run Script and add script & input files
In Script:
"${PODS_ROOT}/FirebaseCrashlytics/run"
In input files:
${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}
$(SRCROOT)/$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)
Example Screenshot:
Step-3: Finally add one more script to upload dSYM files
${PODS_ROOT}/FirebaseCrashlytics/upload-symbols -gsp
${PROJECT_DIR}/Your_path/GoogleService-Info.plist -p ios
${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}
Here, in the 2nd line of the script ${PROJECT_DIR}/Your_path/GoogleService-Info.plist -p ios update with your project path means your app schema name
If you got error while running the app follow my answer Xcode 10.2.1 Command PhaseScriptExecution failed with a nonzero exit code
Error:
Command PhaseScriptExecution failed with a nonzero exit code

Symbolicating iPhone App Crash Reports

I'm looking to try and symbolicate my iPhone app's crash reports.
I retrieved the crash reports from iTunes Connect. I have the application binary that I submitted to the App Store and I have the dSYM file that was generated as part of the build.
I have all of these files together inside a single directory that is indexed by spotlight.
What now?
I have tried invoking:
symbolicatecrash crashreport.crash myApp.app.dSYM
and it just outputs the same text that is in the crash report to start with, not symbolicated.
Am I doing something wrong?
Steps to analyze crash report from apple:
Copy the release .app file which was pushed to the appstore, the .dSYM file that was created at the time of release and the crash report receive from APPLE into a FOLDER.
OPEN terminal application and go to the folder created above (using cd command)
Run atos -arch armv7 -o APPNAME.app/APPNAME MEMORY_LOCATION_OF_CRASH. The memory location should be the one at which the app crashed as per the report.
Ex: atos -arch armv7 -o 'APPNAME.app'/'APPNAME' 0x0003b508
This would show you the exact line, method name which resulted in crash.
Ex: [classname functionName:]; -510
Symbolicating IPA
if we use IPA for symbolicating - just rename the extention .ipa with .zip , extract it then we can get a Payload Folder which contain app. In this case we don't need .dSYM file.
Note
This can only work if the app binary does not have symbols stripped. By default release builds stripped the symbols. We can change it in project build settings "Strip Debug Symbols During Copy" to NO.
More details see this post
After reading all these answers here in order to symbolicate a crash log (and finally succeeding) I think there are some points missing here that are really important in order to determine why the invocation of symbolicatecrash does not produce a symbolicated output.
There are 3 assets that have to fit together when symbolicating a crash log:
The crash log file itself (i.e. example.crash), either exported from XCode's organizer or received from iTunes Connect.
The .app package (i.e. example.app) that itself contains the app binary belonging to the crash log. If you have an .ipa package (i.e. example.ipa) then you can extract the .app package by unzipping the .ipa package (i.e. unzip example.ipa). Afterwards the .app package resides in the extracted Payload/ folder.
The .dSYM package containing the debug symbols (i.e. example.app.dSYM)
Before starting symbolication you should check if all those artifacts match, which means that the crash log belongs to the binary you have and that the debug symbols are the ones produced during the build of that binary.
Each binary is referred by a UUID that can be seen in the crash log file:
...
Binary Images:
0xe1000 - 0x1f0fff +example armv7 <aa5e633efda8346cab92b01320043dc3> /var/mobile/Applications/9FB5D11F-42C0-42CA-A336-4B99FF97708F/example.app/example
0x2febf000 - 0x2fedffff dyld armv7s <4047d926f58e36b98da92ab7a93a8aaf> /usr/lib/dyld
...
In this extract the crash log belongs to an app binary image named example.app/example with UUID aa5e633efda8346cab92b01320043dc3.
You can check the UUID of the binary package you have with dwarfdump:
dwarfdump --uuid example.app/example
UUID: AA5E633E-FDA8-346C-AB92-B01320043DC3 (armv7) example.app/example
Afterwards you should check if the debug symbols you have also belong to that binary:
dwarfdump --uuid example.app.dSYM
UUID: AA5E633E-FDA8-346C-AB92-B01320043DC3 (armv7) example.app.dSYM/Contents/Resources/DWARF/example
In this example all assets fit together and you should be able to symbolicate your stacktrace.
Proceeding to the symbolicatecrash script:
In Xcode 8.3 you should be able to invoke the script via
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash -v example.crash 2> symbolicate.log
If it is not there you may run a find . -name symbolicatecrash in your Xcode.app directory to find it.
As you can see there are no more parameters given. So the script has to find your application binary and debug symbols by running a spotlight search. It searches the debug symbols with a specific index called com_apple_xcode_dsym_uuids. You can do this search yourself:
mdfind 'com_apple_xcode_dsym_uuids = *'
resp.
mdfind "com_apple_xcode_dsym_uuids == AA5E633E-FDA8-346C-AB92-B01320043DC3"
The first spotlight invocation gives you all indexed dSYM packages and the second one gives you the .dSYM packages with a specific UUID. If spotlight does not find your .dSYM package then symbolicatecrash will neither. If you do all this stuff e.g. in a subfolder of your ~/Desktop spotlight should be able to find everything.
If symbolicatecrash finds your .dSYM package there should be a line like the following in symbolicate.log:
#dsym_paths = ( <SOME_PATH>/example.app.dSYM/Contents/Resources/DWARF/example )
For finding your .app package a spotlight search like the following is invoked by symbolicatecrash:
mdfind "kMDItemContentType == com.apple.application-bundle && (kMDItemAlternateNames == 'example.app' || kMDItemDisplayName == 'example' || kMDItemDisplayName == 'example.app')"
If symbolicatecrash finds your .app package there should be the following extract in symbolicate.log:
Number of symbols in <SOME_PATH>/example.app/example: 2209 + 19675 = 21884
Found executable <SOME_PATH>/example.app/example
-- MATCH
If all those resources are found by symbolicatecrash it should print out the symbolicated version of your crash log.
If not you can pass in your dSYM and .app files directly.
symbolicatecrash -v --dsym <SOME_PATH>/<App_URI>.app.dSYM/<APP_NAME>.app.dsym <CRASHFILE> <SOME_OTHER_PATH>/<APP_NAME>.app/<APP_NAME> > symbolicate.log
Note: The symbolicated backtrace will be output to terminal, not symbolicate.log.
With the latest version of Xcode (3.2.2), you can drag and drop any crash reports into the Device Logs section of the Xcode Organiser and they will automatically by symbolicated for you. I think this works best if you built that version of the App using Build & Archive (also part of Xcode 3.2.2)
I did this successfully, using the following steps.
Step 1: Create a folder in desktop, I give name it to "CrashReport" and put three files ("MYApp.app", "MyApp.app.dSYM", "MYApp_2013-07-18.crash") in it.
Step 2: Open Finder and go to Applications, where you will find the Xcode application, right click on this and Click "Show Package Contents", after this follow this simple path.
"Contents->Developer->Platforms->iPhoneOS.platform->Developer->Library->PrivateFrameworks->DTDeviceKit.framework->Versions->A->Resources"
OR
"Contents->Developer->Platforms->iPhoneOS.platform->Developer->Library->PrivateFrameworks->DTDeviceKitBase.framework->Versions->A->Resources"
OR
For Xcode 6 and above the path is
Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources
Where you find "symbolicatecrash" file, copy this and paste it to "CrashReport" folder.
Step 3: launch the terminal, run these 3 Command
cd /Users/mac38/Desktop/CrashReport and press Enter button
export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer" and press Enter
./symbolicatecrash -A -v MYApp_2013-07-18.crash MyApp.app.dSYM and press Enter Now its Done.. (NOTE: versions around 6.4 or later do not have the -A option -- just leave it out).
Steps to symbolicate a crash report automatically using XCode:
UPDATED FOR XCODE 9
Connect any iOS device to your Mac (yes a physical one, yes I know this is stupid)
Choose "Devices" from the "Window" menu
Click your device on the left and VIEW DEVICE LOGS on the right
Wait. It might take a minute to show up. Maybe doing Command-A then Delete will speed this up.
Critical undocumented step: rename the crash report that you got from iTunesConnect from .txt extension to .crash extension
Drag the crash report into that area on the left
And then Xcode will symbolicate the crash report and display the results.
Source: https://developer.apple.com/library/ios/technotes/tn2151/_index.html
I use Airbrake in my apps, which does a fairly good job of remote error logging.
Here's how I symbolicate them with atos if the backtrace needs it:
In Xcode (4.2) go to the organizer, right click on the archive from
which the .ipa file was generated.
In Terminal, cd into the xcarchive for instance MyCoolApp 10-27-11 1.30 PM.xcarchive
Enter the following atos -arch armv7 -o 'MyCoolApp.app'/'MyCoolApp'
(don't forget the single quotes)
I don't include my symbol in that call. What you get is a block cursor on an empty line.
Then I copy/paste my symbol code at that block cursor and press
enter. You'll see something like:
-[MyCoolVC dealloc] (in MyCoolApp) (MyCoolVC.m:34)
You're back to a block cursor and you can paste in other symbols.
Being able to go through your backtrace one item without re-entering the first bit is a nice time saver.
Enjoy!
I also put dsym, app bundle, and crash log together in the same directory before running symbolicate crash
Then I use this function defined in my .profile to simplify running symbolicatecrash:
function desym
{
/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/symbolicatecrash -A -v $1 | more
}
The arguments added there may help you.
You can check to make sure spotlight "sees" your dysm files by running the command:
mdfind 'com_apple_xcode_dsym_uuids = *'
Look for the dsym you have in your directory.
NOTE: As of the latest Xcode, there is no longer a Developer directory. You can find this utility here:
/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Vers‌​ions/A/Resources/symbolicatecrash
Just a simple and updated answer for xcode 6.1.1 .
STEPS
1.Xcode>Window>Devices.
2.Select a device from a list of devices under DEVICES section.
3.Select View Device Logs.
4.Under the All Logs section you can directly drag drop the report.crash
5.Xcode will automatically Symbolicate the crash report for you.
6.You can find the Symbolicated crash report by matching its Date/Time with the Date/Time mentioned in your crash report.
Even though I had been developing apps for a few years now, this was my first time debugging a binary and I felt like a complete NOOB figuring out where all the files were i.e. where is *.app *.dSYM and crash logs? I had to read multiple posts in order to figure it out. Picture is worth a thousand words and I hope this post helps anyone else in future.
1- First go to itunesconnect and download your crash logs.
NOTE: Is most cases you may get something like "Too few reports have been submitted for a report to be shown." Basically not enough users have submitted crash log reports to Apple in which case you can't do much of anything at that point.
2- Now if you had not changed your code since you had submitted your binary it to Apple then Launch Xcode for that project and do Product --> Archive again. Otherwise just find your latest submitted binary and right click on it.
In Xcode 4.2.1, open Organizer, then go to Library/Device Logs and drag your .crash file into the list of crash logs. It will be symbolicated for you after a few seconds.
Note that you must use the same instance of Xcode that the original build was archived on (i.e. the archive for your build must exist in Organizer).
Using Xcode 4, the task is even simpler:
open Organizer,
click on Library | Device Log in the left column
click on "Import" button on the bottom of the screen...
and voilà. The log file is imported and Symbolized automatically for you. Provided you Archived the build using Xcode -> Product -> Archive first.
The magical Xcode Organizer isn't that magical about symbolicating my app. I got no symbols at all for the crash reports that I got back from Apple from a failed app submission.
I tried using the command-line, putting the crash report in the same folder as the .app file (that I submitted to the store) and the .dSYM file:
$ symbolicatecrash "My App_date_blahblah-iPhone.crash" "My App.app"
This only provided symbols for my app and not the core foundation code, but it was better than the number dump that Organizer is giving me and was enough for me to find and fix the crash that my app had. If anyone knows how to extend this to get Foundation symbols it would be appreciated.
In my case, I was dragging crash reports directly from Mail to the Organizer. For some reason, that prevented the crash reports from getting symbolicated (I'd love to know why).
Copying the crash reports to the Desktop first, and then dragging them from there to the Organizer got them symbolicated properly.
Very specific case, I know. But thought I'd share just in case.
Here's another issue I have with symbolicatecrash – it won't work with Apps that have spaces in their bundle (i.e. 'Test App.app'). Note I don't think you can have spaces in their name when submitting so you should remove these anyway, but if you already have crashes that need analysing, patch symbolicatecrash (4.3 GM) as such:
240c240
< my $cmd = "mdfind \"kMDItemContentType == com.apple.application-bundle && kMDItemFSName == $exec_name.app\"";
---
> my $cmd = "mdfind \"kMDItemContentType == com.apple.application-bundle && kMDItemFSName == '$exec_name.app'\"";
251c251
< my $cmd = "find \"$archive_path/Products\" -name $exec_name.app";
---
> my $cmd = "find \"$archive_path/Products\" -name \"$exec_name.app\"";
For those using Airbrake, there's a solid response above but it wouldn't work for me without tweaking:
Works for some memory addresses but not others, not sure why...
Create new dir on desktop or wherever
Find archive in question in Xcode organizer
Double tap to reveal in finder
Double tap to show bundle contents
Copy .dSYM file and .app file into new dir
cd into new dir
Run this command: atos -arch armv7 -o 'Vimeo.app'/'Vimeo'
Terminal will enter an interactive move
Paste in memory address and hit enter, it will output method name and line number
Alternatively, enter this command: atos -arch armv7 -o 'Vimeo.app'/'Vimeo'
To get info for one address only
The combination that worked for me was:
Copy the dSYM file into the directory where the crash report was
Unzip the ipa file containing the app ('unzip MyApp.ipa')
Copy the application binary from the resulting exploded payload into the same folder as the crash report and symbol file (Something like "MyApp.app/MyApp")
Import or Re-symbolicate the crash report from within Xcode's organizer
Using atos I wasn't able to resolve the correct symbol information with the addresses and offsets that were in the crash report. When I did this, I see something more meaningful, and it seems to be a legitimate stack trace.
I had to do a lot of hacking of the symbolicatecrash script to get it to run properly.
As far as I can tell, symbolicatecrash right now requires the .app to be in the same directory as the .dsym. It will use the .dsym to locate the .app, but it won't use the dsym to find the symbols.
You should make a copy of your symbolicatecrash before attempting these patches which will make it look in the dsym:
Around line 212 in the getSymbolPathFor_dsymUuid function
212 my #executablePath = grep { -e && ! -d } glob("$dsymdir" . "/Contents/Resources/DWARF/" . $executable);
Around line 265 in the matchesUUID function
265 return 1;
This is simple, after searching a lot i found clear steps to symbolicate whole crash log file.
copy .app , crash_report and DSYM files in a folder.
connect the device with xcode
Then go to window -> select devices -> view device logs
Then select this device, delete all logs .
drag and drop your crash on device log section . it will automatically symbolicate the crash . just right click on report and export it .
happy coding,
Riyaz
I prefer a script that will symbolicate all my crash logs.
Preconditions
Create a folder and put there 4 things:
symbolicatecrash perl script - there are many SO answers that tells it's location
The archive of the build that match the crashes (from Xcode Organizer. simple as Show in Finder and copy) [I don't sure this is necessery]
All the xccrashpoint packages - (from Xcode Organizer. Show in Finder, you may copy all the packages in the directory, or the single xccrashpoint you would like to symbolicate)
Add that short script to the directory:
#!/bin/sh
echo "cleaning old crashes from directory"
rm -P *.crash
rm -P *.xccrashpoint
rm -r allCrashes
echo "removed!"
echo ""
echo "--- START ---"
echo ""
mkdir allCrashes
mkdir symboledCrashes
find `ls -d *.xccrashpoint` -name "*.crash" -print -exec cp {} allCrashes/ \;
cd allCrashes
for crash in *.crash; do
../symbolicatecrash $crash > ../symboledCrashes/V$crash
done
cd ..
echo ""
echo "--- DONE ---"
echo ""
The Script
When you run the script, you'll get 2 directories.
allCrashes - all the crashes from all the xccrashpoint will be there.
symboledCrashes - the same crashes but now with all the symbols.
you DON'T need to clean the directory from old crashes before running the script. it will clean automatically. good luck!
I found out most of proposed alternatives did not work in latest XCode (tested with Xcode 10). For example, I had no luck drag-dropping .crash logs in Xcode -> Organizer -> Device logs -view.
I recommend using Symbolicator tool https://github.com/agentsim/Symbolicator
Git clone Symbolicator repository and compile and run with Xcode
Copy .crash file (ascii file, with stack trace in begging of file) and .xarchive of crashing release to same temporarly folder
Drag and drop .crash file to Symbolicator icon in Dock
In 5-30 secs symbolicated crash file is produced in same folder as .crash and .xarchive are
In order to symbolicate crashes, Spotlight must be able to find the .dSYM file that was generated at the same time the binary you submitted to Apple was. Since it contains the symbol information, you will be out of luck if it isn't available.
I got a bit grumpy about the fact nothing here seems to "just work" so I did some investigating and the result is:
Set up: QuincyKit back end that receives reports. No symbolication set up as I couldn't even begin to figure out what they were suggesting I do to make it work.
The fix: download crash reports from the server online. They're called 'crash' and by default go into the ~/Downloads/ folder. With that in mind, this script will "do the right thing" and the crash reports will go into Xcode (Organizer, device logs) and symbolication will be done.
The script:
#!/bin/bash
# Copy crash reports so that they appear in device logs in Organizer in Xcode
if [ ! -e ~/Downloads/crash ]; then
echo "Download a crash report and save it as $HOME/Downloads/crash before running this script."
exit 1
fi
cd ~/Library/Logs/CrashReporter/MobileDevice/
mkdir -p actx # add crash report to xcode abbreviated
cd actx
datestr=`date "+%Y-%m-%d-%H%M%S"`
mv ~/Downloads/crash "actx-app_"$datestr"_actx.crash"
Things can be automated to where you can drag and drop in Xcode Organizer by doing two things if you do use QuincyKit/PLCR.
Firstly, you have to edit the remote script admin/actionapi.php ~line 202. It doesn't seem to get the timestamp right, so the file ends up with the name 'crash' which Xcode doesn't recognize (it wants something dot crash):
header('Content-Disposition: attachment; filename="crash'.$timestamp.'.crash"');
Secondly, in the iOS side in QuincyKit BWCrashReportTextFormatter.m ~line 176, change #"[TODO]" to #"TODO" to get around the bad characters.
atos is being deprecated so if you are running OSX 10.9 or later you may need to run
xcrun atos
Warning: /usr/bin/atos is moving and will be removed from a future OS
X release. It is now available in the Xcode developer tools to be
invoked via: xcrun atos
I like to use Textwrangler to pinpoint errors in an original app upload binary rejection. (The crash data will be found in your itunesConnect account.) Using Sachin's method above I copy the original.crash to TextWrangler, then copy the symbolicatecrash file I've created to another TextWrangler file. Comparing the two files pinpoints differences. The symbolicatecrash file will have differences which point out the file and line number of problems.
For those looking for a working solution in 2022
Steps to Symbolicating iPhone App Crash Reports
Convert apple provided crash log in .txt format to .crash
Xcode > Window > Devices and simulators
Must select a connected & running ios device. (not a simulator, or offline device)
Select All Logs section, drag & drop the .crash file
Note that, the other solutions having symbolicatecrash is deprecated and its usage shows:
⚠️ symbolicatecrash is deprecated; it will be removed in future releases of Xcode ⚠️
We use Google Crashlytics to supervise crash logs, the feeling is very timely and convenient to use.
Document links:
https://docs.fabric.io/apple/crashlytics/missing-dsyms.html#missing-dsyms
All about Missing dSYMs
Fabric includes a tool to automatically upload your project’s dSYM. The tool is executed through the /run script, which is added to your Run Script Build Phase during the onboarding process. There can be certain situations however, when dSYM uploads fail because of unique project configurations or if you’re using Bitcode in your app. When an upload fails, Crashlytics isn’t able to symbolicate and display crashes, and a “Missing dSYM” alert will appear on your Fabric dashboard.
Missing dSYMs can be manually uploaded following the steps outlined below.
Note:
As an alternative to the automated dSYM upload tool, Fabric provides a command-line tool (upload-symbols)) that can be manually configured to run as part of your project’s build process. See the upload-symbols section below for configuration instructions.
...

Resources