iOS - How Crashlytics handles missing dSYMSs - crashlytics

I have a question concerning dSYMS and how Crashlytics handles them.
My application contains different targets and the whole project is compiled with bitcode enabled because of the Watchkit App and Watchkit App Extension targets.
I then followed the Missing dSYMs Documentation in order to manually upload my missing dSYMs.
It worked, the Required missing dSYMs are now striped on my dashboard.
But I was wondering, how exactly does it work? This version of my application is on the AppStore for 1 month.
Will I get crash reports only from today, the date I uploaded my dSYMs ?
Should I manually upload for every releases?
I don't really understand the process.

Mike from Fabric here.
dSYMs contain the symbols for your app needed to provide fully symbolicated stack traces. When you build locally in Xcode, the dSYMs are on your local machine and so the Fabric run script build phase can upload them.
With Bitcode enabled, Apple is recompiling your app on their servers which creates new dSYMs. Since it's happening on their services, Fabric has no way to upload these automatically. Apple does provide the dSYMs through Xcode or iTunesConnect. Since we can't access those dSYMs (we would need your Apple developer credentials and we don't want to have them), you do need to get the dSYMs from Apple and upload them to Fabric for each release through Apple or Testflight. You can also use the upload-symbols script to upload them in bulk. The upload-symbols script will also work from CI machines.
When a crash comes into Fabric, we look if we have the dSYM needed to symbolicate the crash. If we don't, we will alert you via the dashboard and your Fabric app settings page. If a crash has a missing dSYM, we will store it for 7 days. If the missing dSYM is not uploaded in this time, then we will drop the crash and not process it. If the missing dSYM is uploaded, then the crash is enqueued to be processed and it can take between a few minutes to a few hours to process and display.
With that said, the best way to handle this is to use the upload-symbols script to get the symbols to us even if there isn't a reported missing dSYM yet, so that we have the symbols when a crash happens. If we have the dSYM when the crash is reported, the crash will be processed within a few seconds (on average).
An alternate approach is to use fastlane's refresh_dsyms command to get the dSYMs and upload them.

Related

Fabric issue App not showing after following instruction

I have carefully followed the instruction from fabric (https://fabric.io/kits/ios/crashlytics/manual-install) to install crashlytics in my app. However I cannot select my app after the instruction since my app is not showing. I have tried most of the solution that has been given in this question here (Crashlytics in iOS won't proceed past "Build Your Project" in Fabric app)
But I still failed to get my app in fabric.
I am using react native to develop my app and using Xcode Version 10.2.1
Fabric/Firebaser here - If you've gone through all the necessary instructions, try cleaning your project first before building and running again to try to get your app up on your dashboard. And if you haven't seen it, here are some instructions specifically for setting up react native apps with Crashlytics: https://www.npmjs.com/package/react-native-fabric#crashlytics-usage). And make sure that if you haven't, set the Debug Information Format to DWARF with dSYM file for both debug and release as specified in that SO post you linked.
You can also see more debug information about Fabric if you set Fabric to debug mode in your initialization statement: https://docs.fabric.io/apple/fabric/advanced-settings/debugging.html. Check to see if the settings requests are being made to Fabric or if there is anything unusual.
If you're still having trouble, reach out to support(at)fabric(dot)io with your app's bundle ID and support will be able to help you out more.

Missing dSYM files in Crashlytics Today extension (Bitcode disabled)

The title of this question basically says it all. I enabled Crashlytics in my Today extension, and for some reasons, the dSYMs are not being uploaded, even though I'm not using Bitcode.
I tried uploading them manually (from ~/Library/Developer/Xcode/Derived Data/Timelines-evxmjnxmpmcivkavmpijzakaxkrp/Build/Products/Debug-iphoneos/Timelines.app.dSYM), but the web interface doesn't really give me any feedback. It shows this screen:
No matter how long I wait, once I refresh the page, it goes back to the 'upload dSYMS' screen.
I think the problem might be that the UUIDs of the missing dSYMs don't really match those that I found locally.
Some notes on my setup:
Xcode 8.2
Today extension running on iOS 10.2
Bitcode is not enabled.
Fabric and Crashlytics integration was done using CocoaPods.
Archive wasn't uploaded to App Store. I'm just testing it locally on my devices. But since the entry for crash reports was created in the web interface, I assume the automatic upload should work anyway.
My question basically is: how exactly can I upload the dSYMs manually? And, second one: how can I make the automatic upload of dSYMs work? Thank you.
It is described here completely ==> fabric.io.
As it said you can download it from activity tab in itunesconnect and then upload it to crashlytics website.

Upload a prebuilt file to Crashlytics

I am trying to automate our build/release process. I am specifically concerned with the Android app at the moment, but I may also need to extend similar support for our iOs app.
Until now, all uploads to Crashlytics have been triggered with crashlyticsUploadDistributionRelease. However we are now building and testing the apk first, then looking to upload that same pre-built apk to Crashlytics. The new process means we need a way of uploading the apk to Crashlytics directly, without having any dependencies on rebuilding or being within the project's directory.
I can see that I can do this through Android Studio by dragging and dropping the apk. Is there a command line tool or script that I can use to automate something similar from our build machine?
This operation is not currently supported. See my comment above for the response from the Crashlytics team

Error uploading to Testflight Unexpected Error parsing IPA

I am trying to upload my app to test flight. When I use the web interface, I get the error
Unexpected error parsing the IPA, TestFlight support has been notified.
And when I try to upload using the desktop app, it tells me that dSYM is not found, lets me go through the whole process, then give the same error at the end.
Built in XCode 4.5 for deployment target 5.0.
I have looked at Error Upload TestFlight : Invalid IPA / dSYM not found and as far as I can see, all my build settings are set to armv7.
Is there anything obvious that I should check/could be missing?
The only 2 external libraries in the project are test flight sdk and flurry.
I've had the same problem when trying to upload .ipa files. The problem is, that .ipa files don't contain the symbolication information anymore.
Try exporting your app as Xcode Archive instead of building the .ipa for distribution (thats one of the options when you choose 'Distribute...' in the Xcode organizer). This archive contains the necessary dSYM files (if not, you have to check your build settings). If you drop this .xcarchive into the TestFlight desktop client, TestFlight will build the .ipa for you and the upload it.
Make sure to use the same Provisioning Profiles for signing the .ipa in the TestFlight client that you have used when building the archive in Xcode!
Or you can just choose to Show the TestFlight Co-pilot in the menu bar (activate in the settings), the it will automatically detect your Archive.

Using Testflight does not receive crashes

I've installed Testflight (1.2 B3) as stated in the documentation. Builds are uploading and updating fine. I can see sessions (mostly anonymous :/), I receive the logs (TFLog) - but I do not receive any crash reports. I even introduced a crash-on-event (a method not found thing) - but theres is nothing on Testflight about it.
Provisioning is via a developer profile which embeds several devices.
The problem occurs on iOS6 and iOS5 / iPhone5 and iPad3. The is being build against iOS6.
Any ideas?
UPDATE
I've tested several other frameworks and ways to receive crash reports. Nothing worked so I suspect something in my code (obviously). Are there any other switches that XCode 4.5.1 might have enabled and that way disable any error reporting during a "production environment" like setup?
UPDATE 2
As of now we're using Testflight only for distribution of beta versions and switched to Crashlytics for crash reporting. It's a bit more streamlined and fetches most crashes.
I also do not get any crash reports via TestFlight. This is what the TestFlight people told me:
Our team is currently looking into an issue associated with auto
versioning of the app when uploaded and SDK data not reporting
properly. Looking at the URL you provided it looks like the build
version is not changing before uploading the app to TestFlight and our
auto versioning implementation is causing an issue with general SDK
data reporting.
I will share this with our team and we will contact you when we have
an update available.
I tried to update the build version to avoid auto-versioning, but it did not help me. But maybe this issue is hitting someone else.
Testflight did not satisfy our needs to log crashes. That is why we skipped to Crashlytics (as I said in the original post). The issues with Testflight seem not to be resolved. We still do use it for distribution, that is what it's good at.