Skip to main content
A lightweight, server-driven iOS SDK for identity verification with minimal configuration required. Latest version: 3.6.0.

GitHub Repository

View source code, releases, and the complete changelog on GitHub

Requirements

iOS Version Compatibility


Installation

The SDK ships in two flavors: Pick Full if your workflow scans the NFC chip on passports/eIDs. Pick Core if you only need document + face + liveness and want to avoid the NFC binary, CoreNFC runtime, and the App Store NFC demo-video review request. Add the package to your project using Xcode:
  1. Go to File > Add Package Dependencies
  2. Enter the repository URL:
  1. Select the version (or Up to Next Major from 3.6.0) and click Add Package
  2. When prompted to choose a product, pick DiditSDK (Full, NFC) or DiditSDKCore (no NFC)
Or in your Package.swift:
Then add one of these products to your target:

CocoaPods

DiditSDK is distributed as a binary podspec hosted in the repo (it is not on the public CocoaPods Trunk), so you must reference the podspec URL. Full SDK (with NFC, iOS 15.0+):
Core SDK (no NFC, iOS 13.0+):
Then run:
After pod install, open the generated .xcworkspace (not .xcodeproj).
Xcode 15+ rsync errors: If you see Operation not permitted rsync errors during build, set Build Settings → User Script Sandboxing (ENABLE_USER_SCRIPT_SANDBOXING) to No on the project for both Debug and Release.

Manual (XCFramework)

Download the frameworks from the GitHub Releases page, then drag the .xcframework folders into Xcode and set Embed & Sign.
  • Full SDK: DiditSDK.xcframework.zip + OpenSSL.xcframework.zip
  • Core SDK: DiditSDK-Core.xcframework.zip

Permissions

The SDK requires the following permissions. Add these to your app’s Info.plist:

Example Info.plist Entries

NFC Configuration

Required only when installing the Full SDK. Skip this section if you installed DiditSDK/Core (CocoaPods) or DiditSDKCore (SwiftPM). To enable NFC reading for passports and ID cards with chips:
  1. Add NFC Capability in Xcode:
    • Select your target → Signing & Capabilities+ CapabilityNear Field Communication Tag Reading
  2. Add ISO7816 Identifiers to Info.plist:
  1. Add Entitlements (in your .entitlements file):
Simulator Limitation (Full SDK only): The Full SDK links CoreNFC, and since Xcode 12 libnfshared.dylib is missing from simulators. See this Stack Overflow thread for a workaround. This does not apply when installing the Core SDK (DiditSDK/Core or DiditSDKCore). Test NFC features on physical devices only.

Quick Start

SwiftUI Integration

UIKit Integration


Integration Methods

The SDK supports two integration methods: No backend required. The SDK creates the session directly using your workflow ID from the Didit Console. The UniLink method (startVerification(workflowId:)) only supports vendorData; for any other session parameters use Method 2.
For vendorData to be attached to the session via UniLink, enable the Vendor Data option in the Didit Console.
Your backend creates the session via the Create Verification Session API (POST /v3/session/) with full parameter support (contact_details, expected_details, metadata, callback, etc.), then passes the session_token to the SDK.
This approach gives you full control over:
  • Associating sessions with your users (vendor_data)
  • Setting contact details and expected details for cross-validation
  • Setting custom metadata
  • Configuring callbacks per session This data (contact details, expected details, metadata, callback) is sent to the Create Verification Session API.

Configuration

Customize the SDK behavior with DiditSdk.Configuration:

Configuration Options

Theming & Colors: Colors, backgrounds, and intro screen settings are configured through your White Label settings in the Didit Console, not in the SDK configuration. This ensures consistent branding across all platforms.
Options showCloseButton, showExitConfirmation, and closeOnComplete match the Web SDK’s DiditSdkConfiguration. Mobile-specific options languageLocale and fontFamily exist because the mobile SDK renders the full verification UI natively (unlike the Web SDK which delegates to the hosted frontend inside an iframe).

Language Support

The SDK supports 53 languages. If no language is specified, the SDK uses the device locale with English as fallback.
View All Supported Languages →

Advanced Session Parameters

For advanced session parameters (contact_details, expected_details, metadata, callback), use the Backend Session method. Your backend calls the Create Verification Session API with full parameters, then passes the session_token to the SDK.

Handling Results

The VerificationResult enum provides the outcome of the verification:

Result Cases

SessionData Properties

Error Types

Complete Result Handling Example


Dismissing the Verification Programmatically

Available in DiditSDK 3.6.0+.
The host app can end an active verification programmatically with DiditSdk.shared.dismiss(). This is the recommended way to tear down the verification when the host needs to take over the screen — for example, when the app moves to the background.
dismiss() goes through the SDK’s normal completion pipeline: it dismisses the presented UI, resets internal state, and invokes the .diditVerification handler with .cancelled(session:) carrying the current sessionId if a session was created. It is a no-op when no verification is active.

Example: dismiss when the app backgrounds

Do not set DiditSdk.shared.isPresented = false to dismiss — the flag only triggers presentation on its rising edge and setting it to false is a no-op. Likewise, calling UIKit’s dismiss(animated:) on the topmost view controller is not supported: it bypasses the SDK’s completion pipeline so your .diditVerification handler is never fired.

Observing SDK State

You can observe the SDK state for custom loading UI:

End-to-End Example (Backend Session → iOS SDK → Result)

This pattern is the production-ready integration. Your backend creates the session, your iOS app receives the session_token, and the SDK runs the flow.

1. Backend — create the session

2. iOS — exchange and start the SDK

3. Backend — receive the final decision via webhook

The SDK result is convenient for UI feedback, but the authoritative outcome arrives via webhook. See the Webhooks guide for HMAC verification.

Complete SwiftUI Example