Skip to main content
On iOS and Android, Corbado Observe runs as a native SDK inside your app. It follows the same split as the data layer on web, in process instead of through a queue: the SDK captures what your code cannot see, your screens forward a few facts through typed hooks, and one adapter module in your app emits the Observe events for your flows, decisions and subflow steps. Corbado calls this Autocapture Light: your app exposes facts, the mapping interprets them. There is no script-only mode on native, so the hooks are always part of the app and updates ship with your releases.
Both SDKs send into the same data model as the web SDK, so app and web journeys land in the same project and the same funnels. Keep the channels apart with applications.

1. Install

Swift Package Manager, iOS 15 or newer, Swift 6, no third-party dependencies. The package is public on GitHub.

2. What the SDK captures on its own

  • System sheets and biometrics. The app’s active-state churn around passkey sheets, Face ID and Touch ID prompts and password fills, while a ceremony runs or a field is focused.
  • Autofill and credential manager evidence. On Android the optional autofill observer reports field types and value lengths. Values are never read.
  • Device context. OS version, device model, app version, locale, screen size and the device-owner authentication capability, probed without a prompt and throttled to about once a minute.
  • Delivery. Events are batched into a durable on-disk outbox that survives process death, sent with retries, flushed once more when the app leaves the foreground and recovered on the next launch.

3. What your screens forward

Your code forwards facts through typed hooks. It never forwards values. The typed operations carry the exact vocabulary the classifier expects, so prefer them over hand-rolled events. Both SDKs also offer an untyped operation for anything the typed ones do not cover.

4. Keep the mapping in one module

The hooks above are the facts. Where they become Observe events is a design choice, and it is the choice that decides how maintainable the integration stays. Keep it in one adapter module of your app:
  • Screens report what happened to the adapter: which screen is shown, which control was chosen, the field evidence, the ceremony and request results.
  • Only the adapter calls the SDK. It holds the decision names, the spec types, the flow boundaries and the rules from the modeling method.
  • Screens carry no tracking state of their own.
This is the same separation as the mapping on web. Corbado can review that module with you and supply concrete patches, and because it is one module, a tracking correction is one change in one place. Updates ship with your app releases. Initialize the SDK at app start. Consent decides what is recorded and sent:
The same controls exist in Swift. Undelivered events stay in the outbox for recovery on the next launch.

6. Verify

Run a journey with debug logging on and note the session id from getSessionId(). Then check the backend side with the Observe CLI through events-feed, classify and classification-errors, or in the console under Observe → Debugging → Integration with the Process button. See Verify your integration. The Chrome extension does not apply to native apps.

7. Next steps

Model your journeys

The rules the adapter module implements.

Subflows

The operations and their steps.

Applications

Keep web, iOS and Android comparable in one project.

Verify your integration

Confirm events arrive before you ship.