EverframeKmpConfig(appId, sdkKey) starts in production by default. Pass
environment = "development" or "staging" to target those environments.
The native release SDK selects the ingest endpoint.
The Kotlin/JS browser driver accepts only production; it returns a failed
start for staging or development rather than sending to a production Web SDK
bundle. The browser host supplies the Web SDK initializer and a masked visual
provider.
Native evidence
The bridge disables automatic screenshots, while the native reporter takes a manual screenshot. Android records bounded, masked image frames; iOS uses native video replay. Replay is attached when enabled for the integration in the dashboard. The host must mark sensitive UI and verify its capture geometry. Android rejects a reporter screenshot when no sensitive markers are available unless the host explicitly allows a known-safe route.
Crash capture and network metadata are enabled. On Android, the native SDK reports Java and Kotlin crashes, and native crashes and ANRs on Android 11 and later. On iOS, the native SDK reports native crashes. Request and response bodies are disabled through this bridge. The native SDK supplies device and app context. No screen-recording permission is needed.
On web, createCanvasVisualCapture copies the host canvas, masks rectangles
supplied in canvas pixel coordinates, and creates bounded image replay. The
browser reporter handles delivery and retry. Capture rejects missing or invalid
mask geometry unless the host explicitly allows a known-safe screen; there is
no DOM screenshot fallback.
Shared Kotlin calls
| Call | What it records |
|---|---|
recordScreen(name) | A screen name chosen by the host |
captureHandledError("catalog_load_failed") | A handled failure with a stable, safe code |
captureException(error) | A caught Kotlin failure through the native handled-error path |
recordNetworkOperation("catalog_fetch", "GET", 503, 42) | A bounded network breadcrumb without URL, headers, or body |
openReporter { outcome -> ... } | A native report with a submitted, queued, cancelled, or failed outcome |
Call these after start succeeds. The iOS driver uses the native Swift SDK’s
handled-error path. Avoid placing private data in exception messages. The
Android and iOS simulator probes delivered reports to a local dashboard;
physical-device privacy and production delivery still need validation.
Quick capture
Quick capture is not available in KMP apps yet: sessions start with screenshots off, so captures are ignored.