iosfirebaseunity-game-enginecrashlyticsdsym

Firebase Crashlytics: missing OPTIONAL dSYMs


We've moved from fabric.io to Firebase and everything seems to be ok except one thing. We're using Unity 2019.2.6, target platform is iOS, target architecture is "Universal".

For dSYMs uploading I pack dSYMs folder from *.xcarchive to dSYMs.zip and upload it to Firebase via the following code

./upload-symbols -gsp <path_to_plist>/GoogleService-Info.plist -p ios <path_to_dSYMs.zip>/dSYMs.zip

As a result I see the following lines in my terminal:

Successfully submitted symbols for architecture arm64 with UUID <uuid_1> in dSYM: <path_to_unzipped_dsyms>/dSYMs/<myapp>.app.dSYM
Successfully submitted symbols for architecture armv7 with UUID <uuid_2> in dSYM: <path_to_unzipped_dsyms>/dSYMs/<myapp>.app.dSYM
Successfully uploaded Crashlytics symbols

After that I can see desymbolicated crashes in Crashlytics dashboard

But also in Crashlytics dSYMs tab I see the following:

Missing dSYMs 

UID <uuid_3> Version <my_version> Status **Optional** Crash count <count_1>
UID <uuid_4> Version <my_version> Status **Optional** Crash count <count_2>
<...>

So the questions are:

  1. Why these missing dsyms are Optional?

  2. Where do these missing dsyms uuids are come from?

  3. If these uuid_3, uuid_4 are uuids of architectures supported by my app and other than arm64 and armv7, then why they doesn't exsist in dSYMs.zip from *.xcarchive?

(dwarfdump shows only armv7 and arm64 architectures in *.xcarchive dSYMs)

  1. Where can I find all required dsyms for my app?

Solution

  • Firebaser here -

    dSYMs will generate for all the binaries and frameworks in your app, and those will often be marked as "required" dSYMs. Frameworks you're linking in your app will also have dSYMs generated, and those will often be marked as "optional." So, the required and optional dSYMs are coming from different libraries but in the end they're all coming from your app and any frameworks you're linking.

    If you don't upload your optional dSYMs, the behavior you may see (most of the time) is that some of your crashes will not have a few of the stackframes symbolicated; most likely in those cases your app ran through a method or two of a framework linked in your app, and you'll often see it surrounded by symbolicated stackframes from other libraries. But, most of the time the optional dSYMs are not that important to upload to Crashlytics.

    Crashlytics will stop crash reports from coming through to your dashboard until any "required" missing dSYMs that are associated with that crash report are uploaded. Once uploaded, the crashes will be processed and appear on your dashboard. If only optional dSYMs are missing, those crashes will not be stopped from appearing on your dashboard.

    Finally, in terms of locating and uploading your dSYMs, I recommend starting here: https://firebase.google.com/docs/crashlytics/get-deobfuscated-reports?platform=ios. You can use tools like dwarfdump -u </path/to/dSYMs> to check if the dSYMs you've downloaded match the UUIDs of the missing dSYMs in your dashboard.