Chris BoardOct 2, 2021 • 5 min read
Crash Catch is supposed to be a crash monitoring service for every developer and every platform, however with the development of the iOS library for iPhone and iPad developers this is proving to be a slightly different story.
The current implementation is already somewhat limited in the sense that the library can't send crashes for unhandled crashes, but only handled crashes, i.e. crashes that are handled by a try/catch block. We did a blog post about this which can be found at https://blog.boardiesitsolutions.com/crash-catch-ios-library-unhandled-exception-handling-or-not/. TLDR of that blog post is there is no easy way to handle unhandled crashes as the crash is encoded (similar to a ReactJS source map) the only difference the developer doesn't have easy access to it and there's no real way for a developer to decode the stack themselves programatically and from what I read, you shouldn't try as the chances are, its not ever going to work reliably.
So I took the annoying decision to not have the ability to report on unhandled crashes, but only handled ones, and crashes that are unhandled can be seen by the report within your apple app store account.
In terms of handled crashes however, there is no direct or official way to get a stack, however I found an opensource library that would get a stack programatically, although it hadn't been updated for a while, I gave it a try and it worked although I did have concerns that an old open source library could potentially break as future iOS updates come along but kept with the library in the hope I might find something more official, but unfortunately didn't.
Recently Apple released iOS 15, I hadn't checked the library so far worked and no users were using the library, but as you might be aware if you've been following my blog posts are on twitter, I am in the process of doing a backend rewrite which brings me to my next problem.
There are some fundamental changes that are happening within the backend, some post fields are renamed but also the way the crash data is sent to the backend has changed, i.e. its changed from form url encoded post data to JSON encoded.
This obviously means some changes to the Crash Catch libraries for each platform. So I was testing my set up with the iOS library against the old engine to prove I had connectivity and that my set up was working, so when I switched the library to use the backend, I knew if it didn't work it was because of the change to the backend, not because of iOS.
However, I found that my test set up didn't work and it is most likely because of iOS 15. The library would initialise perfectly fine with the engine, but when it tries to report the crash the library I used to get the stack crashes and some data is no longer available. This means that I am basically back to square one in that I have no idea how to send stack traces to Crash Catch for iOS devices.
At the moment I have no idea how to submit crashes for stack traces, I had thought about allowing to send crashes but without a stack, but that kind of defeats the purpose of having a crash report, that's probably almost as useless as not having the crash report at all.
I will have another think about other options, but part of the issue is I am not an iOS developer so trying to do clever things is a little tricky when you don't know the language.
I have therefore taking the difficult decision that when the next version of Crash Catch is released, it will no longer have iOS support. You can still create a custom library to use and if you have a way of getting a stack you can submit it, in fact, if you do have a way of implementing a stack, let me know and I'll see if I can implement it into an official library, and if so I'll offer you a lifetime license to Crash Catch.
I've not taken this decision lightly to remove support, this is really something I want to avoid, however, I also don't want to have a half a***d attempt at implementing something that doesn't work properly.
If you have any advice on how I can achieve stack reporting within iOS then please let me know.
If you are developing on other platforms however, you can sign up to a 14 day free trial, no credit card required by visiting https://crashcatch.com.
I want to make it clear however, that this in no way because of the backend rewrite, it is only because of testing the library again as part of the backend rewrite did I discover this was an issue. Currently no users are using iOS crash monitoring so it will currently have no affect on anybody.