---
updatedAt: 2026-08-27T15:27:25.000Z
agentTools:
  projectIndex: https://docs.sumsub.com/llms.txt
---

# Get started with iOS SDK

Check requirements and begin your integration with the iOS SDK.

Latest release: **Version 1.46.1** ([Changelog](https://docs.sumsub.com/sumsub/docs/changelog-ios))

# Requirements

* Xcode 26+
* iOS 13.0 or later

<Callout icon="🚧" theme="warn">
  ### Attention

  Make sure bitcode is disabled for your project.
</Callout>

# Resources

* [IdensicMobileSDK iOS Demo](https://github.com/sumsub/IdensicMobileSDK-iOS-Demo) — a demo project in Swift.
* [sample.swift](https://github.com/sumsub/IdensicMobileSDK-iOS-Release/blob/master/1.46.1/sample.swift) — Swift sample code. Feel free to use it as a boilerplate.

# Installation

The framework is available to install with [Swift Package Manager](https://www.swift.org/package-manager/) or [CocoaPods](https://cocoapods.org/).

## Swift package manager

* Add `https://github.com/sumsub/IdensicMobileSDK-iOS.git` to your project as a package dependency.
* Add `IdensicMobileSDK` library to your target.
* Add optional packages if you need them. For more information, see [Modules](#modules).

## CocoaPods

1. Update your `Podfile`:
   * Add `source` options for Sumsub and CocoaPods repositories.
   * Add `IdensicMobileSDK` dependency to your target.
   * Add [optional modules](#modules) if you need them.

```ruby
platform :ios, '13.0'

source 'https://cdn.cocoapods.org/'
source 'https://github.com/sumsub/Specs.git'

target 'YourApp' do
  pod 'IdensicMobileSDK'
  # pod 'IdensicMobileSDK/Fisherman'
  # pod 'IdensicMobileSDK/MRTDReader'
  # pod 'IdensicMobileSDK/VideoIdent'
  # pod 'IdensicMobileSDK/EID'

  # any other dependencies
end
```

2. Run the following command in your project directory.

```sh sh
pod install
```

## Permissions

The framework will ask for access to the camera and microphone, photo library, and geolocation. Because of this, it is required to have the corresponding usage descriptions in the application `Info.plist` file.

```xml
<key>NSCameraUsageDescription</key>
<string>Let us take a photo</string>
<key>NSMicrophoneUsageDescription</key>
<string>Time to record a video</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Let us pick a photo</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Please provide us with your geolocation data to prove your current location</string>
```

<HTMLBlock>{`
<div style="margin-top: 30px;"></div>
`}</HTMLBlock>

# Modules

## Device Intelligence

The [Device Intelligence](https://docs.sumsub.com/sumsub/docs/device-intelligence) functionality is optional, but highly recommended as it provides an additional layer of security during the verification process. It analyzes device attributes, configuration patterns, and runtime signals to detect anomalies associated with fraudulent activity.

In order to use:

1. Add the module:
   * **Swift Package Manager**
     * Add `https://github.com/sumsub/IdensicMobileSDK-iOS-Fisherman.git` to your project as a package dependency *using the same version* you did when added [the main package](#swift-package-manager).
     * Add `IdensicMobileSDK_Fisherman` library to your target.
   * **CocoaPods**
     * Add `IdensicMobileSDK/Fisherman` dependency into your `Podfile`.
2. [Enable the functionality](https://docs.sumsub.com/sumsub/docs/device-intelligence#how-to-enable-device-intelligence) with your dashboard.

## MRTDReader (NFC)

The `MRTDReader` is an **optional** module that allows SDK to detect and read the electronic chips placed on MRTD documents via [NFC](https://docs.sumsub.com/sumsub/docs/nfc-based-id-verification).

To enable this functionality:

1. Add the module:
   * **Swift Package Manager**
     * Add `https://github.com/sumsub/IdensicMobileSDK-iOS-MRTDReader.git` to your project as a package dependency *using the same version* you did when added [the main package](#swift-package-manager).
     * Add `IdensicMobileSDK_MRTDReader` library to your target.
   * **CocoaPods**
     * Add `IdensicMobileSDK/MRTDReader` dependency into your `Podfile`.
2. Turn on the `Near Field Communication Tag Reading` [capability](https://help.apple.com/xcode/mac/current/#/dev88ff319e7) for your project target.
3. Update the application `Info.plist` file as follows:

```xml
<key>NFCReaderUsageDescription</key>
<string>Let us scan the document for more precise recognition</string>
<key>com.apple.developer.nfc.readersession.iso7816.select-identifiers</key>
<array>
    <string>A0000002471001</string>
    <string>A0000002472001</string>
    <string>00000000000000</string>
</array>
```

## VideoIdent

The `VideoIdent` is an **optional** module required only if you are going to use the [Video identification](https://docs.sumsub.com/sumsub/docs/video-identification) during verification.

To enable the module:

1. Add the module:
   * **Swift Package Manager**
     * Add `https://github.com/sumsub/IdensicMobileSDK-iOS-VideoIdent.git` to your project as a package dependency *using the same version* you did when added [the main package](#swift-package-manager).
     * Add `IdensicMobileSDK_VideoIdent` library to your target.
   * **CocoaPods**
     * Add `IdensicMobileSDK/VideoIdent` dependency into your `Podfile`.
2. Add the `Background mode` [capability](https://developer.apple.com/documentation/xcode/configuring-background-execution-modes) for your project target and select the `Audio, AirPlay` and `Picture in Picture` options. This is required for the video call not to be broken when the application goes into background.

## eID

The `EID` is an **optional** module required only if you are going to use "eID Verification" during the verification flow.

To enable the module:

1. You need to add credentials for a private Maven repository into your `~/.netrc` file. You can obtain the credentials through our support team.

```txt
machine maven.sumsub.com
login ...
password ...
```

2. Add the module:
   * **Swift Package Manager**
     * Add `https://github.com/sumsub/IdensicMobileSDK-iOS-EID.git` to your project as a package dependency *using the same version* you did when added [the main package](#swift-package-manager).
     * Add `IdensicMobileSDK_EID` library to your target.
   * **CocoaPods**
     * Add `IdensicMobileSDK/EID` dependency into your `Podfile`.
3. Turn on the `Near Field Communication Tag Reading` [capability](https://help.apple.com/xcode/mac/current/#/dev88ff319e7) for your project target.
4. Update the application `Info.plist` file as follows:

```xml
<key>NFCReaderUsageDescription</key>
<string>Let us scan the eID card to verify your identity</string>
<key>com.apple.developer.nfc.readersession.iso7816.select-identifiers</key>
<array>
    <string>A0000002471001</string>
    <string>E80704007F00070302</string>
</array>
```

# Basic usage

<Callout icon="🚧" theme="warn">
  ### Attention

  Make sure you have [configured your verification level and access token](https://docs.sumsub.com/sumsub/docs/mobile-sdk) before initializing the SDK.
</Callout>

## Initialization

To initialize MobileSDK:

1. Import the framework.

```swift
import IdensicMobileSDK
```

2. Declare the initialization parameters.

```swift
let accessToken = "..." // get the `accessToken` from your backend
```

As you can see, the only thing you need is an `accessToken` from your backend. The token points to the verification level that defines the steps of the verification process and indicates an applicant to be verified.

The MobileSDK will work in the [production or sandbox environment](https://docs.sumsub.com/sumsub/docs/sandbox-mode), depending on which one the `accessToken` has been generated on.

3. Instantiate `SNSMobileSDK` and check if setup succeeded.

```swift
let sdk = SNSMobileSDK(
    accessToken: accessToken
)

guard sdk.isReady else {
    print("Initialization failed: " + sdk.verboseStatus)
    return
}
```

Here you create an SDK instance and ensure that the setup was successful with `sdk.isReady`. If it happens to fail, you will be able to pinpoint the reason by printing `sdk.verboseStatus`.

4. The next important step is to set the `tokenExpirationHandler`. Typically, the access token is valid for a rather short period of time and when it is expired, you must provide another one. For more information, see [Token expiration](handlers#token-expiration).

```swift
sdk.tokenExpirationHandler { (onComplete) in
    get_token_from_your_backend { (newToken) in
        onComplete(newToken)
    }
}
```

Most likely, you will then tune up the SDK a bit further by assigning [Handlers](https://docs.sumsub.com/sumsub/docs/handlers) and [Callbacks](https://docs.sumsub.com/sumsub/docs/callbacks), and by applying some [Configuration](https://docs.sumsub.com/sumsub/docs/get-started-ios#configuration) and [Customization](https://docs.sumsub.com/sumsub/docs/customization), but that's just an optional feature.

<Callout icon="👍" theme="okay">
  ### Tip

  We know that the requirement to provide the `accessToken` as an initialization parameter forces you to ask your backend, and due to the async nature of this process, you'll have to build some UI around.

  For your convenience, it's possible to postpone the provision of the token until the SDK has been presented.

  To do so, you will need to pass an empty string as `accessToken` at the initialization stage. This way the `tokenExpirationHandler` will be called immediately after the SDK is appeared up at the time when an activity indicator is displayed.
</Callout>

## Presentation

Once setup is done you are ready to present the SDK on the screen.

```swift
yourViewController.present(sdk.mainVC, animated: true, completion: nil)
```

Since SDK contains its own navigation stack, it's required to be presented modally instead of being pushed.

You can also use a shortcut like this.

```swift
sdk.present(from: yourViewController)
```

Or even shorter if it's comfortable for you to present the SDK on the key window root view controller.

```swift
sdk.present()
```

## Dismissal

By default, once the applicant is approved, the SDK will be dismissed in 3 seconds automatically. You can adjust this time interval or switch the automatic dismissal off by setting the value of zero.

```swift
sdk.setOnApproveDismissalTimeInterval(0)
```

Also, in case you need to close the SDK programmatically.

```swift
sdk.dismiss()
```

# Configuration

## Applicant data

For your convenience and if required, you can provide an email and/or phone number to be assigned to the applicant initially.

```swift
sdk.initialEmail = "..." // applicant's email
sdk.initialPhone = "..." // applicant's phone number
```

## Preferred documents

For the `IDENTITY*` steps, it is possible to specify the preferred country and [document type](/reference/add-id-documents#supported-document-types) to be selected automatically bypassing the **DocType Selector** screen.

Pay attention that the provided parameters will be applied only if the corresponding combination of `country` and `idDocType` is allowed at the step according to the level configuration.

For example:

```swift
sdk.preferredDocumentDefinitions = [
    .identity: SNSDocumentDefinition(
        idDocType: "DRIVERS",
        country: "USA"
    )
]
```