# Tap to Pay on iPhone Quickstart

Accept in-person contactless payments on iPhone with no extra hardware. `FinixTapToPaySDK` uses Apple's Tap to Pay on iPhone technology and processes payments through Finix from start to finish. Your app starts a transaction, the Buyer taps a card or digital wallet on the merchant's iPhone, and the SDK returns a completed Finix `Transfer`.

Using the Finix Checkout app?
This guide is for developers integrating `FinixTapToPaySDK` into their own iOS app. To accept Tap to Pay on iPhone payments without writing code, see [Accept Payments with Tap to Pay on iPhone](/low-code-no-code/mobile-apps/finix-checkout/tap-to-pay-on-iphone) in the Finix Checkout app.

## How it works

1. Your app starts a transaction with an amount and a transaction type.
2. The SDK presents Apple's secure card-reading sheet and the Buyer taps a card or device. The card read happens inside Apple's Tap to Pay on iPhone technology, and neither your app nor the SDK ever sees raw card data.
3. The SDK submits the payment to Finix and waits for the outcome. You do not make a separate API call to create the `Transfer`.
4. The SDK returns a `TapToPayTransactionResult` with the Finix `Transfer` ID, its state, and masked card details.


The SDK also publishes progress events during the transaction (card reading, processing, success or failure) that you can use to drive your UI.

## System requirements

### Device and OS

| Requirement | Value |
|  --- | --- |
| Device | iPhone XS or later. |
| iOS version | 18.1 or later. |
| Testing | Physical iPhone required. The simulator cannot accept taps. |


iPad is not supported
Tap to Pay on iPhone is not available on iPad.

### Development environment

| Requirement | Value |
|  --- | --- |
| Xcode | 16.0 or later. |
| Swift | 5.9 or later. |


### Apple requirements

- Membership in the [Apple Developer Program](https://developer.apple.com/support/enrollment/) with an organization account.
- The Tap to Pay on iPhone entitlement, `com.apple.developer.proximity-reader.payment.acceptance`, granted by Apple. See [Apple entitlement setup](/ios/tap-to-pay/apple-entitlement) in the iOS SDK reference.


### Finix requirements

- A Finix account with access to the Finix Dashboard.
- API credentials (username and password) for the environment you are targeting.
- An approved merchant (`MUxxxxxxxxxxxxx`), its processing MID, and its display name.
- An activated Finix `Device` resource representing the iPhone. See [Set up a Device](/ios/tap-to-pay/device-setup) in the iOS SDK reference.


## Environments

Finix Sandbox and Production are separate environments, and credentials and merchants in one don't exist in the other. The environment is explicit in the SDK configuration (`.sandbox` or `.production`), and a configuration's credentials, `Merchant`, and `Device` must all belong to the same environment.

All examples in this guide run against Sandbox. See [Credentials and environments](/ios/tap-to-pay/credentials) for details.

## Integration steps

Work through the steps below in order. Each links to the detailed section in the iOS SDK reference that covers it.

### Step 1: Confirm system requirements

Verify you have an iPhone XS or later running iOS 18.1 or later, and a physical device for testing.

### Step 2: Set up your Apple entitlement

Request the `com.apple.developer.proximity-reader.payment.acceptance` entitlement from Apple and configure your Xcode project.

See [Apple entitlement setup](/ios/tap-to-pay/apple-entitlement).

### Step 3: Gather your Finix credentials

Collect your Finix Sandbox API credentials and merchant details (`Merchant` ID, MID, and display name).

See [Credentials and environments](/ios/tap-to-pay/credentials).

### Step 4: Create a Device resource

Provision a Finix `Device` resource for the iPhone from your backend. Create it once and cache the `Device` ID.

See [Set up a Device](/ios/tap-to-pay/device-setup).

### Step 5: Install and initialize the SDK

Add the Swift package and build a `TapToPayConfiguration` with your credentials, merchant details, and `Device` ID, then create the SDK entry point with `FinixTapToPay(configuration:)`.

The SDK is hosted on [GitHub](https://github.com/finix-payments/finix-taptopay-ios-sdk).

See [Installation and initialization](/ios/tap-to-pay/installation).

### Step 6: Link the merchant's Apple Account

Present Apple's account-linking flow so the merchant accepts Apple's Terms and Conditions. This must complete before the first transaction.

See [Account linking](/ios/tap-to-pay/account-linking).

### Step 7: Warm up the reader

Call `prepareReader()` at app launch and enable `autoPrepareOnForeground` so the session stays warm. This keeps the first tap fast.

See [Prepare the reader](/ios/tap-to-pay/transactions#prepare-the-reader).

### Step 8: Run a transaction

Start a transaction with `startTransaction(amount:currency:type:identityId:)`, subscribe to `transactionEvents` to drive your UI, and handle the `TapToPayTransactionResult`.

See [Transactions](/ios/tap-to-pay/transactions).

### Step 9: Test and submit for App Review

Test end to end on a physical iPhone, review privacy disclosures, and prepare your App Review submission.

See [Test your integration](/ios/tap-to-pay/testing), [Privacy and data collection](/ios/tap-to-pay/privacy), and [Prepare for App Review](/ios/tap-to-pay/app-review).

## Demo App

Finix provides a [demo app](https://github.com/finix-payments/finix-taptopay-ios-sdk-demo-app) you can use as a reference for your integration.

## Learn more

iOS SDK Reference
Full SDK reference for Tap to Pay on iPhone, including installation, transactions, errors, and App Review guidance.

Apple entitlement setup
Request the entitlement and configure your Xcode project.

Set up a Device
Provision and activate a Finix Device resource for the iPhone.

Transactions
Run payments, handle results, and issue refunds.