Which types of crashes can be collected on iOS and OS X

Introduction

This article details what kind of crashes our SDKs are able to collect, which it can't and other major differentations to the platforms system default process.

This document contains the following sections:

iOS

Our iOS crash reporting SDK is based on then open source PLCrashReporter library from Plausible Labs which provides the best available crash reporting functionality on iOS available today. It is developed over several years with special care on making it safe and reliable.

HockeySDK coordinates the crash reports with the same safe implementation rules and allows to process further scenarios to make these crash reports available to the developer.

Possible

Not possible:

  • Crashes that are actually kills by the iOS system, and therefor can not be detected:

    • Crashes caused by low memory situations

    A low memory warning is generated when the app was killed by the system because there was not enough memory to satisfy the app’s demands. - Crashes caused by timing issues (_Watchdog timeouts_)

    A watchdog timeout is generated when an app takes too long to launch, terminate, or respond to system events.

  • User force quit an app

    (this is a kill invoked by the user)

Other differences:

  • iTunes connect only collects crashes from devices, where users agreed on a dialog saying:

    Help Apple improve its product and services by automatically sending daily diagnostics and usage data. Diagnostic data may include location information.

    Either defined when setting up the device or since iOS 5 available in the settings app under: Settings > General > About > Diagnostics & Usage

  • iTunes connect only provides crash reports for apps distributed via the App Store

  • iTunes connect only shows crash types it collected above a unknown treshhold

  • iTunes connect only shows crashes after some unknown time (can be weeks)

  • iTunes connect crash overview can only be updated once a day

  • iTunes connect crash reports are not symbolicated showing line numbers

  • HockeyApp receives crashes on the next startup of the app, after the user agrees sending the data (if not set to send automatically)

In general line numbers can be off by 1-2 lines. If you tried to provoke a crash via abort() the resulting line number will be way off, which is normal.

Mac

Our Mac OS X crash reporting SDK is also based on then open source PLCrashReporter library from Plausible Labs which provides the best available crash reporting functionality on iOS available today. It is developed over several years with special care on making it safe and reliable.

HockeySDK coordinates the crash reports with the same safe implementation rules and allows to process further scenarios to make these crash reports available to the developer.

Possible

  • Crashes caused by signals
  • Crashes caused by exceptions

    NOTE: not all exceptions cause a crash on Mac OS X! (including Last Exception Backtrace, not always present in iOS generated crash reports)

  • Crashes that happen during startup

  • Crashes for any non App Store app version

Not possible:

  • User force quit an app

    (this is a kill invoked by the user)

Other differences:

  • iTunes connect only collects crashes from Macs, where users agreed on a dialog saying:

    Help Apple improve its product and services by automatically sending daily diagnostics and usage data. Diagnostic data may include location information.

    Either defined when setting up the device or since iOS 5 available in the System Preferences app under: System Preferences > Security & Privacy > Privacy > Diagnostics & Usage

  • iTunes connect only provides crash reports for apps distributed via the App Store

  • iTunes connect only shows crash types it collected above a unknown treshhold

  • iTunes connect only shows crashes after some unknown time (can be weeks)

  • iTunes connect crash overview can only be updated once a day

  • iTuens connect crash reports are not symbolicated showing line numbers

  • HockeyApp receives crashes on the next startup of the app, after the user agrees sending the data (if not set to send automatically)

In general line numbers can be off by 1-2 lines. If you tried to provoke a crash via abort() the resulting line number will be way off, which is normal.