@danieljvdm/dev-kit 1.0.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -6
- package/package.json +1 -1
- package/skill-sources.jsonc +6 -29
- package/skill-sources.lock.json +23 -109
- package/skills/animate/LICENSE +21 -0
- package/skills/animate/NOTICE +10 -0
- package/skills/animate/SKILL.md +34 -0
- package/skills/animate/references/gestures.md +27 -0
- package/skills/animate/references/glossary.md +136 -0
- package/skills/animate/references/implementation.md +22 -0
- package/skills/animate/references/opportunities.md +18 -0
- package/skills/animate/references/principles.md +48 -0
- package/skills/animate/references/review.md +19 -0
- package/skills/cloudflare-workers/LICENSE +202 -0
- package/skills/cloudflare-workers/NOTICE +9 -0
- package/skills/cloudflare-workers/SKILL.md +26 -0
- package/skills/cloudflare-workers/references/durable-objects.md +68 -0
- package/skills/cloudflare-workers/references/sandbox.md +48 -0
- package/skills/cloudflare-workers/references/workers.md +63 -0
- package/skills/cloudflare-workers/references/wrangler.md +56 -0
- package/skills/design-ui/LICENSE +21 -0
- package/skills/design-ui/NOTICE +8 -0
- package/skills/design-ui/SKILL.md +29 -0
- package/skills/design-ui/references/appearance.md +22 -0
- package/skills/design-ui/references/components.md +33 -0
- package/skills/design-ui/references/exploration.md +50 -0
- package/skills/design-ui/references/libraries.md +39 -0
- package/skills/design-ui/references/themes.md +23 -0
- package/skills/dev-kit/SKILL.md +19 -38
- package/skills/dev-kit/references/cloudflare-worker-api.md +1 -1
- package/skills/dev-kit/references/skills.md +2 -2
- package/skills/effect-development/SKILL.md +27 -0
- package/skills/effect-development/agents/openai.yaml +4 -0
- package/skills/effect-development/references/api/index.md +32 -0
- package/skills/effect-development/references/api/schema-codecs.md +15 -0
- package/skills/{build-effect-apis/references → effect-development/references/api}/verification.md +10 -5
- package/skills/{effect-architecture-audit/SKILL.md → effect-development/references/architecture/index.md} +1 -6
- package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-client.md +8 -6
- package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-testing.md +7 -2
- package/skills/effect-development/references/atom/index.md +40 -0
- package/skills/{build-effect-clis/references → effect-development/references/cli}/entrypoints-and-testing.md +6 -2
- package/skills/effect-development/references/cli/index.md +39 -0
- package/skills/effect-development/references/setup.md +15 -0
- package/skills/open-pull-request/SKILL.md +11 -115
- package/skills/open-pull-request/agents/openai.yaml +3 -3
- package/skills/open-pull-request/references/evidence.md +22 -0
- package/skills/open-pull-request/references/explanation.md +21 -0
- package/skills/open-pull-request/references/publication.md +21 -0
- package/skills/sentry/LICENSE +202 -0
- package/skills/sentry/LICENSE-UPSTREAM +21 -0
- package/skills/sentry/NOTICE +14 -0
- package/skills/sentry/SKILL.md +33 -0
- package/skills/sentry/references/alert-payloads.md +105 -0
- package/skills/sentry/references/alerts.md +17 -0
- package/skills/sentry/references/artifacts.md +25 -0
- package/skills/sentry/references/auth-token.md +65 -0
- package/skills/sentry/references/concepts/ai-monitoring.md +131 -0
- package/skills/sentry/references/concepts/choosing-a-signal.md +78 -0
- package/skills/sentry/references/concepts/crons.md +50 -0
- package/skills/sentry/references/concepts/data-scrubbing.md +43 -0
- package/skills/sentry/references/concepts/errors.md +40 -0
- package/skills/sentry/references/concepts/logging.md +85 -0
- package/skills/sentry/references/concepts/metrics.md +49 -0
- package/skills/sentry/references/concepts/monitors.md +78 -0
- package/skills/sentry/references/concepts/profiling.md +38 -0
- package/skills/sentry/references/concepts/reduce-volume.md +49 -0
- package/skills/sentry/references/concepts/releases.md +43 -0
- package/skills/sentry/references/concepts/session-replay.md +35 -0
- package/skills/sentry/references/concepts/tracing.md +54 -0
- package/skills/sentry/references/concepts/user-feedback.md +36 -0
- package/skills/sentry/references/debug-artifacts/android.md +68 -0
- package/skills/sentry/references/debug-artifacts/apple.md +96 -0
- package/skills/sentry/references/debug-artifacts/dotnet.md +70 -0
- package/skills/sentry/references/debug-artifacts/flutter.md +65 -0
- package/skills/sentry/references/debug-artifacts/index.md +75 -0
- package/skills/sentry/references/debug-artifacts/javascript.md +94 -0
- package/skills/sentry/references/debug-artifacts/matching.md +73 -0
- package/skills/sentry/references/debug-artifacts/react-native.md +75 -0
- package/skills/sentry/references/first-error-setup.md +25 -0
- package/skills/sentry/references/instrumentation.md +30 -0
- package/skills/sentry/references/issues.md +32 -0
- package/skills/sentry/references/new-project.md +17 -0
- package/skills/sentry/references/otel-exporter.md +30 -0
- package/skills/sentry/references/release-workflow.md +31 -0
- package/skills/sentry/references/releases/ci-pipeline.md +214 -0
- package/skills/sentry/references/releases/index.md +93 -0
- package/skills/sentry/references/releases/suspect-commits.md +155 -0
- package/skills/sentry/references/releases/tagging.md +131 -0
- package/skills/sentry/references/releases/troubleshooting.md +67 -0
- package/skills/sentry/references/sdks/android/crons.md +305 -0
- package/skills/sentry/references/sdks/android/error-monitoring.md +800 -0
- package/skills/sentry/references/sdks/android/index.md +748 -0
- package/skills/sentry/references/sdks/android/integrations.md +48 -0
- package/skills/sentry/references/sdks/android/logging.md +374 -0
- package/skills/sentry/references/sdks/android/metrics.md +288 -0
- package/skills/sentry/references/sdks/android/profiling.md +397 -0
- package/skills/sentry/references/sdks/android/session-replay.md +406 -0
- package/skills/sentry/references/sdks/android/tracing.md +861 -0
- package/skills/sentry/references/sdks/browser/error-monitoring.md +861 -0
- package/skills/sentry/references/sdks/browser/index.md +714 -0
- package/skills/sentry/references/sdks/browser/logging.md +315 -0
- package/skills/sentry/references/sdks/browser/profiling.md +236 -0
- package/skills/sentry/references/sdks/browser/session-replay.md +586 -0
- package/skills/sentry/references/sdks/browser/tracing.md +561 -0
- package/skills/sentry/references/sdks/browser/user-feedback.md +354 -0
- package/skills/sentry/references/sdks/cloudflare/ai-monitoring.md +661 -0
- package/skills/sentry/references/sdks/cloudflare/crons.md +231 -0
- package/skills/sentry/references/sdks/cloudflare/durable-objects.md +381 -0
- package/skills/sentry/references/sdks/cloudflare/error-monitoring.md +329 -0
- package/skills/sentry/references/sdks/cloudflare/index.md +698 -0
- package/skills/sentry/references/sdks/cloudflare/logging.md +169 -0
- package/skills/sentry/references/sdks/cloudflare/nodejs-compat.md +134 -0
- package/skills/sentry/references/sdks/cloudflare/tracing.md +475 -0
- package/skills/sentry/references/sdks/cocoa/error-monitoring.md +394 -0
- package/skills/sentry/references/sdks/cocoa/index.md +497 -0
- package/skills/sentry/references/sdks/cocoa/logging.md +209 -0
- package/skills/sentry/references/sdks/cocoa/metrics.md +136 -0
- package/skills/sentry/references/sdks/cocoa/profiling.md +223 -0
- package/skills/sentry/references/sdks/cocoa/session-replay.md +257 -0
- package/skills/sentry/references/sdks/cocoa/tracing.md +524 -0
- package/skills/sentry/references/sdks/cocoa/user-feedback.md +310 -0
- package/skills/sentry/references/sdks/dotnet/crons.md +465 -0
- package/skills/sentry/references/sdks/dotnet/error-monitoring.md +1100 -0
- package/skills/sentry/references/sdks/dotnet/index.md +614 -0
- package/skills/sentry/references/sdks/dotnet/logging.md +556 -0
- package/skills/sentry/references/sdks/dotnet/metrics.md +229 -0
- package/skills/sentry/references/sdks/dotnet/profiling.md +296 -0
- package/skills/sentry/references/sdks/dotnet/tracing.md +897 -0
- package/skills/sentry/references/sdks/elixir/crons.md +371 -0
- package/skills/sentry/references/sdks/elixir/error-monitoring.md +335 -0
- package/skills/sentry/references/sdks/elixir/index.md +383 -0
- package/skills/sentry/references/sdks/elixir/logging.md +239 -0
- package/skills/sentry/references/sdks/elixir/tracing.md +233 -0
- package/skills/sentry/references/sdks/flutter/ecosystem-integrations.md +70 -0
- package/skills/sentry/references/sdks/flutter/error-monitoring.md +312 -0
- package/skills/sentry/references/sdks/flutter/index.md +728 -0
- package/skills/sentry/references/sdks/flutter/logging.md +387 -0
- package/skills/sentry/references/sdks/flutter/metrics.md +310 -0
- package/skills/sentry/references/sdks/flutter/profiling.md +214 -0
- package/skills/sentry/references/sdks/flutter/session-replay.md +308 -0
- package/skills/sentry/references/sdks/flutter/tracing.md +502 -0
- package/skills/sentry/references/sdks/go/crons.md +270 -0
- package/skills/sentry/references/sdks/go/error-monitoring.md +361 -0
- package/skills/sentry/references/sdks/go/index.md +324 -0
- package/skills/sentry/references/sdks/go/logging.md +354 -0
- package/skills/sentry/references/sdks/go/metrics.md +273 -0
- package/skills/sentry/references/sdks/go/profiling.md +46 -0
- package/skills/sentry/references/sdks/go/tracing.md +366 -0
- package/skills/sentry/references/sdks/index.md +41 -0
- package/skills/sentry/references/sdks/nestjs/ai-monitoring.md +410 -0
- package/skills/sentry/references/sdks/nestjs/crons.md +268 -0
- package/skills/sentry/references/sdks/nestjs/error-monitoring.md +729 -0
- package/skills/sentry/references/sdks/nestjs/index.md +699 -0
- package/skills/sentry/references/sdks/nestjs/logging.md +174 -0
- package/skills/sentry/references/sdks/nestjs/metrics.md +243 -0
- package/skills/sentry/references/sdks/nestjs/profiling.md +127 -0
- package/skills/sentry/references/sdks/nestjs/tracing.md +762 -0
- package/skills/sentry/references/sdks/nextjs/ai-monitoring.md +494 -0
- package/skills/sentry/references/sdks/nextjs/crons.md +383 -0
- package/skills/sentry/references/sdks/nextjs/error-monitoring.md +974 -0
- package/skills/sentry/references/sdks/nextjs/index.md +491 -0
- package/skills/sentry/references/sdks/nextjs/logging.md +381 -0
- package/skills/sentry/references/sdks/nextjs/metrics.md +411 -0
- package/skills/sentry/references/sdks/nextjs/profiling.md +403 -0
- package/skills/sentry/references/sdks/nextjs/session-replay.md +462 -0
- package/skills/sentry/references/sdks/nextjs/tracing.md +628 -0
- package/skills/sentry/references/sdks/node/ai-monitoring.md +303 -0
- package/skills/sentry/references/sdks/node/crons.md +432 -0
- package/skills/sentry/references/sdks/node/error-monitoring.md +1125 -0
- package/skills/sentry/references/sdks/node/index.md +942 -0
- package/skills/sentry/references/sdks/node/logging.md +380 -0
- package/skills/sentry/references/sdks/node/metrics.md +278 -0
- package/skills/sentry/references/sdks/node/profiling.md +373 -0
- package/skills/sentry/references/sdks/node/tracing.md +878 -0
- package/skills/sentry/references/sdks/php/ai-monitoring.md +310 -0
- package/skills/sentry/references/sdks/php/crons.md +265 -0
- package/skills/sentry/references/sdks/php/error-monitoring.md +626 -0
- package/skills/sentry/references/sdks/php/index.md +362 -0
- package/skills/sentry/references/sdks/php/laravel.md +542 -0
- package/skills/sentry/references/sdks/php/logging.md +242 -0
- package/skills/sentry/references/sdks/php/metrics.md +193 -0
- package/skills/sentry/references/sdks/php/profiling.md +115 -0
- package/skills/sentry/references/sdks/php/symfony.md +552 -0
- package/skills/sentry/references/sdks/php/tracing.md +516 -0
- package/skills/sentry/references/sdks/python/ai-monitoring.md +351 -0
- package/skills/sentry/references/sdks/python/crons.md +218 -0
- package/skills/sentry/references/sdks/python/error-monitoring.md +292 -0
- package/skills/sentry/references/sdks/python/index.md +361 -0
- package/skills/sentry/references/sdks/python/logging.md +234 -0
- package/skills/sentry/references/sdks/python/metrics.md +154 -0
- package/skills/sentry/references/sdks/python/profiling.md +120 -0
- package/skills/sentry/references/sdks/python/tracing.md +364 -0
- package/skills/sentry/references/sdks/react/error-monitoring.md +1607 -0
- package/skills/sentry/references/sdks/react/index.md +492 -0
- package/skills/sentry/references/sdks/react/logging.md +364 -0
- package/skills/sentry/references/sdks/react/profiling.md +322 -0
- package/skills/sentry/references/sdks/react/react-features.md +1272 -0
- package/skills/sentry/references/sdks/react/session-replay.md +1193 -0
- package/skills/sentry/references/sdks/react/tracing.md +1415 -0
- package/skills/sentry/references/sdks/react-native/error-monitoring.md +1481 -0
- package/skills/sentry/references/sdks/react-native/expo-config-plugin.md +45 -0
- package/skills/sentry/references/sdks/react-native/index.md +1030 -0
- package/skills/sentry/references/sdks/react-native/logging.md +444 -0
- package/skills/sentry/references/sdks/react-native/profiling.md +386 -0
- package/skills/sentry/references/sdks/react-native/session-replay.md +704 -0
- package/skills/sentry/references/sdks/react-native/tracing.md +1086 -0
- package/skills/sentry/references/sdks/react-native/user-feedback.md +815 -0
- package/skills/sentry/references/sdks/react-router-framework/error-monitoring.md +127 -0
- package/skills/sentry/references/sdks/react-router-framework/index.md +411 -0
- package/skills/sentry/references/sdks/react-router-framework/logging.md +66 -0
- package/skills/sentry/references/sdks/react-router-framework/profiling.md +57 -0
- package/skills/sentry/references/sdks/react-router-framework/react-router-framework-features.md +110 -0
- package/skills/sentry/references/sdks/react-router-framework/session-replay.md +67 -0
- package/skills/sentry/references/sdks/react-router-framework/tracing.md +96 -0
- package/skills/sentry/references/sdks/react-router-framework/user-feedback.md +71 -0
- package/skills/sentry/references/sdks/ruby/crons.md +184 -0
- package/skills/sentry/references/sdks/ruby/error-monitoring.md +248 -0
- package/skills/sentry/references/sdks/ruby/index.md +297 -0
- package/skills/sentry/references/sdks/ruby/logging.md +168 -0
- package/skills/sentry/references/sdks/ruby/metrics.md +196 -0
- package/skills/sentry/references/sdks/ruby/migration.md +321 -0
- package/skills/sentry/references/sdks/ruby/profiling.md +107 -0
- package/skills/sentry/references/sdks/ruby/tracing.md +388 -0
- package/skills/sentry/references/sdks/svelte/error-monitoring.md +456 -0
- package/skills/sentry/references/sdks/svelte/index.md +467 -0
- package/skills/sentry/references/sdks/svelte/logging.md +344 -0
- package/skills/sentry/references/sdks/svelte/session-replay.md +369 -0
- package/skills/sentry/references/sdks/svelte/tracing.md +406 -0
- package/skills/sentry/references/sdks/tanstack-start/error-monitoring.md +149 -0
- package/skills/sentry/references/sdks/tanstack-start/index.md +381 -0
- package/skills/sentry/references/sdks/tanstack-start/logging.md +74 -0
- package/skills/sentry/references/sdks/tanstack-start/session-replay.md +76 -0
- package/skills/sentry/references/sdks/tanstack-start/tanstackstart-features.md +128 -0
- package/skills/sentry/references/sdks/tanstack-start/tracing.md +123 -0
- package/skills/sentry/references/sdks/tanstack-start/user-feedback.md +81 -0
- package/skills/sentry/references/search-query-language.md +226 -0
- package/skills/sentry/references/semantics/angular.md +7 -0
- package/skills/sentry/references/semantics/app.md +28 -0
- package/skills/sentry/references/semantics/art.md +17 -0
- package/skills/sentry/references/semantics/aws.md +43 -0
- package/skills/sentry/references/semantics/browser.md +34 -0
- package/skills/sentry/references/semantics/cache.md +12 -0
- package/skills/sentry/references/semantics/client.md +8 -0
- package/skills/sentry/references/semantics/cloud.md +12 -0
- package/skills/sentry/references/semantics/cloudflare.md +23 -0
- package/skills/sentry/references/semantics/code.md +11 -0
- package/skills/sentry/references/semantics/culture.md +11 -0
- package/skills/sentry/references/semantics/db.md +21 -0
- package/skills/sentry/references/semantics/device.md +43 -0
- package/skills/sentry/references/semantics/error.md +7 -0
- package/skills/sentry/references/semantics/event.md +8 -0
- package/skills/sentry/references/semantics/exception.md +10 -0
- package/skills/sentry/references/semantics/faas.md +19 -0
- package/skills/sentry/references/semantics/file.md +8 -0
- package/skills/sentry/references/semantics/flag.md +7 -0
- package/skills/sentry/references/semantics/gcp.md +16 -0
- package/skills/sentry/references/semantics/gen_ai.md +53 -0
- package/skills/sentry/references/semantics/general.md +11 -0
- package/skills/sentry/references/semantics/graphql.md +9 -0
- package/skills/sentry/references/semantics/grpc.md +19 -0
- package/skills/sentry/references/semantics/http.md +34 -0
- package/skills/sentry/references/semantics/index.md +63 -0
- package/skills/sentry/references/semantics/jsonrpc.md +8 -0
- package/skills/sentry/references/semantics/jvm.md +12 -0
- package/skills/sentry/references/semantics/koa.md +7 -0
- package/skills/sentry/references/semantics/logger.md +7 -0
- package/skills/sentry/references/semantics/mcp.md +37 -0
- package/skills/sentry/references/semantics/mdc.md +7 -0
- package/skills/sentry/references/semantics/messaging.md +23 -0
- package/skills/sentry/references/semantics/middleware.md +7 -0
- package/skills/sentry/references/semantics/navigation.md +9 -0
- package/skills/sentry/references/semantics/nel.md +11 -0
- package/skills/sentry/references/semantics/network.md +17 -0
- package/skills/sentry/references/semantics/os.md +15 -0
- package/skills/sentry/references/semantics/otel.md +10 -0
- package/skills/sentry/references/semantics/params.md +7 -0
- package/skills/sentry/references/semantics/process.md +14 -0
- package/skills/sentry/references/semantics/react.md +7 -0
- package/skills/sentry/references/semantics/remix.md +7 -0
- package/skills/sentry/references/semantics/resource.md +7 -0
- package/skills/sentry/references/semantics/rpc.md +10 -0
- package/skills/sentry/references/semantics/score.md +10 -0
- package/skills/sentry/references/semantics/sentry.md +69 -0
- package/skills/sentry/references/semantics/server.md +8 -0
- package/skills/sentry/references/semantics/service.md +8 -0
- package/skills/sentry/references/semantics/session.md +7 -0
- package/skills/sentry/references/semantics/state.md +7 -0
- package/skills/sentry/references/semantics/thread.md +8 -0
- package/skills/sentry/references/semantics/timber.md +7 -0
- package/skills/sentry/references/semantics/trpc.md +8 -0
- package/skills/sentry/references/semantics/ui.md +18 -0
- package/skills/sentry/references/semantics/url.md +15 -0
- package/skills/sentry/references/semantics/user.md +17 -0
- package/skills/sentry/references/semantics/user_agent.md +7 -0
- package/skills/sentry/references/semantics/vercel.md +42 -0
- package/skills/sentry/references/setup-verification.md +39 -0
- package/skills/sentry/references/snapshots/github-actions-fanout.md +206 -0
- package/skills/sentry/references/snapshots/github-actions-simple.md +102 -0
- package/skills/sentry/references/snapshots/github-actions-swift-snapshot-testing.md +118 -0
- package/skills/sentry/references/snapshots/index.md +19 -0
- package/skills/sentry/references/snapshots/snapshot-previews.md +100 -0
- package/skills/sentry/references/snapshots/snapshots.md +123 -0
- package/skills/sentry/references/snapshots/wizard-setup.md +134 -0
- package/skills/testing/LICENSE +21 -0
- package/skills/testing/NOTICE +7 -0
- package/skills/testing/SKILL.md +13 -19
- package/skills/testing/agents/openai.yaml +1 -2
- package/skills/testing/references/selection.md +23 -0
- package/skills/testing/references/tdd.md +19 -0
- package/skills/testing/references/test-design.md +17 -0
- package/src/catalog.ts +1 -7
- package/skills/build-effect-apis/SKILL.md +0 -81
- package/skills/build-effect-apis/agents/openai.yaml +0 -4
- package/skills/build-effect-clis/SKILL.md +0 -92
- package/skills/build-effect-clis/agents/openai.yaml +0 -4
- package/skills/effect-architecture-audit/agents/openai.yaml +0 -4
- package/skills/effect-atom-state/SKILL.md +0 -97
- package/skills/effect-atom-state/agents/openai.yaml +0 -4
- package/skills/effect-ts/SKILL.md +0 -35
- package/skills/effect-ts/agents/openai.yaml +0 -4
- /package/skills/{build-effect-apis/references → effect-development/references/api}/cloudflare-workers.md +0 -0
- /package/skills/{build-effect-apis/references → effect-development/references/api}/runtime-assembly.md +0 -0
- /package/skills/{build-effect-apis/references → effect-development/references/api}/server-and-middleware.md +0 -0
- /package/skills/{build-effect-apis/references → effect-development/references/api}/shared-contracts.md +0 -0
- /package/skills/{effect-architecture-audit/references → effect-development/references/architecture}/service-and-boundary-audit.md +0 -0
- /package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-lifecycle.md +0 -0
- /package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-workflows.md +0 -0
- /package/skills/{effect-atom-state/references → effect-development/references/atom}/tanstack-start.md +0 -0
- /package/skills/{build-effect-clis/references → effect-development/references/cli}/command-design.md +0 -0
- /package/skills/{build-effect-clis/references → effect-development/references/cli}/processes-and-platform.md +0 -0
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
# Error Monitoring — Sentry Cocoa SDK
|
|
2
|
+
|
|
3
|
+
> Minimum SDK: `sentry-cocoa` v7.0.0+ Swift Error improvements: v8.7.0+ HTTP client
|
|
4
|
+
> error capture: v8.0.0+
|
|
5
|
+
|
|
6
|
+
## Configuration
|
|
7
|
+
|
|
8
|
+
| Option | Type | Default | Description |
|
|
9
|
+
| -------------------------------------- | ----------------------- | ----------- | ------------------------------------------------------------------------- |
|
|
10
|
+
| `enableCrashHandler` | `Bool` | `true` | Master switch for crash reporting (signal handlers, Mach exceptions, C++) |
|
|
11
|
+
| `sampleRate` | `Float` (0.0–1.0) | `1.0` | Percentage of error events sent |
|
|
12
|
+
| `attachStacktrace` | `Bool` | `true` | Attach stack traces to all captured messages |
|
|
13
|
+
| `attachAllThreads` | `Bool` | `false` | Attach full stack traces for all threads (SDK 9.9+) |
|
|
14
|
+
| `maxBreadcrumbs` | `Int` | `100` | Max breadcrumbs per event |
|
|
15
|
+
| `enableAppHangTracking` | `Bool` | `true` | Detect main thread unresponsiveness |
|
|
16
|
+
| `appHangTimeoutInterval` | `Double` | `2.0` | Seconds before a hang is reported |
|
|
17
|
+
| `enableReportNonFullyBlockingAppHangs` | `Bool` | `true` | Include non-fully-blocking hangs where V2 is supported |
|
|
18
|
+
| `enableWatchdogTerminationTracking` | `Bool` | `true` | Track OS watchdog kills via heuristics |
|
|
19
|
+
| `enableCaptureFailedRequests` | `Bool` | `true` | Auto-capture HTTP client errors as Sentry events |
|
|
20
|
+
| `failedRequestStatusCodes` | `[HttpStatusCodeRange]` | `[500–599]` | Status code ranges that trigger error capture |
|
|
21
|
+
| `failedRequestTargets` | `[String]` | `[".*"]` | Hosts/regex patterns to monitor for HTTP errors |
|
|
22
|
+
| `attachScreenshot` | `Bool` | `false` | Capture screenshot when an error event fires |
|
|
23
|
+
| `attachViewHierarchy` | `Bool` | `false` | Capture view hierarchy when an error event fires |
|
|
24
|
+
| `sendDefaultPii` | `Bool` | `false` | Include PII (IP address, username) in events |
|
|
25
|
+
|
|
26
|
+
## Code Examples
|
|
27
|
+
|
|
28
|
+
### SDK initialization
|
|
29
|
+
|
|
30
|
+
```swift
|
|
31
|
+
import Sentry
|
|
32
|
+
|
|
33
|
+
SentrySDK.start { options in
|
|
34
|
+
options.dsn = "https://examplePublicKey@o0.ingest.sentry.io/0"
|
|
35
|
+
options.environment = "production"
|
|
36
|
+
options.releaseName = "my-app@2.0.0+123"
|
|
37
|
+
options.enableCrashHandler = true // default; explicit for clarity
|
|
38
|
+
options.attachScreenshot = true
|
|
39
|
+
options.attachViewHierarchy = true
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Capture a message
|
|
44
|
+
|
|
45
|
+
```swift
|
|
46
|
+
SentrySDK.capture(message: "Something noteworthy happened")
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Capture a Swift Error / NSError
|
|
50
|
+
|
|
51
|
+
```swift
|
|
52
|
+
do {
|
|
53
|
+
try riskyOperation()
|
|
54
|
+
} catch {
|
|
55
|
+
SentrySDK.capture(error: error)
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Capture a custom SentryEvent
|
|
60
|
+
|
|
61
|
+
```swift
|
|
62
|
+
let event = Event(level: .warning)
|
|
63
|
+
event.message = SentryMessage(formatted: "Checkout flow aborted")
|
|
64
|
+
event.tags = ["feature": "checkout"]
|
|
65
|
+
event.extra = ["cart_items": 3]
|
|
66
|
+
SentrySDK.capture(event: event)
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Swift Error enum — human-readable titles (v8.7.0+)
|
|
70
|
+
|
|
71
|
+
By default, Swift error enum cases appear as `LoginError - Code: 1`. To get readable
|
|
72
|
+
titles, conform to `CustomNSError`:
|
|
73
|
+
|
|
74
|
+
```swift
|
|
75
|
+
enum LoginError: Error {
|
|
76
|
+
case wrongUser(id: String)
|
|
77
|
+
case wrongPassword
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
extension LoginError: CustomNSError {
|
|
81
|
+
var errorUserInfo: [String: Any] {
|
|
82
|
+
[NSDebugDescriptionErrorKey: debugDescription]
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
private var debugDescription: String {
|
|
86
|
+
switch self {
|
|
87
|
+
case .wrongUser(let id): return "Wrong user (id: \(id))"
|
|
88
|
+
case .wrongPassword: return "Wrong password"
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Captures "LoginError - Wrong user (id: 12345)" as the issue title
|
|
94
|
+
SentrySDK.capture(error: LoginError.wrongUser(id: "12345"))
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
> Use `NSDebugDescriptionErrorKey`, NOT `NSLocalizedDescriptionKey`. Localized strings
|
|
98
|
+
> vary by device locale and create duplicate issues.
|
|
99
|
+
|
|
100
|
+
### Capture with per-event scope
|
|
101
|
+
|
|
102
|
+
The scope callback receives an isolated copy — changes don’t affect global state:
|
|
103
|
+
|
|
104
|
+
```swift
|
|
105
|
+
SentrySDK.capture(error: error) { scope in
|
|
106
|
+
scope.setTag(value: "checkout", key: "feature")
|
|
107
|
+
scope.setContext(value: ["amount": 99.99, "currency": "USD"], key: "payment")
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
SentrySDK.capture(message: "Payment declined") { scope in
|
|
111
|
+
scope.setLevel(.fatal)
|
|
112
|
+
scope.setTag(value: "stripe", key: "payment_provider")
|
|
113
|
+
}
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### App hang detection
|
|
117
|
+
|
|
118
|
+
```swift
|
|
119
|
+
SentrySDK.start { options in
|
|
120
|
+
options.dsn = "___PUBLIC_DSN___"
|
|
121
|
+
options.enableAppHangTracking = true
|
|
122
|
+
options.appHangTimeoutInterval = 2.0 // default; avoid values < 0.1
|
|
123
|
+
|
|
124
|
+
// V2 is the default in v9+ where supported; this option controls whether
|
|
125
|
+
// less-actionable non-fully-blocking hangs are reported.
|
|
126
|
+
options.enableReportNonFullyBlockingAppHangs = true
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// Pause tracking during expected blocking operations (e.g., permission dialogs)
|
|
130
|
+
SentrySDK.pauseAppHangTracking()
|
|
131
|
+
// ... system dialog ...
|
|
132
|
+
SentrySDK.resumeAppHangTracking()
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
V2 exception types:
|
|
136
|
+
|
|
137
|
+
| Type | Meaning |
|
|
138
|
+
| ---------------------------------- | ----------------------------------------------- |
|
|
139
|
+
| `App Hang Fully Blocked` | Main thread completely frozen |
|
|
140
|
+
| `App Hang Non Fully Blocked` | App stuck but still renders some frames |
|
|
141
|
+
| `Fatal App Hang Fully Blocked` | Force-quit / watchdog kill during full block |
|
|
142
|
+
| `Fatal App Hang Non Fully Blocked` | Force-quit / watchdog kill during partial block |
|
|
143
|
+
|
|
144
|
+
### HTTP client error capture
|
|
145
|
+
|
|
146
|
+
```swift
|
|
147
|
+
SentrySDK.start { options in
|
|
148
|
+
options.dsn = "___PUBLIC_DSN___"
|
|
149
|
+
options.enableCaptureFailedRequests = true
|
|
150
|
+
|
|
151
|
+
// Capture 4xx and 5xx
|
|
152
|
+
options.failedRequestStatusCodes = [
|
|
153
|
+
HttpStatusCodeRange(min: 400, max: 599)
|
|
154
|
+
]
|
|
155
|
+
|
|
156
|
+
// Only monitor your own backend
|
|
157
|
+
options.failedRequestTargets = [
|
|
158
|
+
"api.myapp.com",
|
|
159
|
+
".*\\.myapp\\.com" // regex supported
|
|
160
|
+
]
|
|
161
|
+
}
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### Scope management
|
|
165
|
+
|
|
166
|
+
```swift
|
|
167
|
+
// Global scope — persists across all events
|
|
168
|
+
SentrySDK.configureScope { scope in
|
|
169
|
+
scope.setTag(value: "premium", key: "subscription")
|
|
170
|
+
scope.setExtra(value: 42, key: "retry_count")
|
|
171
|
+
|
|
172
|
+
let user = User()
|
|
173
|
+
user.email = "user@example.com"
|
|
174
|
+
user.userId = "abc123"
|
|
175
|
+
scope.setUser(user)
|
|
176
|
+
|
|
177
|
+
scope.setContext(value: [
|
|
178
|
+
"version": "2.1",
|
|
179
|
+
"platform": "ios"
|
|
180
|
+
], key: "app_info")
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// Clear a specific value
|
|
184
|
+
SentrySDK.configureScope { scope in
|
|
185
|
+
scope.removeTag(key: "subscription")
|
|
186
|
+
scope.setUser(nil) // clear user on logout
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// Clear everything
|
|
190
|
+
SentrySDK.configureScope { $0.clear() }
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### Set user identity
|
|
194
|
+
|
|
195
|
+
```swift
|
|
196
|
+
let user = User()
|
|
197
|
+
user.userId = "user-abc-123"
|
|
198
|
+
user.email = "john.doe@example.com"
|
|
199
|
+
user.username = "johndoe"
|
|
200
|
+
user.data = ["plan": "premium"]
|
|
201
|
+
SentrySDK.setUser(user)
|
|
202
|
+
|
|
203
|
+
// On logout
|
|
204
|
+
SentrySDK.setUser(nil)
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### Breadcrumbs
|
|
208
|
+
|
|
209
|
+
```swift
|
|
210
|
+
let crumb = Breadcrumb()
|
|
211
|
+
crumb.level = .info
|
|
212
|
+
crumb.category = "auth"
|
|
213
|
+
crumb.type = "user"
|
|
214
|
+
crumb.message = "User logged in"
|
|
215
|
+
crumb.data = ["method": "oauth", "provider": "google"]
|
|
216
|
+
SentrySDK.addBreadcrumb(crumb)
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
Filter breadcrumbs via `beforeBreadcrumb`:
|
|
220
|
+
|
|
221
|
+
```swift
|
|
222
|
+
SentrySDK.start { options in
|
|
223
|
+
options.beforeBreadcrumb = { crumb in
|
|
224
|
+
if crumb.message?.contains("password") == true { return nil }
|
|
225
|
+
return crumb
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
### beforeSend hook — filter and modify events
|
|
231
|
+
|
|
232
|
+
```swift
|
|
233
|
+
SentrySDK.start { options in
|
|
234
|
+
options.beforeSend = { event in
|
|
235
|
+
// Drop events from internal testers
|
|
236
|
+
if event.user?.email?.hasSuffix("@mycompany.com") == true {
|
|
237
|
+
return nil
|
|
238
|
+
}
|
|
239
|
+
// Suppress app hang events
|
|
240
|
+
// V1/macOS may use "App Hanging"; V2 uses the more specific values
|
|
241
|
+
// listed above. Inspect event.exceptions?.first?.type in beforeSend.
|
|
242
|
+
if event.exceptions?.first?.type?.contains("App Hang") == true {
|
|
243
|
+
return nil
|
|
244
|
+
}
|
|
245
|
+
// Scrub sensitive data
|
|
246
|
+
event.request?.cookies = nil
|
|
247
|
+
// Add global tag
|
|
248
|
+
event.tags?["processed_by"] = "beforeSend"
|
|
249
|
+
return event
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
### Screenshot and view hierarchy attachments
|
|
255
|
+
|
|
256
|
+
```swift
|
|
257
|
+
SentrySDK.start { options in
|
|
258
|
+
options.attachScreenshot = true
|
|
259
|
+
options.screenshot.maskAllText = true // default: true
|
|
260
|
+
options.screenshot.maskAllImages = true // default: true
|
|
261
|
+
options.screenshot.maskedViewClasses = [MySecretView.self]
|
|
262
|
+
options.screenshot.unmaskedViewClasses = [MyLogoView.self]
|
|
263
|
+
|
|
264
|
+
options.attachViewHierarchy = true
|
|
265
|
+
options.reportAccessibilityIdentifier = true // disable if identifiers contain PII
|
|
266
|
+
|
|
267
|
+
// Conditional capture
|
|
268
|
+
options.beforeCaptureScreenshot = { event in event.level == .fatal }
|
|
269
|
+
options.beforeCaptureViewHierarchy = { _ in true }
|
|
270
|
+
}
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
### Fingerprinting and custom grouping
|
|
274
|
+
|
|
275
|
+
```swift
|
|
276
|
+
// Per-event fingerprint via scope
|
|
277
|
+
SentrySDK.capture(error: error) { scope in
|
|
278
|
+
scope.fingerprint = ["payment-service-timeout", "stripe"]
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
// Pattern-based in beforeSend — extend default grouping
|
|
282
|
+
SentrySDK.start { options in
|
|
283
|
+
options.beforeSend = { event in
|
|
284
|
+
if let error = event.error as NSError?,
|
|
285
|
+
error.domain == NSURLErrorDomain,
|
|
286
|
+
let url = error.userInfo[NSURLErrorFailingURLErrorKey] as? String {
|
|
287
|
+
event.fingerprint = ["{{ default }}", url, String(error.code)]
|
|
288
|
+
}
|
|
289
|
+
return event
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
// Aggressive grouping — all SQLite errors → one issue
|
|
294
|
+
SentrySDK.start { options in
|
|
295
|
+
options.beforeSend = { event in
|
|
296
|
+
if let error = event.error as NSError?,
|
|
297
|
+
error.domain == NSSQLiteErrorDomain {
|
|
298
|
+
event.fingerprint = ["database-connection-error"]
|
|
299
|
+
}
|
|
300
|
+
return event
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
`"{{ default }}"` substitutes Sentry’s standard hash, allowing you to _extend_ rather
|
|
306
|
+
than fully replace default grouping.
|
|
307
|
+
|
|
308
|
+
### onLastRunStatusDetermined callback
|
|
309
|
+
|
|
310
|
+
```swift
|
|
311
|
+
SentrySDK.start { options in
|
|
312
|
+
options.dsn = "___PUBLIC_DSN___"
|
|
313
|
+
options.onLastRunStatusDetermined = { status, crashEvent in
|
|
314
|
+
// Called once after init when the previous run's crash status is determined.
|
|
315
|
+
// Keep this minimal — complex logic can cascade into another crash.
|
|
316
|
+
if status == .didCrash {
|
|
317
|
+
UserDefaults.standard.set(true, forKey: "didCrashLastRun")
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
## Automatic Crash Reporting
|
|
324
|
+
|
|
325
|
+
When `enableCrashHandler = true` (default), the SDK installs:
|
|
326
|
+
|
|
327
|
+
- **Signal handlers** — SIGABRT, SIGBUS, SIGFPE, SIGILL, SIGSEGV, SIGTRAP
|
|
328
|
+
- **Mach exception handlers** — low-level kernel exceptions
|
|
329
|
+
- **C++ exception handlers** — `std::terminate` interception
|
|
330
|
+
- **Objective-C uncaught exception handler** — `NSSetUncaughtExceptionHandler`
|
|
331
|
+
|
|
332
|
+
> Warning: Always test crash reporting **without a debugger attached**. The debugger
|
|
333
|
+
> intercepts signals and prevents the SDK from capturing crashes.
|
|
334
|
+
|
|
335
|
+
### macOS — uncaught NSException reporting
|
|
336
|
+
|
|
337
|
+
```swift
|
|
338
|
+
SentrySDK.start { options in
|
|
339
|
+
options.dsn = "___PUBLIC_DSN___"
|
|
340
|
+
options.enableUncaughtNSExceptionReporting = true
|
|
341
|
+
}
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
### SIGTERM reporting (v8.27.0+)
|
|
345
|
+
|
|
346
|
+
```swift
|
|
347
|
+
options.enableSigtermReporting = true // report background task timeouts
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
## Scope API Quick Reference
|
|
351
|
+
|
|
352
|
+
```swift
|
|
353
|
+
SentrySDK.configureScope { scope in
|
|
354
|
+
scope.setTag(value: "v2", key: "api_version")
|
|
355
|
+
scope.removeTag(key: "api_version")
|
|
356
|
+
scope.setExtra(value: someObject, key: "debug_info")
|
|
357
|
+
scope.removeExtra(key: "debug_info")
|
|
358
|
+
scope.setContext(value: ["key": "value"], key: "my_context")
|
|
359
|
+
scope.removeContext(key: "my_context")
|
|
360
|
+
scope.setUser(User(userId: "12345"))
|
|
361
|
+
scope.setUser(nil)
|
|
362
|
+
scope.setLevel(.error)
|
|
363
|
+
scope.fingerprint = ["my-group-key"]
|
|
364
|
+
scope.addBreadcrumb(crumb)
|
|
365
|
+
scope.clear()
|
|
366
|
+
}
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
## Best Practices
|
|
370
|
+
|
|
371
|
+
- Set `releaseName` to a consistent value (e.g.,
|
|
372
|
+
`CFBundleShortVersionString + "+" + CFBundleVersion`) for regression tracking between
|
|
373
|
+
deployments
|
|
374
|
+
- Use `NSDebugDescriptionErrorKey` — not `NSLocalizedDescriptionKey` — for error user
|
|
375
|
+
info to avoid locale-based duplicate issues
|
|
376
|
+
- Use `beforeSend` to strip PII (`event.request?.cookies = nil`) when
|
|
377
|
+
`sendDefaultPii = false`
|
|
378
|
+
- Use `onLastRunStatusDetermined` only for lightweight operations (flag writes); heavy
|
|
379
|
+
logic risks a cascading crash
|
|
380
|
+
- Disable app hang tracking for **Widgets and Live Activities** to avoid false positives
|
|
381
|
+
- Use `initialScope` to set global context before the first event fires
|
|
382
|
+
|
|
383
|
+
## Troubleshooting
|
|
384
|
+
|
|
385
|
+
| Issue | Solution |
|
|
386
|
+
| ------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
|
|
387
|
+
| Crashes not appearing in Sentry | Test without debugger attached; debugger intercepts signals |
|
|
388
|
+
| Swift errors show “Code: 1” | Conform to `CustomNSError` and provide `NSDebugDescriptionErrorKey` in `errorUserInfo` |
|
|
389
|
+
| Duplicate issues from localization | Use `NSDebugDescriptionErrorKey`, not `NSLocalizedDescriptionKey` |
|
|
390
|
+
| App hang events too noisy | Raise `appHangTimeoutInterval`; or filter in `beforeSend` by exception type |
|
|
391
|
+
| HTTP errors not captured | Verify `enableCaptureFailedRequests = true` and `failedRequestStatusCodes` covers the status code |
|
|
392
|
+
| Screenshots contain PII | Enable `screenshot.maskAllText = true` and `screenshot.maskAllImages = true` (both default) |
|
|
393
|
+
| Events missing from `beforeSend` for transactions | `beforeSend` is for error/message events only; use `beforeSendSpan` for spans |
|
|
394
|
+
| `onLastRunStatusDetermined` not firing | SDK must be initialized on main thread; check `enableCrashHandler = true` |
|