Отслеживание ошибок в нативных iOS-расширениях
Расширения (HomeWidget, Live Activity) не имеют доступа к сети и Sentry SDK. Отчёты пишутся в App Group, при запуске приложения отправляются в Sentry.
Архитектура
Как использовать
1. Breadcrumbs
В начале выполнения очищайте и записывайте шаги:
swift
WidgetBreadcrumb.clear()
WidgetBreadcrumb.record(category: "home_widget", message: "getTimeline started")
// ... логика
WidgetBreadcrumb.record(category: "home_widget", message: "fetch completed", data: ["state": "freezed"])2. Ошибки
В catch или при ошибке:
swift
WidgetReportStorage.enqueueError(
WidgetErrorReporter.makeReport(
error: error,
source: "home_widget", // идентификатор модуля
stage: "fetchData", // этап
widgetFamily: nil // для Home Widget — .systemSmall и т.д.
)
)Предупреждение без error:
swift
WidgetReportStorage.enqueueError(
WidgetErrorReporter.makeReport(
source: "home_widget",
stage: "validation",
extra: ["reason": "invalid_state"]
)
)3. Пропущенные обновления (опционально)
swift
let report = WidgetReport(
source: "home_widget",
type: .missedUpdate,
level: .warning,
timestamp: Date(),
message: "Update was missed",
context: ReportContext(stage: "scheduled_update", platform: "ios", widgetFamily: nil),
error: nil,
breadcrumbs: [],
extra: ["scheduled_for": "...", "last_run_at": "..."]
)
WidgetReportStorage.enqueueMissedUpdate(report)Как расширить (новый модуль, например Live Activity)
Шаг 1. Подключить Shared
В Runner.xcodeproj/project.pbxproj добавьте Shared в fileSystemSynchronizedGroups target расширения:
11WR00302E2F9545005C4E8F /* Shared */,Шаг 2. App Group
В entitlements расширения должен быть group.artforintrovert.app.
Шаг 3. Код
Используйте WidgetBreadcrumb и WidgetErrorReporter как в разделе «Как использовать», указывая свой source (например "live_activity").
Flutter и Pigeon уже настроены — отчёты автоматически попадут в Sentry при запуске приложения.
Ограничения
- До 20 отчётов в очереди ошибок и 20 в очереди пропущенных обновлений.
- Отправка только при следующем запуске приложения.
- При переустановке отчёты теряются.