Issue detection — Overview
Besides the reports your users file and the ones you file from code, Bugsee files reports on its own when it detects a problem in the running app. Each detector is independent: turn any of them on or off without affecting the others or the rest of the SDK.
Crash and exit detection are on by default. The other detectors are off until you enable them.
Detectors
| Detector | What it observes | Option key | BugseeOptions property | Default |
|---|---|---|---|---|
| Crashes | Fatal signals, Mach exceptions, uncaught Objective-C and C++ exceptions. Reported on the next launch | BugseeOptionDetectAndReportCrash | crashReport | On |
| Early crashes | A launch that ended before the app became active. The next launch sends the waiting reports before launch returns | BugseeOptionDetectAndReportEarlyCrash | appLaunchCrashDetection | On |
| Exits | Out-of-memory terminations in the foreground and in the background, inferred across launches | BugseeOptionDetectAndReportExit | detectAppExit | On |
| Crash Report Extension | On iOS 27 and later, the launch watchdog (0x8badf00d) and memory-limit (jetsam) terminations, with the stack of every thread | None: added as an extension target | — | Not installed |
| Hangs | The main thread not responding for 3, 5 or 10 seconds | BugseeOptionDetectAndReportHang | — | Off |
| Main-thread misuse | Disk reads and writes, NSUserDefaults synchronization and synchronous network requests made on the main thread | BugseeOptionDetectAndReportMainThreadMisuse | — | Off |
| HTTP errors | HTTP responses with a 5xx status | BugseeOptionDetectAndReportHttpErrors | — | Off |
| Anomaly | Spans of completed performance transactions that take far longer than usual | BugseeOptionDetectAndReportAnomaly | — | Off |
| Frustration | Rage taps, taps followed by an error, network requests that never complete, a frozen UI during interaction | BugseeOptionDetectFrustration | — | Off |
Enabling a detector
Every detector is controlled by a BugseeOption* key, passed at launch. Options that have a BugseeOptions property can be set through it; the others are set by key, either in the launch dictionary or with updateLaunchOptions: on a BugseeOptions object.
- Objective-C
- Swift
BugseeOptions *options = [BugseeOptions defaultOptions];
options.detectAppExit = YES; // has a property
// Detectors without a property are set by key:
[options updateLaunchOptions:@{
BugseeOptionDetectAndReportHang : @YES,
BugseeOptionDetectAndReportHttpErrors : @YES,
}];
[Bugsee launchWithToken:@"<your_app_token>" options:options];
let options = BugseeOptions.default()
options.detectAppExit = true // has a property
// Detectors without a property are set by key:
options.updateLaunch([
BugseeOptionDetectAndReportHang: true,
BugseeOptionDetectAndReportHttpErrors: true,
])
Bugsee.launch(token: "<your_app_token>", options: options)
The same keys work in the dictionary launch:
- Objective-C
- Swift
[Bugsee launchWithToken:@"<your_app_token>"
andOptions:@{ BugseeOptionDetectAndReportHang : @YES }];
Bugsee.launch(token: "<your_app_token>",
dictionaryOptions: [BugseeOptionDetectAndReportHang: true])
See Configuration for every launch option.
What the reports look like
Crashes, foreground out-of-memory exits and foreground watchdog terminations are filed as crash reports. Everything else a detector finds — hangs, background out-of-memory exits, main-thread misuse, HTTP errors, anomalies, frustration — is filed as an error report, a non-fatal issue that does not count against the crash rate.
A report filed by a detector carries the same context as any other report: the video, console logs, network events and traces recorded before it. Crash and exit reports, filed on the next launch, carry the recording of the run that ended.
Severity comes from BugseeOptionReportingDefaultCrashPriority and BugseeOptionReportingDefaultErrorPriority (HTTP errors are always filed as High). Crashes and exits take the priorities of the run that ended, not those of the launch that files them.
Each live detector reports a given problem once per session — per call site, endpoint or element, as described on its page — so a problem that repeats does not flood the dashboard.
No detector files reports on the simulator or on Mac Catalyst: run on a device. While a debugger is attached, Bugsee installs no crash handler and does not track the run for abnormal exits, since the debugger takes the signals and stopping the app from Xcode looks like a kill.
Detector reports reach your report handler like any other report. To change what a detector files, inspect type and the report's fields there.