Перейти к основному содержанию
Легковесный iOS SDK для верификации личности, управляемый на стороне сервера, с минимальной настройкой. Последняя версия: 4.13.2.

Репозиторий на GitHub

Просмотреть исходный код, релизы и полный журнал изменений на GitHub

Нативный SDK: Это рекомендуемый подход для приложений iOS. Нативные SDK обеспечивают лучший пользовательский опыт, оптимизированную работу с камерой и полную поддержку NFC.


Требования

Совместимость версий iOS

Для биометрического согласия нужен нативный SDK 4.10.0 или новее. Для людей, на которых распространяются законы штатов Иллинойс, Техас или Колорадо, Didit может запросить явное биометрическое согласие перед первым захватом лица. iOS SDK версии 4.10.0 и новее показывают этот шаг. Более ранние версии не могут его показать: их сессии проходят как прежде, а решение фиксирует, что согласие не получено (biometric_consent.reason: "BIOMETRIC_CONSENT_UNSUPPORTED_SDK"). Обновитесь, если вы проверяете людей в этих штатах.

Установка

Начиная с 4.0.0, SDK поставляется в нескольких вариантах, чтобы ваше приложение добавляло в бинарный файл только те функции, которые использует. Выберите ровно один вариант: один subspec CocoaPods и один библиотечный продукт SwiftPM.
  • Core: наименьший размер, с автоматическим захватом документа и селфи на собственных легковесных детекторах Didit. Без OpenSSL.xcframework и без среды выполнения CoreNFC.
  • AutoDetection: устарел начиная с 4.11.0 и полностью идентичен Core. Используйте Core.
  • NFC: Core плюс считывание чипов NFC в паспортах и eID.
  • All: все функции. Это вариант по умолчанию, если вы устанавливаете DiditSDK без указания subspec или продукта.
Что каждый вариант добавляет в бандл приложения (arm64 Mach-O, измерено для 4.9.0): Core ~11.1 МБ, NFC ~11.7 МБ плюс ~4 МБ OpenSSL, AutoDetection ~16.0 МБ, All ~16.6 МБ плюс OpenSSL. Модели детекции загружаются во время выполнения и кешируются, поэтому они никогда не учитываются в размере загрузки вашего приложения. Начиная с 4.11.0, автоматический захват работает на собственных легковесных детекторах Didit во всех вариантах. TensorFlow Lite больше не входит в состав SDK, а фреймворк стал меньше, потому что его переводы загружаются извне бинарного файла. Начиная с 4.6.0, поставляемые фреймворки больше не содержат дескрипторов Swift ABI (метаданных сборки, которые Xcode копирует в каждое приложение, но никогда не читает) и обучающих видео, которые вариант не может воспроизвести. При обновлении с 4.5.4 или более ранней версии приложение уменьшится примерно на 7-8 МБ без каких-либо изменений в коде. App Store сжимает бинарные файлы при доставке, поэтому стоимость загрузки по воздуху ниже. Точную разницу для каждого устройства смотрите в отчёте о размере приложения в App Store Connect.
Варианты NFC и All содержат OpenSSL.xcframework (OpenSSL 3.3.3, поставляется как OpenSSL-Universal 3.3.3001 через NFCPassportReader), который необходим для аутентификации чипа NFC и требует iOS 15.0+. Релизы до 4.0.6 включительно содержали OpenSSL 1.1.1s; 4.0.7 и более поздние поставляются с OpenSSL 3.3.3, собственным манифестом конфиденциальности и подписью кода. Всегда устанавливайте 4.0.7 или более позднюю версию. Обратите внимание: обновление выравнивает версии OpenSSL, но не устраняет конфликты при встраивании. Если другая зависимость вашего приложения тоже встраивает OpenSSL.framework (то же имя файла, тот же bundle id com.github.krzyzanowskim.OpenSSL), две копии конфликтуют на этапе встраивания независимо от версии. Оставьте ровно одну копию: например, переопределите другой пакет по идентификатору SPM, чтобы использовать опубликованный Didit OpenSSL.xcframework, и тогда в бандле будет именно тот бинарный файл, с которым собран этот SDK. Варианты Core и AutoDetection не подключают OpenSSL вообще.
import DiditSDK в коде вашего приложения одинаков независимо от того, какой вариант вы установили.

Swift Package Manager (рекомендуется)

Добавьте пакет в проект через Xcode:
  1. Откройте File > Add Package Dependencies
  2. Введите URL репозитория:
  1. Выберите версию (или Up to Next Major начиная с 4.13.2) и нажмите Add Package
  2. Когда появится запрос на выбор продукта, выберите ровно один библиотечный продукт для вашего варианта (см. таблицу выше)
Или в вашем Package.swift:
Затем добавьте в таргет ровно один из этих продуктов:
Swift Package Manager не проверяет минимум iOS 15 за вас. Package.swift объявляет platforms: [.iOS(.v13)] для всего пакета, поэтому Xcode без возражений позволит добавить DiditSDK или DiditSDKNFC в таргет iOS 13 или 14. Однако оба продукта содержат OpenSSL.xcframework и читают чипы через NFCPassportReader, что требует iOS 15.0+. При использовании продукта All или NFC установите deployment target таргета на 15.0 самостоятельно. CocoaPods делает это автоматически через deployment_target subspec.

CocoaPods

DiditSDK распространяется как бинарный podspec, размещённый в репозитории (в публичном CocoaPods Trunk его нет), поэтому нужно указать URL podspec. Выберите ровно один subspec:
Core и AutoDetection поддерживают iOS 13; NFC и All требуют iOS 15 из-за NFCPassportReader. Затем выполните:
После pod install откройте сгенерированный .xcworkspace, а не .xcodeproj.
Ошибки rsync в Xcode 15+: если во время сборки появляются ошибки rsync Operation not permitted, установите Build Settings → User Script Sandboxing (ENABLE_USER_SCRIPT_SANDBOXING) в значение Нет для проекта, и для Debug, и для Release.

Ручная установка (XCFramework)

Каждый релиз публикует по одному XCFramework на каждый вариант. Скачайте архивы для вашего варианта со страницы GitHub Releases, затем перетащите папки .xcframework в Xcode и выставьте Embed & Sign.

Permissions

Для работы SDK требуются следующие разрешения. Добавьте их в Info.plist вашего приложения:

Примеры записей Info.plist

Настройка NFC

Требуется только при установке варианта NFC или All. Пропустите этот раздел, если вы установили вариант Core или AutoDetection. Чтобы включить считывание NFC для паспортов и ID-карт с чипами:
  1. Добавьте возможность NFC в Xcode:
    • Выберите цель → Signing & Capabilities → + Capability → Near Field Communication Tag Reading
  2. Добавьте идентификаторы ISO7816 в Info.plist:
D392F000260100000001 позволяет SDK считывать карту My Number Card (Япония) через JPKI: без него iOS не передает карту в SDK. Считывание карт My Number Card пока не включено в продакшн-среде, а этот идентификатор не влияет на другие документы, поэтому его можно добавить уже сейчас.
  1. Добавьте права (в файл .entitlements):
Ограничение симулятора (варианты NFC и All): эти варианты подключают CoreNFC, и начиная с Xcode 12 библиотека libnfshared.dylib отсутствует в симуляторах. Обходное решение см. в этой ветке Stack Overflow. Это не относится к варианту Core или AutoDetection. Тестируйте функции NFC только на физических устройствах.

Проверка в App Store (варианты NFC и All): если вы установили вариант NFC или All, Apple может запросить демонстрационное видео во время проверки, поскольку код, связанный с NFC, входит в бинарный файл SDK, даже если ваш сценарий не использует NFC. Запросите наше демонстрационное видео с NFC, чтобы отправить его в Apple, по адресу support@didit.me. Это не относится к варианту Core или AutoDetection.


Быстрый старт

Интеграция SwiftUI

Интеграция UIKit


Методы интеграции

SDK поддерживает два метода интеграции: Бэкенд не требуется. SDK создает сессию напрямую, используя ваш ID сценария из Didit Console. Метод UniLink (startVerification(workflowId:)) поддерживает только vendorData; для любых других параметров сессии используйте Метод 2.
Чтобы vendorData передавался в сессию через UniLink, включите опцию Vendor Data в Didit Console.

Метод 2: сессия на бэкенде (рекомендуется для продакшн-среды)

Ваш бэкенд создает сессию через Create Verification Session API (POST /v3/session/) с полной поддержкой параметров (contact_details, expected_details, metadata, callback и др.), затем передает session_token в SDK.
Этот подход дает полный контроль над:
  • Связыванием сессий с вашими пользователями (vendor_data)
  • Заданием контактных данных и ожидаемых данных для перекрестной проверки
  • Заданием пользовательских метаданных
  • Настройкой обратного вызова для каждой сессии
Эти данные (контактные данные, ожидаемые данные, метаданные, обратный вызов) отправляются в Create Verification Session API.

Configuration

Настройте поведение SDK с помощью DiditSdk.Configuration:

Параметры конфигурации

Параметры камеры

Параметры камеры совпадают с параметрами камеры Web SDK. Каждый объектив обозначается значением .front или .back. Если на устройстве нет запрошенного объектива, SDK использует первую камеру, которая у него есть. Переключатель камеры также скрыт на устройствах с одной камерой. Установите параметр переключателя в false, чтобы зафиксировать пользователя на объективе по умолчанию для этого шага.
Оформление и цвета: цвета, фоны и настройки вступительного экрана задаются в ваших настройках White label в Didit Console, а не в конфигурации SDK. Так брендинг остаётся одинаковым на всех платформах.
Параметры showLanguageSelector, showCloseButton, showExitConfirmation и closeOnComplete совпадают с конфигурацией DiditSdkConfiguration в Web SDK. Параметры languageLocale и fontFamily есть только в мобильном SDK, потому что он отображает весь интерфейс верификации нативно (в отличие от Web SDK, который делегирует отображение размещённому фронтенду внутри iframe).

Поддержка языков

SDK поддерживает 54 языка. Если язык не указан, SDK использует локаль устройства, а запасным вариантом служит английский.
Все поддерживаемые языки →

Расширенные параметры сессии

Для расширенных параметров сессии (contact_details, expected_details, metadata, callback) используйте метод Backend Session. Ваш бэкенд вызывает API создания сессии верификации с полным набором параметров, а затем передаёт session_token в SDK.

Обработка результатов

Перечисление VerificationResult содержит результат верификации:

Варианты результата

Свойства SessionData

Типы ошибок

Потеря соединения

Если устройство теряет соединение во время верификации, SDK показывает поверх процесса экран «Нет подключения к интернету» вместо того, чтобы оставлять шаг в состоянии загрузки. SDK продолжает проверять соединение в фоновом режиме и сам закрывает экран, как только Didit снова становится доступен. Пользователь продолжает с того шага, на котором находился. На экране есть кнопки Повторить попытку и, если showCloseButton равен true (по умолчанию), Выйти из верификации. Выход завершает верификацию с результатом .failed(error: .networkError, session:), поэтому ваше приложение узнаёт, что пользователь ушёл из-за соединения.

Полный пример обработки результата


Программное закрытие верификации

Доступно в DiditSDK 3.6.0+.
Приложение-хост может программно завершить активную верификацию с помощью DiditSdk.shared.dismiss(). Это рекомендуемый способ остановить верификацию, когда хосту нужно взять управление экраном, например при переходе приложения в фон.
dismiss() проходит обычный конвейер завершения SDK: он закрывает показанный интерфейс, сбрасывает внутреннее состояние и вызывает обработчик .diditVerification с .cancelled(session:), содержащим текущий sessionId, если сессия была создана. Если верификация не активна, вызов ничего не делает.

Пример: закрытие при переходе приложения в фон

Не устанавливайте DiditSdk.shared.isPresented = false для закрытия: флаг запускает показ только по фронту нарастания, а установка значения false ничего не делает. Также не поддерживается вызов dismiss(animated:) из UIKit для контроллера верхнего уровня: он обходит конвейер завершения SDK, поэтому обработчик .diditVerification не будет вызван.

Наблюдение за состоянием SDK

Можно отслеживать состояние SDK для собственного интерфейса загрузки:

Сквозной пример (сессия на бэкенде → iOS SDK → результат)

Этот подход готов к продакшну. Бэкенд создаёт сессию, iOS-приложение получает session_token, а SDK запускает процесс.

1. Бэкенд: создание сессии

2. iOS: обмен токеном и запуск SDK

3. Бэкенд: получение итогового решения через webhook

Результат SDK удобен для обратной связи в интерфейсе, но официальное решение приходит через webhook. Подробности о проверке HMAC см. в руководстве по webhook.

Полный пример на SwiftUI


Последнее изменение 7 ноября 2026 г.