Crashlytics uploading a ipa file does not upload DSYM file - ios

I'm trying to upload a dSYM file to Crashlytics BETAS separately as we are currently in our build script only uploading the ipa file using Crashlytics.framework/submit.
To upload a dlsym I'm trying to use Crashlytics.framework/uploadDSYM. It is constantly failing and giving me the following error.
warning: using uploadDSYM directly to upload dSYMs is not supported.
uploadDSYM will be deprecated in a future release
Crashlytics: Failed to Detect Build Environment
BUILT_PRODUCTS_DIR value not found in environment
Since it won't work what can I use to upload my DSYM every time, without actually having to manually upload it every time.
I couldn't find any documentation on this function on how to use it and what parameters I have to use. Currently I am using the following code to try to upload my DSYM to crashlytics BETAS
Path/to/Crashltics.framework/uploadDSYM $API_KEY $BUILD_SECRET -p ios /Path/to/DSYM

Mike from Fabric here. The submit script for uploading versions to Beta is distinct from any upload process for dSYMs. Using the upload-symbols script is a good way to automate dSYM uploads:
/Applications/Fabric.app/Contents/MacOS/upload-symbols -a <api-key> -p ios /Users/YourUserName/PathToDsymLocation

Related

Firebase Crashlytics: Upload dSYMs show warning & Firebase console show dSYM required (iOS)

I have uploaded dSYMs to Firebase with upload-symbols command which is downloaded from AppStore Connect. Most of the dSYMs is uploaded successfully but it shows warnings for few dSYMs. Bitcode is enabled in my app & using 'DWARF with dSYM File' for 'Debug information format' in build settings.
I am getting the following warning for a few dSYMs:
warning: Crashlytics found a dSYM with hidden symbols at path: /Users/name/Downloads/appDsyms/c362ba63-3100-3a48-9040-72af1fe519e3.dSYM. This will result in hidden stack frames for that library in Crashlytics. This can occur if you have bitcode enabled in your app. If you have chosen to upload the symbols for your app to Apple, make sure to download the symbolicated dSYMs from Apple through Xcode or iTunes Connect. If you have chosen NOT to upload symbols to Apple, you can deobfuscate your dSYMs manually with the BCSymbolMaps found within the archive of your application using the following command: dsymutil --symbol-map <BCSymbolFile> <dSYMFileWithHiddenSymbols>.This will perform an in-place deobfuscation of the provided dSYM.To silence this warning, pass the --skip-dsym-validation flag to upload-symbols / run.
Used command for uploading dSYMs:
/ProjectPath/Pods/FirebaseCrashlytics/upload-symbols -gsp /ProjectPath/GoogleService-Info.plist -p ios /DsymsPath/appDsyms
Firebase console is showing dSYM required:
Firebase console is showing dSYM required
In archive file you will find folder "BCSymbolMaps", copy it anywhere
Copy your c362ba63-3100-3a48-9040-72af1fe519e3.dSYM to c362ba63-3100-3a48-9040-72af1fe519e3.zip.
In this zip file you will find file \Content\Resources\c362ba63-3100-3a48-9040-72af1fe519e3.plist
In this file you need key "DBGOriginalUUID". This key is file name for needed from BCSymbolMaps folder. (Let it be XXXXXXX. So you need find file XXXXXXX.bcsymbolmap in folder BCSymbolMaps which we got from xcarchive.)
Now we have everything for decoding our dSYM file. Just run next
dsymutil --symbol-map /Users/name/Downloads/appDsyms/XXXXXXX.bcsymbolmap /Users/name/Downloads/appDsyms/c362ba63-3100-3a48-9040-72af1fe519e3.dSYM
Now you can repeat sending dSYMs to server.

Firebase Upload missing required dSYMs Not Working

Currently, I am facing issues to upload dSYMs through the new uploader script.
/path/to/Fabric/upload-symbols -gsp /path/to/GoogleService-Info.plist -p <platform> /path/to/dSYMs
I am getting success response by uploading the dSYMs
But no change on firebase console.
I have already checked the following thread:
https://github.com/firebase/firebase-ios-sdk/issues/5327
Please let me know if anyone having a solution...
Don't know what is going on in the Firebase Crashlytics.
But after 1 Day/24 Hours the dSYMs processed and now they are showing (Optional) in the same build.
Update
I have again uploaded the dSYMs today, and it uploaded quickly. Maybe some issues are there with the Firebase Crashlytics upload process!
https://github.com/firebase/firebase-ios-sdk/pull/5228
If this is a migrated app from Fabric, then you need to follow these directions,
"Important: If you're working with an app that you previously linked from Fabric to Firebase Crashlytics, pass in your Fabric API Key to run the upload symbols script. That is, in the following options to run the script, use -a fabric-api-key instead of -gsp path/to/GoogleService-Info.plist."
If this is not a migrated app, and you're seeing that the correct missing UUID is being uploaded, but you're still getting the missing dSYM error, then you need to write into Firebase Support so they can get your debug logs and check your session ID.
I had the same problem. What I found:
You should double-check if you can find this specific DSYM in your XCode archive. For this, open XCode->Organizer->Show In Finder-> DSYMs in bundle: try to find specific DSYM by ID from the dSYMS error Firebase panel. If any you can find with the same ID, you have to upload manually.
On my practice, the delay is usually several mins, max 24 hours.
Sometimes, I couldn’t find the DSYM IDs listed on Firebase in XCode archive or from AppStore downloads. What I found, that Firebase catches all distributed versions of the app. That’s why you cannot find them on AppStore if it is not on TestFlight yet. You probably can find them in your alpha archives.
However, this is my guessing.
I was wondering if anyone from Firebase guys can give more info on this.
install crashlytics via POD 'Firebase/Crashlytics'.
download DSYMS from app store.
located here
--> myapps --> select your app --> testflight --> select latest build --> Build Metadata --> Download dSYM.
now run this script using Terminal directly
YOUR PROJECT POD FOLDER PATH /FirebaseCrashlytics/upload-symbols -gsp /YOUR PROJECT/GoogleService-Info.plist -p ios /Users/username/Downloads/appDsyms
more in detail step.
Open terminal, drag and drop 3 files on terminal on this order:
A--> drag an drop: "upload-symbols" which can be found in /project/Pods/FirebaseCrashlytics/upload-symbols
B--> write " -gsp "
C--> drag an drop: "GoogleService-Info.plist" which can be found in /project/GoogleService-Info.plist
D--> write " -p ios "
E--> drag an drop: "appDsyms" folder (unarchived, zip file might not work!) which usually is in Download folder /Users/username/Downloads/appDsyms
F--> Press Enter
In terminal the complete command should include -gsp and -p ios, full command looks like this: A -gsp C -p ios E
/project/Pods/FirebaseCrashlytics/upload-symbols -gsp /project/GoogleService-Info.plist -p ios /Users/username/Downloads/appDsyms
it might take some time to reflact on google firebase 24 hours.
Currently, it is taking (around) 24 hr to process the dSYMs (specially, if dSYM size is large), but it should improve soon.
Most Impacted Developers:
Fabric legacy only, not migrated customers - should no see impact
Fabric legacy SDK, migrated to Firebase - impacted
Fabric legacy SDK, onboarded via Firebase - impacted
Firebase SDK (currently in beta) - no impact
It is suspected that the dsym downloaded from Apple has the incorrect bundle id. Apple is setting com.apple.xcode.dsym. (e.g. com.apple.xcode.dsym.Bingo Blast).
1- As a temporary workaround, if the developer after downloading the dsym from Apple, converted all occurrences of the incorrect bundle string with the correct bundle id (e.g. com.redhotlabs.bingo), this should allow the dsym to be ingested correctly.
See an example shell script that developers could use replacing the and with the appropriate values.
export BUNDLE_ID=''
export DSYM_PATH=''
sed -i '' -e "s/>com.apple.xcode.dsym.*\$BUNDLE_ID\
2- Try not test-crash the app or release a potentially crashy app to users for at least 10 minutes after upload-symbols has completed and the mapping file is uploaded.
3- I would recommend to upgrade to Firebase SDK (currently in beta) to avoid this issue all to gather.

New Firebase Crashlytics SDK missing dSYM UUID

I am trying to upgrade Fabric Crashlytics SDK to New Firebase Crashlytics SDK. I've followed New Firebase Crashlytics instructions.
The problem is that given Firebase Crashlytics dsym file's UUID does not match with archive dsym files UUIDs. I've downloaded dsyms from Appstore connect(Activity) and it doesn't match too.
After that I decided to upload dsyms with Fastlane. So many dsyms are uploaded but Firebase Crashlytics console still says me to upload missing dsym files.
I tried to upload with Firebase CLI and Fastlane.
I'm busy with that problem since tree days. Somebody can help me ?
I had the same problem, the fix was uploading the downloaded DSYMs from Appstore connect using Terminal
Open your terminal then use the following line (make sure to replace [xxx Path] with the right paths:
[Project Path]/Pods/FirebaseCrashlytics/upload-symbols -gsp [Google Service Plist Path]/GoogleService-Info.plist -p ios [DSYMs file Path]/appDsyms.zip
Example
/Users/soufian/Desktop/Projects/yourProject/Pods/FirebaseCrashlytics/upload-symbols -gsp /Users/soufian/Desktop/Projects/yourProject/yourProjectSubFolder/GoogleService-Info.plist -p ios /Users/soufian/Downloads/appDsyms.zip
Make sure there is a space after -gsp, in Firebase documentation there isn't.
Please reach out at 'support#fabric.io' and include your dsym (zip), app bundle id and I can dig into this with you.

Missing dSYM files for build in fabric. Gitlab uploads builds to Crashlytics

Simply we have built the app and uploaded to Crashlytics. In case when issue arise we try to check what went wrong but we can't because:
How can we upload missing dsym files? Where can we get it from?
OR
What should we change in project to upload dsyms automatically.
How can we upload missing dsym files? Where can we get it from?
dSYMs files for each archive are found locally on your build machine at the directory /Library/Developer/Xcode/Archives
Right click on your xcarchive file then Show Package Content, you will find your dSYMs directory there, you will have to zip them and upload them to Fabric manually.
You can also get the dSYMs for a specific build from your AppStoreConnect activity page.
What should we change in project to upload dsyms automatically.
By default Fabric dSYMs are uploaded automatically after the archive through the Fabric /run script added to Build Phases in the beginning of Fabric integration.
Though it might fail sometimes for different reasons. Like having the Bitcode enabled
You can also use different tools for build automation like Fastlane which provides an upload dSYMs command.

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

Resources