# Configure iOS Permissions

The Get Mini SDK requires specific iOS permissions and hardware protocol declarations to communicate with Bluetooth PIN pad devices. This guide explains how to configure your Info.plist with the required External Accessory protocols and Bluetooth privacy keys for device discovery and connection.

## Understanding iOS External Accessory Requirements

iOS restricts communication with external Bluetooth hardware through the External Accessory framework. Unlike standard Bluetooth LE devices, payment card readers require explicit protocol declarations in your application's Info.plist. Without these declarations, the SDK cannot discover connected PIN pads even when properly paired through iOS Settings. Your app must also request Bluetooth permissions to scan for and communicate with these devices.

<Callout type="warning">

Your application's Bundle Identifier must be registered with Get Mini before configuring these permissions. The SDK license key is tied to your Bundle ID and will not function correctly without proper registration. Contact Get Mini support to register your Bundle Identifier before proceeding with development.

</Callout>

## Declare External Accessory Protocols

The SDK communicates with PIN pads using the iOS External Accessory framework. You must explicitly list the protocol strings for the hardware models you intend to support. Add the key `UISupportedExternalAccessoryProtocols` to your Info.plist file and include the appropriate protocol strings based on your supported hardware vendors.

| Manufacturer | Protocol Strings to Add |
| :---- | :---- |
| **ITOS / Castles** | `com.datecs.pinpad` |
| **INGENICO** | `com.ingenico.easypayemv.printer`<br />`com.ingenico.easypayemv.barcodereader`<br />`com.ingenico.easypayemv.spm-transaction`<br />`com.ingenico.easypayemv.spm-configuration`<br />`com.ingenico.easypayemv.spm-networkaccess`<br />`com.ingenico.easypayemv.spm-sppchannel`<br />`com.ingenico.easypayemv.spm-pppchannel` |
| **CUSTOS (Flypos)** | `com.custos.bt` |
| **Spire SPm20** | `com.thyron` |
| **Verifone e285** | `com.verifone.pmr.xpi` |

<Callout type="warning">

If these protocols are missing, the SDK will return an empty list during device discovery, even if the PIN pad is correctly paired in the iOS Settings.

</Callout>

### Example Info.plist Entry

```
<key>UISupportedExternalAccessoryProtocols</key>
<array>
    <string>com.datecs.pinpad</string>
    <string>com.ingenico.easypayemv.printer</string>
    <string>com.ingenico.easypayemv.barcodereader</string>
    <string>com.ingenico.easypayemv.spm-transaction</string>
    <string>com.ingenico.easypayemv.spm-configuration</string>
    <string>com.ingenico.easypayemv.spm-networkaccess</string>
    <string>com.ingenico.easypayemv.spm-sppchannel</string>
    <string>com.ingenico.easypayemv.spm-pppchannel</string>
    <string>com.verifone.pmr.xpi</string>
</array>
```

## Configure Bluetooth Privacy Keys

Since iOS 13, Apple requires explicit user consent for Bluetooth access with clear explanations of why your application needs this permission. The system displays these descriptions when the SDK first attempts to scan for PIN pad devices. Add both Bluetooth privacy keys to your Info.plist to support all iOS versions:

| Key | Description |
| :---- | :---- |
| `NSBluetoothAlwaysUsageDescription` | A message explaining why the app needs Bluetooth (e.g., "This app requires Bluetooth to connect to the card reader for processing payments.") |
| `NSBluetoothPeripheralUsageDescription` | (Legacy) Required for compatibility with devices running versions older than iOS 13. |

### Example Info.plist Entry

```
<key>NSBluetoothAlwaysUsageDescription</key>
<string>This app requires Bluetooth to connect to the card reader for processing payments.</string>
<key>NSBluetoothPeripheralUsageDescription</key>
<string>Bluetooth is required to communicate with the payment terminal.</string>
```

## Enable Background Modes (Optional)

By default, iOS terminates external accessory connections when your application moves to the background or the device screen locks. If your business requirements demand maintaining the PIN pad connection while backgrounded, enable Background Modes in your project capabilities.

Navigate to your target's **Signing & Capabilities** tab in Xcode, click **+ Capability**, add **Background Modes**, and select **External accessory communication**.

<Callout type="warning">

Using external accessories in the background significantly increases battery consumption. Only enable background mode if your application genuinely requires persistent reader connectivity. For most payment applications, foreground-only operation provides sufficient functionality with better battery life.

</Callout>

## Troubleshooting Permission Issues

**App Store Rejection for Missing PPID**

When submitting your app to the App Store, Apple may request the PPID (Product Plan Identification) for the external accessories listed in your Info.plist. Contact Get Mini support to obtain the specific PPID documentation for your deployed terminal models. This is a standard Apple requirement for apps using the External Accessory framework.

**PIN pad Not Discovered During Scan**

If `findBluetoothDevices` returns an empty list despite the PIN pad being paired, verify the following: First, confirm the device appears as "Connected" in iOS Settings > Bluetooth. Second, ensure the protocol string in your Info.plist exactly matches the manufacturer-specific protocol from the table above (protocol strings are case-sensitive). Finally, verify your Bundle Identifier matches the one registered with Get Mini for your SDK license.

**App Crashes When Scanning for Devices**

Immediate app crashes during device discovery indicate missing Bluetooth privacy keys in Info.plist. iOS 13 and later require both `NSBluetoothAlwaysUsageDescription` and `NSBluetoothPeripheralUsageDescription` keys with non-empty string values. Add these keys before testing on physical devices.

## Next Steps

With your permissions configured, you can now proceed to:

* [Install the SDK](/en/get-mini/ios-sdk/first-steps/install-the-sdk) - Configure your Build Settings and Linker Flags
* [Quickstart: Your First Sale](/en/get-mini/ios-sdk/first-steps/ios-sdk-quickstart) - Initialize the manager and process a payment