Maybe you’re doing some testing and notice that some crashes on an iOS app don’t appear in the Crash Analysis UI. I’ll cover a few things that can be done to troubleshoot this issue.
Where to start?
First and foremost, the New Relic iOS agent must be on the first line of
didFinishLaunchingWithOptions and ran on the main thread to ensure proper instrumentation. Starting the call later, on a background thread, or asynchronously can cause unexpected or unstable behavior.
I see crashes in my other crash tool. Why not in New Relic?
iOS apps only allow a single exception handler to be registered. The exception handlers will not be chained together. This means that if another exception handler is included, whichever loads last will “win.” Since the handler can be set asynchronously this can change between app start.
Only one exception handler should be loaded in an iOS app. Any other handlers should be removed or disabled to avoid conflict and missing crash reports.
I’m not using another crash tool. Now what?
Even if another crash tool isn’t being used, it’s still possible another SDK is registering a handler without realizing. One example is the GoogleMobileAds Framework which includes an crash reporter.
You may be able to determine which SDK is registering as the exception handler by setting a Symbolic Breakpoint and setting the Symbol to
NSSetUncaughtExceptionHandler. This should break as soon as the handler is set and give additional details.