Crash reporting is an important part of software development. Granted, we developers prefer if our software doesn’t crash or have bugs, but so long as software development is a human endeavor, imperfection will be part of it. The difference is how you respond to and handle such situations.
Apple has actually done well at making crashes generate useful reports. Send the report to the developer, and the developer should be able to decipher it and glean much information towards figuring out where and why things crashed so they can fix it.
Unfortunately one problem that’s been plaguing Apple’s crash reports for a while is a lack of version information. That is, the crash log should contain the version of the application that crashed. This is useful in case say there was a bug in version 1.0 and you fixed it in 1.0.1… if the developer sees a crash report from 1.0 they can simply tell the user “That was fixed in 1.0.1, just download the update.”. Of course, if they see the crash happening in 1.0.1, then further investigation is warranted.
So that crash logs, both on Mac OS X and iOS have been lacking in version information… this is problematic. My understanding is Apple is aware of this problem and it’s been around for some time, but it’s curious why it hasn’t been fixed.
I can’t wait around for Apple to fix it. I need a solution now so any crash reports from my app come back in a useful state.
I’ve seen some things offered up as possible workarounds, but alas, nothing is really solid.
While searching, I did discover numerous crash report alternatives:
- PLCrashReporter, which appears to be not only sound, but somewhat the standard.
- The author’s blog posting about how difficult such an endeavor is.
- Some nice sample code on integrating into an iOS app using a simple email based solution.
- QuincyKit, which is based upon PLCrashReporter but has been extended to do a whole lot more
I also found a nice blog posting that discussed numerous other alternatives. But it looks like PLCrashReporter is the standard.
I spent my weekend hacking PLCrashReporter into an app to see how it worked and what it did. I really dig what it provides, the information is gathers, what it can produce. It’s quite cool. I also like that it is data-based instead of file-based, so you can do things like what QuincyKit does. I think down the line an approach like QuincyKit would be a good way to go, or I could shell out the money for HockeyApp… but I’m not quite ready for that just yet.
Without question, PLCrashReporter worked wonderfully. It’s a simple client API and does a lot of useful things. Unfortunately, I could not get the crash log to symbolicate. Sure, I could do a little manual work with atos, but it’s much nicer to have full symbolication. I can’t understand why it wasn’t working. More interestingly, the OS would generate its own crash logs and I noticed the 2 logs didn’t quite match. Very curious.
Alas, I don’t have the time right now to look into these post-Apple solutions. I’m just going to have to count on Apple’s solutions, since of course those work… they just lack a critical bit of information in terms of the version number.
Like I said… software development is a human endeavor. It won’t ever be perfect. 🙂