Getting started with iOS SDK
The minimum version of IOS, supported by the SDK is 13.0.
If Apple Review team asks for the privacy manifest file, that is missing in our SDK. Please update it to version 8.4.2 We have updated the lottie-ios library, that causes this issue and the privacy manifest file will be included.
During the review process of your app, Apple might ask you to describe NFC usage in your app, even if you don't have NFC feature enabled. To successfully pass the verification, try to send them this video, which shows NFC usage in the KYC flow. If Apple still does not confirm, contact us for further communication.
iDenfy identity verification flow
Below you can check a full regular flow.
This flow can be customized and success results can be omitted as well. We recommend omitting them using our immediate redirect feature.

Obtaining verification token
The SDK requires a verification token for starting initialization. Look at verification token generation guide.
Providing permissions
NSCameraUsageDescription must be provided in the application's Info.plist file:
<key>NSCameraUsageDescription</key>
<string>Required for document and facial capture</string>
Adding the SDK dependency
We recommend using Swift Package Manager, since it is quicker to setup and causes less issues.
Swift Package Manager
1. Add a pacakge
You can add it to your project with the following package repositories. You need to choose only one SDK option.
Base iDenfySDK dependency:
- iDenfySDK - https://github.com/idenfy/iDenfySDK-spm.git
iDenfySDK with Advanced Liveness detection feature:
- iDenfySDK/iDenfyLiveness - https://github.com/idenfy/iDenfyLiveness-spm.git
iDenfySDK with Advanced Liveness detection and Document blur glare detection features:
- iDenfySDK/iDenfyBlurGlareDetection - https://github.com/idenfy/iDenfyBlurGlareDetection-spm.git
iDenfySDK with Advanced Liveness detection, Document blur glare detection and NFC Reading features:
- iDenfySDK/iDenfyNFCReading - https://github.com/idenfy/iDenfyNFCReading-spm.git
iDenfySDK with Advanced Liveness detection, Document blur glare detection, NFC Reading and Document Auto Capture features:
- iDenfySDK/iDenfyRecognition - https://github.com/idenfy/iDenfyRecognition-spm.git
We strongly recommend to choose an exact version of the latest SDK
2. Select the library
Choose either static or dynamic versions of the SDK and add the package

If you are using dynamic framework, please make sure you have embedded & signed it to your application

To use the localized version of the liveness feature add FaceTec.strings to your app module. Otherwise, the localization will not work. Idenfy Assets are can be found in the following url Strings are located in ../IdenfyAssets/IdenfyStrings folder.
CocoaPods
1. Add dependency
Add the following line to your PodFile line with the latest version. The latest version is accessible from the changelog.
Base iDenfySDK dependency:
pod 'iDenfySDK', '8.6.3'
iDenfySDK with Advanced Liveness detection feature:
pod 'iDenfySDK/iDenfyLiveness', '8.6.3'
iDenfySDK with Advanced Liveness detection and Document blur glare detection features:
pod 'iDenfySDK/iDenfyBlurGlareDetection', '8.6.3'
iDenfySDK with Advanced Liveness detection, Document blur glare detection and NFC Reading features:
pod 'iDenfySDK/iDenfyNFCReading', '8.6.3'
iDenfySDK with Advanced Liveness detection, Document blur glare detection, NFC Reading and Document Auto Capture features:
pod 'iDenfySDK/iDenfyRecognition', '8.6.3'
If you are not overriding any custom views or applying customization, you can use the dynamic version. If you did make layout changes, don't use dynamic version, since runtime crashes can occur. If you understand the disadvantages and still want to use the latest version integrate the SDK in the following way:
pod 'iDenfySDK/iDenfyLiveness'
2. Update pods
Run pod install
to install iDenfySDK or pod update
to update the current iDenfySDK.
After installing the SDK you may face some compile errors related to cocoapods. To solve them, please read the troubleshooting guide.
Manual
1. Download iDenfySDK
Download latest iDenfySDK build.
2. Include required modules
Copy all frameworks from the IdenfyLiveness folder into your app target folder.
To use the localized version of the liveness feature add FaceTec.strings to your app module. Otherwise, the localization will not work. Strings are located in ../iDenfySDK/IdenfyAssets/IdenfyStrings.
3. Embed & Sign
Embed & Sign included frameworks.

4. Include internal dependencies
iDenfySDK uses several internal dependencies. Your project should also include those dependencies using CocoaPods or in any other preferred way.
If you face compile issues please read the troubleshooting guide.
Troubleshooting compile errors
If your application uses Objective-C bridging headers you might face the following compile error: using bridging headers with module interfaces is unsupported. Command CompileSwiftSources failed with a nonzero exit code.

To solve this error, you should try this step:
Change post_install script to the following:
post_install do |installer|
installer.pods_project.targets.each do |target|
if target.name == "lottie-ios"
target.build_configurations.each do |config|
config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'YES'
end
end
end
end
If your application has bitcode disabled and your build faces a compile error, due to enabled bitcode on any of our pods. You should try this step:
Change post_install script to the following:
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['ENABLE_BITCODE'] = 'NO'
end
end
end
Configuring SDK
It is required to provide the following configuration:
- Swift
- Objective-C
let idenfySettingsV2 = IdenfyBuilderV2()
.withAuthToken("AUTH_TOKEN")
.build()
let idenfyController = IdenfyController.shared
idenfyController.initializeIdenfySDKV2WithManual(idenfySettingsV2: idenfySettingsV2)
IdenfyBuilderV2 *idenfyBuilderV2 = [[IdenfyBuilderV2 alloc] init];
idenfyBuilderV2 = [idenfyBuilderV2 withAuthToken:authToken];
IdenfySettingsV2 *idenfySettingsV2 = [idenfyBuilderV2 build];
IdenfyController *idenfyController = [IdenfyController shared];
[idenfyController initializeIdenfySDKV2WithManualWithIdenfySettingsV2:idenfySettingsV2];
Presenting ViewController
UIKit
An instance of IdenfyController is required for managing iDenfy ViewController. Following code will present initial ViewController:
- Swift
- Objective-C
let idenfyVC = idenfyController.instantiateNavigationController()
self.present(idenfyVC, animated: true, completion: nil)
UINavigationController *idenfyVC = [idenfyController instantiateNavigationController];
[self presentViewController:idenfyVC animated:YES completion:nil];
SwiftUI
To initialize iDenfSDK in a SwiftUI project, you need to create an UIViewControllerRepresentable and present it in your view:
struct iDenfySDKUIViewController: UIViewControllerRepresentable {
let authToken: String
init(_ token: String) {
self.authToken = token
}
func makeUIViewController(context: Context) -> IdenfySDKNavigationController {
return initializeIdenfySDKDefault(authToken: authToken)
}
func updateUIViewController(_ viewController: IdenfySDKNavigationController, context: Context) {
//update Content
}
private func initializeIdenfySDKDefault(authToken: String) -> IdenfySDKNavigationController {
let idenfyUISettingsV2 = IdenfyUIBuilderV2()
.build()
let idenfySettingsV2 = IdenfyBuilderV2()
.withAuthToken(authToken)
.withUISettingsV2(idenfyUISettingsV2)
.build()
let idenfyController = IdenfyController.shared
idenfyController.initializeIdenfySDKV2WithManual(idenfySettingsV2: idenfySettingsV2)
handleSDKResults(idenfyController)
return idenfyController.instantiateNavigationController()
}
}
Full initialization code of iDenfySDK using SwiftUI is available in our sample application
Receiving callbacks from SDK
The SDK provides the following callback class idenfyIdentificationResult.
If your service uses only the automatic (default) callback, then you should only check the idenfyIdentificationResult.autoIdentificationStatus.
With getIdenfyResultWithDismiss method
/// Returns user's verification result in the UIViewController dismiss completion webhook.
private func handleSDKResults(_ idenfyController: IdenfyController) {
idenfyController.getIdenfyResultWithDismiss(idenfyIdentificationResult: {
idenfyIdentificationResult
in
print("Auto: \(idenfyIdentificationResult.autoIdentificationStatus.rawValue), Manual: \(idenfyIdentificationResult.manualIdentificationStatus.rawValue)")
switch idenfyIdentificationResult.autoIdentificationStatus {
case .APPROVED:
// The user completed an identification flow and the identification status, provided by an automated platform, is APPROVED.
break
case .FAILED:
// The user completed an identification flow and the identification status, provided by an automated platform, is FAILED.
break
case .UNVERIFIED:
// The user did not complete an identification flow and the identification status, provided by an automated platform, is UNVERIFIED.
break
@unknown default:
break
}
switch idenfyIdentificationResult.manualIdentificationStatus {
case .APPROVED:
// The user completed an identification flow and was verified manually while waiting for the manual verification results in the iDenfy SDK. The identification status, provided by a manual review, is APPROVED.
break
case .FAILED:
// The user completed an identification flow and was verified manually while waiting for the manual verification results in the iDenfy SDK. The identification status, provided by a manual review, is FAILED.
break
case .WAITING:
// The user completed an identification flow and started waiting for the manual verification results in the iDenfy SDK. Then he/she decided to stop waiting and pressed a "BACK TO ACCOUNT" button. The manual identification review is still ongoing.
break
case .INACTIVE:
// The user was only verified by an automated platform, not by a manual reviewer. The identification performed by the user can still be verified by the manual review if your system uses the manual verification service.
break
@unknown default:
break
}
})
}
Information about the IdenfyIdentificationResult autoIdentificationStatus statuses:
Name | Description |
---|---|
APPROVED | The user completed a verification flow and the verification status, provided by an automated platform, is APPROVED. |
FAILED | The user completed a verification flow and the verification status, provided by an automated platform, is FAILED. |
UNVERIFIED | The user did not complete a verification flow and the verification status, provided by an automated platform, is UNVERIFIED. |
Information about the IdenfyIdentificationResult manualIdentificationStatus statuses:
Name | Description |
---|---|
APPROVED | The user completed a verification flow and was verified manually while waiting for the manual verification results in the iDenfy SDK. The verification status, provided by a manual review, is APPROVED. |
FAILED | The user completed a verification flow and was verified manually while waiting for the manual verification results in the iDenfy SDK. The verification status, provided by a manual review, is FAILED. |
WAITING | The user completed a verification flow and started waiting for the manual verification results in the iDenfy SDK. Then he/she decided to stop waiting and pressed a "BACK TO ACCOUNT" button. The manual verification review is still ongoing. |
INACTIVE | The user was only verified by an automated platform, not by a manual reviewer. The verification performed by the user can still be verified by the manual review if your system uses the manual verification service. |
The manualIdentificationStatus status always returns INACTIVE status, unless your system implemented manual verification flow (11 step). This is how our own manual verification screen looks like:
Manual verification screen

In order to disable it, refer to the immediate redirect feature.
These SDK statuses are the same as iFrame integration statuses. There is just a single difference that the SDK returns INACTIVE if the manual verification screen was not opened during the verification session instead of returning null, as iFrame does. Also, iFrame does not close automatically since it can deliver results without actually closing itself.
After SDK finishes and closes itself, you will also receive webhook callback to your backend system.
It might be useful to completely ignore the SDK status and communicate between your app and your backend service about verification status.
Samples
SDK Integration tutorials
Our UIKit sample or SwiftUI sample applications demonstrate the integration of iDenfy SDK. For more information visit SDK integration tutorials.
FAQ
1. Is there a possibility to change verification results view?
- Yes, you can achieve this by providing a custom waiting view controller
2. How to change the position of the top titles?
- Any component and it's properties can be changed by supplying your implementation of UIView
3. How do I report an issue within the SDK?
- Please report any issue via Jira customer portal. Please attach versions of SDK, Xcode you are using, describe the problem as much detailed as possible.
4. When I override liveness fonts, the size does not change. Why is that?
- Liveness font size is dynamically determined according to the screen resolution, and it cannot be manually changed.
5. What if Apple Review team denies our application because of iDenfy SDK?
- If any problems occur with the Apple Review team, please check out our privacy policy to find possible answers to the arisen questions.
- If Apple Review team asks for a demo of our NFC functionality, please provide the following video.