GitHub 저장소
GitHub에서 소스 코드, 릴리스, 전체 변경 로그를 확인하세요
네이티브 SDK: iOS 앱에는 이 방식을 권장합니다. 네이티브 SDK는 최고의 사용자 경험, 최적화된 카메라 처리, 전체 NFC 지원을 제공합니다.
요구 사항
iOS 버전 호환성
생체 정보 동의에는 네이티브 SDK 4.10.0 이상이 필요합니다. Illinois, Texas 또는 Colorado 주법이 적용되는 사용자의 경우, Didit은 첫 얼굴 촬영 전에 명시적인 생체 정보 동의를 요청할 수 있습니다. iOS SDK 4.10.0 이상 버전은 해당 단계를 표시합니다. 이전 버전은 해당 단계를 표시할 수 없습니다. 이 경우 세션은 이전과 같이 진행되며, 결정 결과에는 동의가 수집되지 않은 것으로 보고됩니다(
biometric_consent.reason: "BIOMETRIC_CONSENT_UNSUPPORTED_SDK"). 해당 주의 사용자를 인증한다면 업그레이드하십시오.설치
4.0.0부터 SDK는 여러 설치 가능한 변형으로 제공되므로, 앱은 사용하는 기능만큼만 바이너리 용량을 부담합니다. 변형은 하나만 선택하세요. CocoaPods 서브스펙 하나와 SwiftPM 라이브러리 제품 하나를 선택합니다.
- Core: 가장 작은 용량이며, Didit 자체의 경량 감지기로 문서와 셀피를 자동으로 촬영합니다.
OpenSSL.xcframework와 CoreNFC 런타임이 포함되지 않습니다. - AutoDetection: 4.11.0부터 지원 중단되었으며 Core와 동일합니다. Core를 대신 사용하세요.
- NFC: Core에 NFC 여권/eID 칩 읽기 기능을 더한 변형입니다.
- All: 모든 기능을 포함합니다. 서브스펙이나 제품 이름을 지정하지 않고
DiditSDK를 설치하면 이 변형이 기본값으로 선택됩니다.
4.9.0 기준 측정)은 다음과 같습니다. Core 약 11.1 MB, NFC 약 11.7 MB와 OpenSSL 약 4 MB, AutoDetection 약 16.0 MB, All은 약 16.6 MB이며 OpenSSL도 추가됩니다.
감지 모델은 런타임에 다운로드되어 캐시되므로, 앱의 다운로드 크기에는 포함되지 않습니다.
4.11.0부터 자동 촬영은 모든 변형에서 Didit 자체의 경량 감지기로 실행됩니다. TensorFlow Lite는 더 이상 SDK에 포함되지 않으며, 번역 텍스트를 바이너리 외부에서 로드하므로 프레임워크 크기가 줄었습니다.
4.6.0부터 배포되는 프레임워크에는 Swift ABI 디스크립터(Xcode가 모든 앱에 복사하지만 읽지 않는 빌드 메타데이터)와 해당 변형에서 재생할 수 없는 튜토리얼 동영상이 포함되지 않습니다. 4.5.4 이하에서 업그레이드하면 코드를 바꾸지 않아도 앱 크기가 약 7-8 MB 줄어듭니다.
App Store는 바이너리를 압축해 전송하므로 실제 다운로드 비용은 더 낮습니다. 기기별 정확한 차이는 App Store Connect의 앱 크기 보고서에서 확인하세요.
NFC 및 All 변형에는
OpenSSL.xcframework(OpenSSL 3.3.3, NFCPassportReader를 통해 OpenSSL-Universal 3.3.3001로 배포)가 번들되며, NFC 칩 인증에 필요하고 iOS 15.0+가 필요합니다. 4.0.6까지의 릴리스에는 OpenSSL 1.1.1s가 번들되었고, 4.0.7부터는 자체 개인정보 보호 매니페스트와 코드 서명이 포함된 OpenSSL 3.3.3이 배포됩니다. 항상 4.0.7 이상을 설치하세요. 업그레이드하면 OpenSSL 버전은 맞춰지지만, 앱의 다른 의존성도 OpenSSL.framework(같은 파일 이름, 같은 com.github.krzyzanowskim.OpenSSL 번들 ID)를 임베드하면 버전과 관계없이 임베드 단계에서 충돌이 발생합니다. 사본은 하나만 유지하세요. 예를 들어 SPM 식별자로 다른 패키지를 재정의해 Didit이 배포한 OpenSSL.xcframework를 사용하면, 번들에 든 바이너리가 이 SDK를 빌드할 때 사용한 바이너리와 같아집니다. Core 및 AutoDetection 변형은 OpenSSL을 전혀 링크하지 않습니다.import DiditSDK는 동일합니다.
Swift Package Manager (권장)
Xcode로 프로젝트에 패키지를 추가하세요.- File > Add Package Dependencies로 이동합니다.
- 저장소 URL을 입력합니다.
- 버전을 선택하거나(
4.13.2부터는 Up to Next Major), Add Package를 클릭합니다. - 제품을 선택하라는 메시지가 나오면 변형에 맞는 라이브러리 제품을 하나만 고르세요(위 표 참조).
Package.swift에 다음과 같이 작성하세요.
CocoaPods
DiditSDK는 저장소에 호스팅되는 바이너리 podspec으로 배포되며 공개 CocoaPods Trunk에는 없으므로, podspec URL을 직접 지정해야 합니다. 서브스펙을 하나만 고르세요.
Core와 AutoDetection은 iOS 13까지 배포할 수 있습니다. NFC와 All은 NFCPassportReader 때문에 iOS 15가 필요합니다.
그다음 다음 명령을 실행하세요.
pod install 후에는 .xcodeproj가 아니라 생성된 .xcworkspace를 여세요.Xcode 15+ rsync 오류: 빌드 중
Operation not permitted rsync 오류가 나타나면, 프로젝트의 Build Settings → User Script Sandboxing(ENABLE_USER_SCRIPT_SANDBOXING)을 Debug와 Release 모두에서 아니요로 설정하세요.수동 설치 (XCFramework)
각 릴리스는 변형마다 하나의 XCFramework를 배포합니다. 변형에 맞는 zip 파일을 GitHub 릴리스 페이지에서 내려받은 뒤,.xcframework 폴더를 Xcode로 끌어다 놓고 Embed & Sign을 설정하세요.
권한
SDK에는 다음 권한이 필요합니다. 앱의Info.plist에 다음 항목을 추가하세요.
Info.plist 항목 예시
NFC 설정
NFC 또는 All 변형을 설치한 경우에만 필요합니다. Core 또는 AutoDetection 변형을 설치한 경우 이 섹션을 건너뛰세요. 칩이 있는 여권 및 신분증의 NFC 읽기를 활성화하려면 다음 단계를 따르세요.-
Xcode에서 NFC 기능 추가:
- 대상을 선택한 다음 Signing & Capabilities → + Capability → Near Field Communication Tag Reading을 선택하세요.
-
Info.plist에 ISO7816 식별자 추가:
D392F000260100000001을 사용하면 SDK가 JPKI를 통해 일본 마이넘버 카드를 읽을 수 있습니다. 이 식별자가 없으면 iOS는 해당 카드를 SDK에 보고하지 않습니다. 마이넘버 카드 읽기는 아직 프로덕션에서 활성화되어 있지 않으며, 이 식별자는 다른 문서에는 영향을 주지 않으므로 지금 추가해도 됩니다.
- Entitlements 추가(
.entitlements파일에서):
App Store 심사(NFC 및 All 변형): NFC 또는 All 변형을 설치하면 NFC 관련 코드가 SDK 바이너리에 포함되므로, 워크플로에서 NFC를 사용하지 않더라도 Apple이 심사 중 데모 영상을 요청할 수 있습니다. Apple에 제출할 NFC 데모 영상은 support@didit.me로 요청하세요. 이 내용은 Core 또는 AutoDetection 변형에는 적용되지 않습니다.
빠른 시작
SwiftUI 연동
UIKit 연동
연동 방법
SDK는 두 가지 연동 방법을 지원합니다.방법 1: UniLink (가장 간단함)
백엔드가 필요하지 않습니다. SDK는 Didit 콘솔에서 가져온 워크플로 ID를 사용하여 세션을 직접 생성합니다. UniLink 방법(startVerification(workflowId:))은 vendorData만 지원합니다. 다른 세션 파라미터가 필요하면 방법 2를 사용하세요.
UniLink를 통해 세션에
vendorData를 연결하려면 Didit 콘솔에서 벤더 데이터 옵션을 활성화하세요.방법 2: 백엔드 세션 (프로덕션 권장)
백엔드가 인증 세션 생성 API(POST /v3/session/)를 통해 세션을 생성하며, 모든 파라미터(contact_details, expected_details, metadata, callback 등)를 지원합니다. 그런 다음 session_token을 SDK에 전달합니다.
- 세션을 사용자와 연결 (
vendor_data) - 교차 검증을 위한 연락처 정보 및 예상 정보 설정
- 사용자 지정 메타데이터 설정
- 세션별 콜백 구성 이 데이터(연락처 정보, 예상 정보, 메타데이터, 콜백)는 인증 세션 생성 API로 전송됩니다.
구성
DiditSdk.Configuration으로 SDK 동작을 맞춤 설정합니다:
구성 옵션
카메라 옵션
카메라 옵션은 Web SDK 카메라 옵션과 일치합니다. 각 렌즈는.front 또는 .back입니다.
기기에 요청한 렌즈가 없으면 SDK는 사용 가능한 첫 번째 카메라를 사용합니다.
카메라가 하나뿐인 기기에서는 카메라 전환 버튼도 표시되지 않습니다.
전환 옵션을 false로 설정하면 사용자를 해당 단계의 기본 렌즈에 고정할 수 있습니다.
테마 및 색상: 색상, 배경, 인트로 화면 설정은 SDK 구성이 아니라 Didit Console의 화이트 라벨 설정에서 구성합니다. 이렇게 하면 모든 플랫폼에서 브랜딩이 일관되게 유지됩니다.
showLanguageSelector, showCloseButton, showExitConfirmation, closeOnComplete 옵션은 Web SDK의 DiditSdkConfiguration과 일치합니다. 모바일 전용 옵션인 languageLocale과 fontFamily는 모바일 SDK가 전체 인증 UI를 네이티브로 렌더링하기 때문에 존재합니다(iframe 안에서 호스팅 프론트엔드에 렌더링을 맡기는 Web SDK와 다릅니다).언어 지원
SDK는 54개 언어를 지원합니다. 언어를 지정하지 않으면 SDK는 기기 로케일을 사용하고, 대체 언어로 영어를 사용합니다.고급 세션 파라미터
고급 세션 파라미터(contact_details, expected_details, metadata, callback)를 사용하려면 Backend Session 방식을 사용하세요. 백엔드가 전체 파라미터와 함께 Create Verification 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의 일반 완료 파이프라인을 거칩니다. 표시 중인 UI를 닫고, 내부 상태를 초기화하며, 세션이 생성되었다면 현재 sessionId를 담은 .cancelled(session:)으로 .diditVerification 핸들러를 호출합니다. 활성 인증이 없으면 아무 동작도 하지 않습니다.
예제: 앱이 백그라운드로 전환될 때 종료하기
SDK 상태 관찰하기
커스텀 로딩 UI를 구현하기 위해 SDK 상태를 관찰할 수 있습니다:엔드 투 엔드 예제 (백엔드 세션 → iOS SDK → 결과)
이 방식은 프로덕션 환경에 바로 적용할 수 있는 연동 패턴입니다. 백엔드에서 세션을 생성하고, iOS 앱이session_token을 받아 SDK가 인증 흐름을 실행합니다.