Fabric missing dsym for an iOS app - ios

I'm using crashlytics for crash reporting.
In the last release I'm seeing a lot of dsym missing warnings. I have tried to upload the dsym manually with no luck.
Questions
Is the number of crashes affected by missing dsym?
Is number
of crash-free users and crash-free sessions affected by missing
dsym?
I'm trying to decide whether I should pause my releases until I troubleshoot this, or whether the stability report is accurate even though the dsym is missing

Here is the answer I got from Fabric Support
Thanks for reaching out. Crashes with missing dSYMS will not be counted in the number of crashes reported by an app. This will also affect your crash-free users and crash-free session percentage"

Yes, you'll still get crash reports without dsyms they'll just live in this "unsymbolicated crash" page. EDIT: according to fabric customer service (accepted answer) these crashes will also not count towards the crash-free %s
A side note: But for symbolicated crashes, one of the interesting things about Fabric is that the crash count will always be "accurate", but you won't actually get the crash report itself until the next time the user opens your app and its able to send to the server. So it's common for the overview you see on Latest Release or the home page to say XXX crashes, but when you actually click into the release itself you don't see nearly as many. It just means that the user crashed and Crashlytics was able to log the crash itself, but not send the crash logs yet.
Side note but if you want to make sure you're getting dSYM generated you should go Build Settings > Build Options > Debug Information Format, and make sure DWARF with dSYM is enabled. The run script Fabric makes you add makes sure it's automatically sent

Related

How to verify dSYMs are uploaded to Crashlytics

I use Fabric Crashlytics. They recently deprecated uploading dSYMs over the web interface. I have the build phase setup and it seems to work fine.
Still, I'm a bit anxious every time I publish a new build as one can't be 100% sure the dSYMs got uploaded correctly until there is a crash. And I don't know of an easy way of causing a crash in a production build (if I did I would have fixed it).
I know I'd get a "missing dSYMs" warning if there was a crash. But as far as I know, I can't get an email notification about that (can I?) - so, I'd not know about that crash unless I check the console every day.
Is there a way to list the uploaded dSYMs or verify that Crashlytics has dSYMs for build XY?
Thanks a bunch!
Yes, you can make sure the dSYM is available or not for the particular build by verifying it in the below tabs
itunesConnect/MyApps/yourApp/Activity tab/your build version
Please find the image below for your reference

Will Crashlytics Track User Crashes if it is Complaining About my Missing dSYMs

Will Crashlytics Track User Crashes if it is Complaining About my Missing dSYMs?
I believe my issue is that "$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)" for XCODE 10 might not know where to look since I have a dev and prod info.plist file, but Firebase Crashlytics website doesn't say much about this.
If you don’t upload the dSYMs, it will captures the crashes, but it doesn’t include them in the standard reporting. But you can retroactively upload the missing dSYMs and the crash reports will suddenly become visible/usable.
For previous releases, you might check https://appstoreconnect.apple.com, as there’s a link to download the dSYMs there, which you can then upload to Crashlytics. I’d suggest referring to the Crashlytics document titled Get deobfuscated crash reports for the process of making sure you get these dSYMs uploaded in the future.
Also see TN2151: Understanding and Analyzing Application Crash Reports for broader discussion of dSYMs. Also see WWDC 2018 video Understanding Crashes and Crash Logs.

iOS Crashlytics crash log shows _hidden even after upload the bitcode dSYM to fabric

I've been investigating the crash in our app for quite a while, and I still can't figure out why Crashlytics cannot symbolicate some of the crashes (3 to be specific). These are actually the current major crashes of the app and we are desperately looking for any hint possible.
Our app has bitcode enabled and opt-in uploading dSYM to Apple. I tried to read through the Crashlytics doc All about Missing dSYMs, manually download the dSYM zip from iTunesConnect, uploaded it to fabric. The "hidden" crash number keeps growing afterwards, and the problem is, we never get a missing dSYM warning in fabric and it's not showing the dSYM missing in the fabric settings page for the app build we are trying to investigate.
The stack trace is like this:
Crash stack trace
Any helps and suggestions would be very much appreciated! Thanks!
I can't tell you why the symbolication failed. But from looking at your crash report, a few things come into my mind, maybe they can help you somehow.
The crash happens inside a closure which uses UIWebView somehow. After doing something with javascript, resources are being freed, this is then when the crash happens. You can check the last code called here:
https://github.com/WebKit/webkit/blob/f43689c3ed50cd00bf76d5731983046b988e6efa/Source/WebCore/loader/cache/CachedResource.cpp
Nothing fancy going on there.
My guess is, that input vars of the closure are freed to early. Even if you are blind, without a working symbolication, you could try to find closures initiating JavaScript calls and check for this conditions e.g. [unowned self] in or similar and try pass them in owned. This could obviously lead to leaking memory, but you can test this before releasing.

Crashlytics - Do we need to pay for commercial app analysis

Question #1:
I am using Crashlytics for one of my commercial iOS Apps. Their service seems very helpful. I wonder if there is any Legal issue of using their services for commercial apps? Is there any limitations for using Crashlytics?
Question #2:
I need to upload .dsym file in their server to get crashlogs symbolicated. Is there any privacy issue. Is it possible to get my code (or any info) back by reverse engineering when they have .dsym file.
Question #3
Sometime some crashes are not showing in the crashlytics dashboard. Is it necessary to be online when crash happens to get crashlog in dashboard? Don't Crashlytics keep logs trace when offline and send logs back to the server when device become online? Any idea how they work?
Mike from Fabric here, but I'm not a lawyer.
1) Fabric and Crashlytics is used in many commercial apps, including our own. There aren't limitations to using Fabric. You can find the Fabric terms of service here.
2) The dSYM is what let's us or any other crash reporter symbolicate the crash report as it contains the symbols that map back to your app's source. None of your source code is uploaded. From Apple's own documentation:
As the compiler translates your source code into machine code, it also
generates debug symbols which map each machine instruction in the
compiled binary back to the line of source code from which it
originated. Depending on the Debug Information Format
(DEBUG_INFORMATION_FORMAT) build setting, these debug symbols are
stored inside the binary or in a companion Debug Symbol (dSYM) file.
The Debug Symbol file and application binary are tied together on a
per-build-basis by the build UUID. A new UUID is generated for each
build of your application and uniquely identifies that build. Even if
a functionally-identical executable is rebuilt from the same source
code, with the same compiler settings, it will have a different build
UUID.
3) Crashes are caught regardless if the app is connected to a network or not. However, crashes are only sent on relaunch of the app and would then be processed.
One thing to note is that if you're testing in the Simulator or with your device connected to Xcode will cause Xcode's debugger to capture the crash instead of us.
Further, if the dSYM hasn't been uploaded, then we're unable to process the crash report and we'll alert you in the Crashlytics dashboard of the missing dSYMs so that you can upload them.

Only crashing on Testflight

We're using TestFlight to send out pilots of our app.
There's a part of the app that is crashing, and we had a lot of trouble reproducing the crash. The code their is fairly simple.
It turns out that the users who got the App via TestFlight get the crash, while if you build the app and install it using the IDE it doesn't crash!
Anyone have ideas about what might be causing this?
Any ideas for workarounds? We don't want to stop using TestFlight.
Make sure to build your app in Release Mode not in Debug. The app may only crash when in Release.
The first thing I'd try is to map the crash stack trace to function names in your application. This may yield useful insight into the nature of the crash:
As soon as a crash is reported request the crash log. This can be obtained through Xcode's organizer or if that's not an option it can be screen-captured from the iPhone's Settings -> General -> About -> Diagnostics & Usage -> Diagnostic & Usage Data. Scroll to the app name or the section LatestCrash-AppName.plist.
Although you can in theory symbolicate a crash, I find the procedure described below a foolproof way to get symbols from the stack. Convert all stack addresses for the crashing thread into method names.
Optionally request the iDevice syslog. This may include assertion failure messages which are also invaluable. Note that this should be done as quickly as possible as the syslog only holds so many entries before they get dropped. You can use the Organizer or the cmd line idevicesyslog to obtain this.
Manual symbolication:
This will work as long as your builds have debug information.
Obtain the _exact_same_ .ipa that crashed. If you didn't save it you can download it from the device by using iFunBox or the cmd line ideviceinstaller utility.
Unzip the .ipa
Run the following command on the executable file (Payload/AppName.app/AppName):
otool -tv AppName.app | c++filt > listing.asm
Wait while the previous step completes (may take a while). The generated listing.asm file will be several megabytes long.
Using an editor that can handle large files search listing.asm for the addresses listed in the stack trace. Note that the addresses may be a few bytes off (usually pointing 3 or so bytes ahead). Also, addresses that aren't found in listing.asm indicate addresses in iOS libraries. Ignore those for now.
Of course, if you're able to symbolicate, you can skip this procedure.
Good luck debugging!
We had a similar problem. The issue with us was static libraries. When we built the app from scratch and went to testflight, it was crashing but from the IDE it wasn't. The crash was because the static libraries did not get included when doing a build, but was getting included if I connected the iPad direct and used XCode to install.
A simple test will prove this:-
1.) Instead of building from IDE, create a .app file and then load it via iTunes and check if you are getting the crash.
We worked around this by creating the .iPA manually, that is creating the .app then making a Payload folder and putting the .app in it along with the info.plist.
Then things began to work in Testflight as well.

Resources