> ## Documentation Index
> Fetch the complete documentation index at: https://docs.chmodlab.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Installation

> Add the ChmodKyc package to your iOS app and configure Info.plist.

* **Minimum iOS:** 16.0
* **Swift tools:** 5.9
* **UI frameworks:** SwiftUI and UIKit

## Add the package

In Xcode: **File → Add Package Dependencies…** and enter:

```text theme={null}
https://github.com/ChmodLab/chmod-kyc-sdk-ios
```

Pick the latest version and add the **ChmodKyc** library to your app target.

Or, if you manage dependencies in a `Package.swift`:

```swift lines theme={null}
dependencies: [
    .package(url: "https://github.com/ChmodLab/chmod-kyc-sdk-ios", from: "0.0.20")
],
targets: [
    .target(name: "MyApp", dependencies: [
        .product(name: "ChmodKyc", package: "chmod-kyc-sdk-ios")
    ])
]
```

## Info.plist

Three entries are required.

```xml lines theme={null}
<key>NSCameraUsageDescription</key>
<string>We need the camera to scan your ID document.</string>

<key>NSLocationWhenInUseUsageDescription</key>
<string>We use your location to verify your identity.</string>

<key>CADisableMinimumFrameDurationOnPhone</key>
<true/>
```

<Warning>
  **iOS terminates the app** the moment the SDK asks for the camera if
  `NSCameraUsageDescription` is missing. This is the operating system killing your process,
  not the SDK failing, so there is nothing to catch. Add it before you run the flow once.
</Warning>

<ParamField body="NSCameraUsageDescription" type="string" required>
  Shown in the camera permission prompt. Always required.
</ParamField>

<ParamField body="NSLocationWhenInUseUsageDescription" type="string">
  Shown in the location permission prompt. Required only while `locationPermission` is
  `REQUIRED`.
</ParamField>

<ParamField body="CADisableMinimumFrameDurationOnPhone" type="boolean" required>
  Not a permission. It opts the render loop into the full refresh rate on ProMotion
  iPhones. The SDK validates it when the flow is presented and throws if it is missing or
  `false`.
</ParamField>

## Verify the setup

Import the module and build. If it compiles, the package is wired up:

```swift theme={null}
import ChmodKyc
```

## Next

<CardGroup cols={2}>
  <Card title="Quick start" icon="play" href="/sdk/ios/quickstart">
    Launch the flow from SwiftUI or UIKit.
  </Card>

  <Card title="Handling the result" icon="code-branch" href="/sdk/ios/handling-results">
    Every outcome and error code.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.