Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions docs/ai/agent-skills/sdk/ios/v7/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ find . -name "AppDelegate.swift" -o -name "AppDelegate.m" 2>/dev/null | head -3
grep -r "@main" --include="*.swift" 2>/dev/null | head -3

# 6.x call sites that will not compile against 7.x
grep -rnE "showReportController|showFeedbackController|setDefaultFeedbackGreeting|didReceiveNewFeedback|setView:.*asHidden|setView\(.*asHidden|addSecureRect\b|removeSecureRect\b|removeAllSecureRects|getAllSecureRects|isViewHidden|registerEvent|traceKey|registerNetworkEvent|removeNetworkEventFilter|setEmail|getEmail|clearEmail|getDeviceId|logAssert|hideKeyboard|testExceptionCrash|testSignalCrash|setDefaultCrashPriority|setDefaultErrorPriority|setDefaultBugPriority|Bugsee\.pause|Bugsee\.resume|\[Bugsee pause\]|\[Bugsee resume\]" \
grep -rnE "showReportController|showFeedbackController|setDefaultFeedbackGreeting|didReceiveNewFeedback|setView:.*asHidden|setView\(.*asHidden|addSecureRect\b|removeSecureRect\b|removeAllSecureRects|getAllSecureRects|isViewHidden|registerEvent|traceKey|registerNetworkEvent|removeNetworkEventFilter|setEmail|getEmail|clearEmail|getDeviceId|logAssert|hideKeyboard|testExceptionCrash|testSignalCrash|BugseeExceptionLoggingOptions|BugseeMergingRulesSkipFramesKey|logException.*options:|logError:[^;]*labels:|logError\(error:.*labels:|setDefaultCrashPriority|setDefaultErrorPriority|setDefaultBugPriority|Bugsee\.pause|Bugsee\.resume|\[Bugsee pause\]|\[Bugsee resume\]" \
--include="*.swift" --include="*.m" --include="*.mm" . 2>/dev/null | grep -v "/Pods/" | head -40

# Raw option-key strings — the ONLY silent break in 7.x
Expand Down Expand Up @@ -171,7 +171,10 @@ Raising the deployment target to iOS 15 is a prerequisite for all of the above.
| `testExceptionCrash` / `testSignalCrash` | `testCrash` |
| `deleteCollectedDataOnDevice:` | `deleteCollectedDataOnDevice:completion:` |
| `uploadWithSummary:…:includeVideo:` | `uploadWithSummary:description:severity:labels:` |
| `logError:labels:includeVideo:` | `logError:labels:` |
| `logError:labels:includeVideo:` / `logError:labels:` | `logError:`; labels via `addLabels:` on the report in `bugseeAttachmentsForReport:` |
| `logException:options:completion:` | `logException:completion:` / `logException:domain:skipFrames:completion:` |
| `logException:reason:options:completion:` | `logException:reason:completion:` / `logException:reason:domain:skipFrames:completion:` |
| `BugseeExceptionLoggingOptions` (`exceptionDomain`, `mergingRules[BugseeMergingRulesSkipFramesKey]`, `labels`) | `domain:` / `skipFrames:` parameters of `logException`; labels via `addLabels:` on the report in `bugseeAttachmentsForReport:` (applies to every error report, not one call); `includeVideo` has no replacement |
| Swift `Bugsee.launch(token:options:)` _(dictionary)_ | Swift `Bugsee.launch(token:dictionaryOptions:)` |
| Swift `Bugsee.relaunch(options:)` _(dictionary)_ | Swift `Bugsee.relaunch(dictionaryOptions:)` |
| Swift `Bugsee.uploadReport(_:)` | Swift `Bugsee.upload(_:)` |
Expand All @@ -189,7 +192,7 @@ Raising the deployment target to iOS 15 is a prerequisite for all of the above.
| `isViewHidden:` | — |
| `hideKeyboard:` | — |
| `setInternalSecureRectangles:` | — |
| `logAssert:withLocation:` | Use `logException:reason:options:completion:` |
| `logAssert:withLocation:` | Use `logException:reason:completion:` |
| `log:level:timestamp:` | `log:level:enforceFiltering:` takes the slot but does something different — it opts the message into the log filter |
| `setDefaultCrashPriority:` | `BugseeOptionReportingDefaultCrashPriority` at launch |
| `setDefaultErrorPriority:` | `BugseeOptionReportingDefaultErrorPriority` at launch |
Expand Down
106 changes: 101 additions & 5 deletions docs/sdk/ios/v7/migration.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -588,10 +588,12 @@ through. See [§9.3](#93-breadcrumbs).
| `showReportControllerWithSummary:description:severity:labels:` | `showReportDialogWithSummary:description:severity:labels:` |
| _(not available)_ | `showReportDialogWithSummary:description:` |

### 7.2 `includeVideo:` overloads are gone
### 7.2 `includeVideo:` overloads and `logError:labels:` are gone

Both `uploadWithSummary:…:includeVideo:` and `logError:labels:includeVideo:` lose their
last parameter. Drop the argument; the shorter overloads already exist in 6.x.
`uploadWithSummary:…:includeVideo:` loses its last parameter. Drop the argument; the shorter
overload already exists in 6.x. `logError:labels:includeVideo:` and `logError:labels:` are
gone too: call `logError:`, and add labels in `bugseeAttachmentsForReport:` (see
[§7.5](#75-bugseeexceptionloggingoptions-is-gone) for how far such a label reaches).

<Tabs groupId="lang-ios">
<TabItem value="objective-c" label="Objective-C">
Expand All @@ -603,6 +605,12 @@ last parameter. Drop the argument; the shorter overloads already exist in 6.x.

// 7.x
[Bugsee uploadWithSummary:@"s" description:@"d" severity:BugseeSeverityHigh labels:nil];

// 6.x
[Bugsee logError:error labels:@[@"checkout"]];

// 7.x: labels in bugseeAttachmentsForReport:, see §7.5
[Bugsee logError:error];
```

</TabItem>
Expand All @@ -615,6 +623,12 @@ Bugsee.upload(summary: "s", description: "d", severity: BugseeSeverityHigh,

// 7.x
Bugsee.upload(summary: "s", description: "d", severity: BugseeSeverityHigh, labels: nil)

// 6.x
Bugsee.logError(error: error, labels: ["checkout"])

// 7.x: labels in bugsee(attachmentsFor:), see §7.5
Bugsee.logError(error: error)
```

</TabItem>
Expand Down Expand Up @@ -676,6 +690,85 @@ func bugsee(attachmentsFor report: BugseeReport) -> [BugseeAttachment] {
</TabItem>
</Tabs>

### 7.5 `BugseeExceptionLoggingOptions` is gone

`logException` takes the exception domain and the number of frames to skip as parameters, as
on Android 7.x. `BugseeExceptionLoggingOptions`, `BugseeMergingRulesSkipFramesKey` and both
`options:` overloads are removed.

| 6.x | 7.x |
| --- | --- |
| `logException:options:completion:` with `nil` options | `logException:completion:` |
| `logException:reason:options:completion:` with `nil` options | `logException:reason:completion:` |
| `logException:options:completion:` with options | `logException:domain:skipFrames:completion:` |
| `logException:reason:options:completion:` with options | `logException:reason:domain:skipFrames:completion:` |
| `exceptionDomain` | `domain:` |
| `mergingRules[BugseeMergingRulesSkipFramesKey]` | `skipFrames:` |
| `labels` | `addLabels:` on the report in `bugseeAttachmentsForReport:` — see [§7.4](#74-the-report-the-delegate-receives-is-live) |
| `includeVideo` | — leaving the video out of a single report is not supported |

A 6.x call that passed an options object without setting `includeVideo` to `YES` filed its
report without video. In 7.x the same call files it with video.

`domain` is recorded with the report. `skipFrames` is how many top frames of the stack
recorded for the report are left out of its signature, which groups reports into issues;
a negative value counts as `0`.

<Tabs groupId="lang-ios">
<TabItem value="objective-c" label="Objective-C">

```objectivec
// 6.x
BugseeExceptionLoggingOptions *options = [BugseeExceptionLoggingOptions new];
options.exceptionDomain = @"Payments";
options.labels = @[@"checkout"];
options.mergingRules = @{BugseeMergingRulesSkipFramesKey : @1};
[Bugsee logException:exception options:options completion:nil];

// 7.x
[Bugsee logException:exception domain:@"Payments" skipFrames:1 completion:nil];

// 7.x labels, in your BugseeDelegate
- (NSArray<BugseeAttachment *> *)bugseeAttachmentsForReport:(BugseeReport *)report {
if ([report.type isEqualToString:BugseeReportTypeError]) {
[report addLabels:@[@"checkout"]];
}
return @[];
}
```

</TabItem>
<TabItem value="swift" label="Swift">

```swift
// 6.x
let options = BugseeExceptionLoggingOptions()
options.exceptionDomain = "Payments"
options.labels = ["checkout"]
options.mergingRules = [BugseeMergingRulesSkipFramesKey: 1]
Bugsee.logException(exception: exception, options: options, completion: nil)

// 7.x
Bugsee.logException(exception: exception, domain: "Payments", skipFrames: 1, completion: nil)

// 7.x labels, in your BugseeDelegate
func bugsee(attachmentsFor report: BugseeReport) -> [BugseeAttachment] {
if report.type == BugseeReportTypeError {
report.addLabels(["checkout"])
}
return []
}
```

</TabItem>
</Tabs>

The delegate is asked about every report. `type` tells an error report from a bug or crash
report, but not a `logException` report from a `logError` report or from an error report
Bugsee files on its own, so a label added this way goes on all of them.

On simulators and Mac Catalyst `logException` files nothing; its completion is still called.

---

## 8. Privacy and secure areas
Expand Down Expand Up @@ -1012,7 +1105,10 @@ Renamed — a plain search and replace does most of these.
| `testExceptionCrash` / `testSignalCrash` | `testCrash` |
| `deleteCollectedDataOnDevice:` | `deleteCollectedDataOnDevice:completion:` |
| `uploadWithSummary:…:includeVideo:` | `uploadWithSummary:description:severity:labels:` |
| `logError:labels:includeVideo:` | `logError:labels:` |
| `logError:labels:includeVideo:` / `logError:labels:` | `logError:`; labels through the delegate's report — see [§7.2](#72-includevideo-overloads-and-logerrorlabels-are-gone) |
| `logException:options:completion:` | `logException:completion:` / `logException:domain:skipFrames:completion:` — see [§7.5](#75-bugseeexceptionloggingoptions-is-gone) |
| `logException:reason:options:completion:` | `logException:reason:completion:` / `logException:reason:domain:skipFrames:completion:` |
| `BugseeExceptionLoggingOptions` | `domain:` / `skipFrames:` parameters of `logException`; labels through the delegate's report |
| Swift `Bugsee.launch(token:options:)` _(dictionary)_ | Swift `Bugsee.launch(token:dictionaryOptions:)` |
| Swift `Bugsee.relaunch(options:)` _(dictionary)_ | Swift `Bugsee.relaunch(dictionaryOptions:)` |
| Swift `Bugsee.uploadReport(_:)` | Swift `Bugsee.upload(_:)` |
Expand All @@ -1031,7 +1127,7 @@ Removed with no direct replacement.
| `isViewHidden:` | — |
| `hideKeyboard:` | — |
| `setInternalSecureRectangles:` | — |
| `logAssert:withLocation:` / `BUGSEE_ASSERT` | Use `logException:reason:options:completion:` |
| `logAssert:withLocation:` / `BUGSEE_ASSERT` | Use `logException:reason:completion:` |
| `log:level:timestamp:` | `log:level:requiresFiltering:` takes the slot but does something different — it opts the message into the log filter |
| `setDefaultCrashPriority:` | `BugseeOptionReportingDefaultCrashPriority` at launch |
| `setDefaultErrorPriority:` | `BugseeOptionReportingDefaultErrorPriority` at launch |
Expand Down
Loading