HockeyApp
A few weeks ago I blogged about a crash in MealPlan that was found only after I managed to talk a user through sending me a crash log. And in another post I mentioned my frustration at seeing reviews by users saying my app is crashing, when I had no reports from users and no data in iTunes Connect.
Well, that's all over, thanks to HockeyApp.
HockeyApp was suggested to me by a reader who commented on my original post (thanks Jody). I'd heard about it before, I've never liked these sort of 3rd party workarounds to things that should be working by default. But, I needed a solution, so I integrated it into Resume Designer. Integration was easy, and only took a couple of minutes.
I tested the integration by adding a simple crash to the app:
[cc]
int *ptr = (int *)0;
*ptr = 0;
[/cc]
That's a guaranteed write to a bad memory location. I wired this up to a button in the app, launched it, pressed the button, and the app terminated as expected. The next time I launched the app, I saw the QuincyKit alert:
Cool. I clicked Yes, and then went to the website. My crash data was there, instantly, with a full call stack including symbols that pointed at the exact line of code that caused the crash.
I removed the intentional crash (don't forget to do that!), and submitted the app to the App Store for review. I noticed that this time the app was "In Review" longer than any of my apps has ever been. Maybe this is a coincidence, but I expect that it was because now the app was using quite a few additional APIs and was hitting the network for the first time. In either case, it was approved.
The next day, I had my first crash report.
Turns out that I had done something dumb in my app. I forgot to check whether the system could send mail before attempting to bring up the MFMailComposeViewController. This resulted in a crash, and not only did the HockeyApp web UI show the crashing call stack pointing the finger at the bug, but also an exception whose message detailed the problem. The problem was so clear.
Apparently a very small number of users don't have any mail accounts configured. They'd download my app, build a document, and then when they'd attempt to mail it to someone, the app would crash.
So I fixed it, and the update is waiting for review.
Apple should already be doing this for every app.
The infrastructure is there. There's a UI in iTunes Connect for browsing crash reports. There's a mechanism on the phone for capturing and uploading crash reports. But it doesn't work.
HockeyApp does.
HockeyApp is built on QuincyKit, which is the framework that actually does the crash report capturing. HockeyApp is the service that captures the crash reports, symbolicates them and gives you a nice UI for managing them. For $10/month, it wasn't worth building or setting up my own solution for capturing uploaded crash reports.
So anyway, that's my two cents on crash reports. There are other services that do this as well. I only tried HockeyApp, but it delivered.