We're obsessed about making developing apps easier. We provide visibility, right on your desktop, helping you solve issues faster.
Compatible with iOS, tvOS and most versions of OS X, Crashlytics gives you instant reports right on your desktop.
The Crashlytics SDK uses a multi-step symbolication process to provide progressively higher levels of detail. We start with on-device symbolication. Once a crash report makes it into our system, stack frames are then re-processed against your application's dSYM on our servers. This two-step symbolication process, coupled with our advanced aggregation algorithms, provides the highest information fidelity available.
Processes that crash often end up sustaining considerable damage before the kernel takes action to terminate them. This can result in secondary crashes, where the crash handling code itself is unable to operate correctly and fails. We’ve invested in making our file handling code extremely defensive, so parsing cache files can’t crash unexpectedly.
One of the most abstruse aspects of crash detection is stack unwinding, the seemingly omniscient ability to determine historic code execution that directly lead to the crash. Our SDK determines the calling instruction that works in the case of objc_msgSend and many other methods that conform to Apple’s iOS ABI.
We capture crashes using the lowest level system available on iOS and OS X. The Mach Exception API makes it possible for us to capture every crash, consistently, and without some of the indeterminate behavior of other mechanisms. This also gives us data that much more closely matches what a developer would see in Xcode.
Crashlytics isn't just for uncaught exceptions! Adding a single line of code in your catch block will report caught exceptions (NSError) to Crashlytics for processing, and you are still free to handle the exception however is best for your users. You get the full stack trace and all the same device information we collect for fatal crashes, so you can identify and fix bugs even if your app doesn't crash!
Negligible impact on your app. The Crashlytics SDK was designed with utmost care to
guarantee that it has no negative impact on your app’s performance.
On average, Crashlytics adds less than the size of a single image to the weight of your application.
We don't require linking against any additional frameworks or libraries.
When initialized at start-up, Crashlytics performs only a minimal amount of required work and defers the rest until a few seconds after app startup completes. This delay time is configurable -- we want your app to start as quickly as possible!
Our memory footprint has been carefully tuned to be the minimum necessary.
We care tremendously about the stability of your app and the experience for your users. If for any reason our SDK fails to do what it's suppose to do, it has no impact on your app or to your users.
We use run-time feature detection to ensure compatibility with iOS 6.0 and beyond.
In-process crash reporting is an incredibly delicate affair. One misstep can lead to deadlocks, infinite loops, or unreportable crashes. We've taken great pains to ensure that our SDK is async-safe -- a necessity for safe crash-time execution.
When the device is in airplane mode or experiencing a bad network connection, we will queue the crash reports so you still get all the crashes -- with no impact on your app's performance.