The Incode iOS SDK (IncdOnboarding) adds end-to-end identity verification (IDV) to your app. The UI supports custom themes, so IDV looks and feels like your product. The iOS SDK exposes a single public entry point, IncdOnboardingManager.shared, and is organized into modules (capture and verification steps). Those modules are orchestrated into flows and presented to the end user, with results delivered back to your app through the IncdOnboardingDelegate. The SDK ships as an IncdOnboarding.xcframework through Swift Package Manager, CocoaPods, or a manual binary. This page explains what the SDK can do and how it works.
Capabilities
The Incode iOS SDK supports:
- Identity capture: ID scan, document capture, and Optical Character Recognition (OCR) data extraction.
- Liveness and biometrics: Selfie capture, video selfie, liveness detection, and face match.
- NFC: Data extraction from Near Field Communication (NFC) chips in passports and supported ID documents.
- Compliance and risk: Government validation, watchlist screening, and antifraud analysis.
- Data collection: Consents, electronic signatures, phone and email, geolocation, and custom forms.
- Customization: Theming, localization, and custom assets so the IDV experience matches your brand.
Integration Approaches
The SDK supports three integration paths, each offering a different level of UI control. Start with the simplest path that meets your requirements.
- Full Onboarding Flow: The SDK owns the full UI from start to finish. Run a Dashboard-defined Flow or Workflow (
startFlow/startWorkflow), or a flow you define in code (startOnboarding). - Section-by-Section: You own the order of steps and the screens between them, running one section at a time (
startOnboardingSection). - Capture-Only: You own the UI before and after capture; Incode owns only the capture UI. See Capture-Only Mode.
For the full breakdown of how a flow is defined and executed, see Integration Approaches.
Runtime Modes
The mode controls when and whether captured data is sent to Incode for processing. Regardless of the integration path you choose, the SDK runs in one of three modes, selected through the SDKMode value on IncdOnboardingManager.shared:
- Standard (
.standard): Captures and submits to the Incode backend as IDV runs; results are returned through the delegate. The default. - Capture-Only (
.captureOnly): Captures on-device without sending anything to Incode. You submit from your back end. - Submit-Only (
.submitOnly): Submits previously captured data without showing capture UI.
IncdOnboardingManager.shared.sdkMode = .standard
In the Public distribution variant, captureOnly is restricted and reverts to standard.
See SDK Modes for where sdkMode sits among the SDK's other configuration properties.
Distribution and Variants
The SDK is distributed as IncdOnboarding.xcframework through three channels: Swift Package Manager, CocoaPods, or a manual binary. It ships in build variants. A variant is a linking type plus a set of optional features. Not every module is compiled into every variant, and calling an API for a feature that is not included triggers a runtime variant assertion. Pin the exact variant version; there is no Bill of Materials. Choose the smallest variant that includes the features your flow needs to keep binary size down.
| Variant Suffix | Type | Description |
|---|---|---|
-d |
Linking | Dynamic linking. The default. |
-s |
Linking | Static linking. Required for On-Demand Resources (ODR). |
-vc |
Feature | Video Conference and streaming. |
-l |
Feature | Local face login and authentication. |
-nfc |
Feature | NFC document scan. |
-ra |
Feature | Risk Analysis. |
-sna |
Feature | Silent Network Authentication. |
-tri |
Feature | Transactional Risk Intelligence. |
-m |
Feature | Local face mask check (removed since 5.19.0; now included in all variants) |
A variant version reads as MAJOR.MINOR.PATCH-LinkingType[-Feature…]: for example, 5.31.0-d (dynamic) or 5.31.1-d-l (dynamic + login). See Installation.
Device Requirements
The SDK runs on physical iOS devices that meet the following minimum requirements:
- Minimum iOS version: iOS 13.0
- Camera: Required for the ID Capture, Selfie, Face Authentication, Video Conference, and Video Selfie modules.
- Microphone: Required for the Video Conference module. Required for the Video Selfie module when audio or voice consent is enabled.
- Location: Required for the Geolocation module.
- NFC hardware: Required for the NFC module, on NFC-capable devices and only in the NFC (
-nfc) variant. - Network: An active HTTPS connection to the Incode Platform.
Declare the matching Info.plist usage keys for the capabilities your flow uses. See Installation.
Data Handling and Privacy
The SDK runs the on-device half of identity verification. At a high level:
- On-device capture and inference: ID images, selfie and liveness video, and NFC chip data are captured on the device. On-device ML models extract their features locally. These models cover liveness detection, presentation-attack detection, face recognition, ID face detection, face occlusion, and age estimation.
- Encrypted transmission: Artifacts and verification requests are sent to the Incode Platform over an encrypted channel. You can also enforce end-to-end encryption, which uses Apple's native cryptography (RSA-OAEP with SHA-256 for key exchange and AES-GCM via CryptoKit for payloads). See Security.
- No sensitive logging: The SDK does not log personally identifiable information (PII) or capture content. It ships a privacy manifest (
PrivacyInfo.xcprivacy) declaring no tracking. - Server-authoritative result: The Incode Platform holds the authoritative verification result for your back end to consume server-side. The SDK reports each module's outcome to your app through the
IncdOnboardingDelegate. - Transient local state: The SDK keeps only transient, encrypted session state on the device. Call
deleteLocalUserData()when you are finished with a session.
What's Next
Use the table below to find the page you need.
| Task | Page |
|---|---|
| Learn the correct order of steps to set up the SDK | Getting Started |
| Add the SDK to your project | Installation |
| Choose how your flow is defined and executed | Integration Approaches |
| Capture data without sending it to Incode | Capture-Only Mode |
| Browse modules and their configuration options | Modules |
| Read documents via NFC | NFC |
| Customize colors, fonts, and text | Customization |
| Add fraud and risk signals to your flow | Risk Analysis |
| Solve a build problem | Troubleshooting |
| Browse the full public API | API Reference |
| Look up result and error objects by module | Results |
| Secure the integration (E2EE, SSL pinning) | Security |
| Upgrade an existing integration | Migration Guide |
| Check what changed in a release | iOS SDK Release Notes |
For help, contact your enterprise customer success manager or email help@incode.com.