Going to Production on iOS

A working Koard integration in UAT is half of going live on iPhone. The other half is Apple's approval, which you run directly with Apple and which has two separate reviews. Plan for it in the first week of design: teams that reach this stage without a plan commonly lose two to six weeks going back and forth with Apple.

Complete the UAT checks in sections 1 and 2 of the Launch Checklist before you start. Then work through this page in order.

Step What you do Section
1 Build the in-app experience that Apple's Tap to Pay team reviews, and record the three videos. Tap to Pay review
2 Prepare what the App Store team needs from you. App Store review
3 Ask Apple for the distribution entitlement. Request the entitlement
4 Build the production app with it, test the build, and submit it. Use the entitlement
5 Market the feature inside Apple's brand rules. Brand and marketing
6 Support your merchants after launch. Merchant support

Apple's approval is separate from your Koard integration. Koard cannot grant it or speed it up. Nothing on this page is checked by Koard's API or SDK, so a build can pass every UAT test and still be rejected by Apple.

Use your own Apple Developer account. Apple grants both entitlements to the account that owns your app. Only the Account Holder can submit the requests and see Apple's replies, so involve that person early. Where Apple's form asks for your payment service provider, enter Koard. Your merchants do not need an entitlement. It belongs to your app, and each merchant only accepts Apple's terms inside it.

Apple step Typical time
Development entitlement One to two business days.
Tap to Pay review, for the distribution entitlement About five business days for each round, by Apple's estimate. Plan for more than one round.
App Store review One to two days.

With a complete build, an app can go from development to live in one to two weeks. Most delays come from repeating the Tap to Pay review.

1. Tap to Pay Review: Process and Guidelines

Apple's Tap to Pay team reviews your app when you ask for the distribution entitlement in section 3. The team checks your in-app experience against Apple's Tap to Pay on iPhone review checklist, using three videos that you record. This review comes before App Store review and is separate from it.

Apple's development entitlement email links to two documents: its App Requirements and Review guide, and its App Review Requirements Checklist. Read both before you design screens, and fill in the checklist as you build, including its header. Apple returns a checklist with an empty header.

Apple will also look at your screens before you submit. Reply on your entitlement email thread and ask for feedback on your Tap to Pay on iPhone experience.

The four rejection reasons Koard sees most often are all in this review:

  1. The videos do not show how a merchant accepts Apple's Terms and Conditions or links the merchant account.
  2. The app has no in-app merchant education, because the developer planned to train merchants in person.
  3. The reader is not prepared ahead of time, so the first tap in front of a customer is slow.
  4. Button copy mixes "Tap to Pay" with "Tap to Pay on iPhone".

Choose Your Distribution Path First

Apple's requirements depend on how your app reaches merchants. Decide this before you design any screens.

Path Who it is for Onboarding Awareness in the app Merchant education
Public App Store Small businesses and anyone who finds your app through search Required in the app, in under 15 minutes Required (full-screen modal, push, email) Required
Unlisted App A specific audience on their own devices, reached by URL Can be outside the app Recommended Highly recommended
Custom App One named enterprise customer with a branded version Can be outside the app Recommended Highly recommended
Enterprise (ADEP) Managed devices deployed through MDM Outside the app (no Apple Account on the device) Optional Highly recommended

Public App Store distribution triggers the full in-app onboarding requirement. A new merchant must be able to sign up inside the app and take a first payment within 15 minutes. Custom App and Unlisted App carry lighter requirements and suit most enterprise deployments.

What Apple Inspects

Apple inspects four moments in your app.

Digital onboarding (Public distribution only)

A new user who just downloaded your app must be able to apply to become a merchant inside the app, on an iPhone, and most approvable users must be able to take a first payment within 15 minutes.

  • An external "contact sales" form does not count as digital onboarding.
  • A WKWebView around your existing onboarding portal does count.
  • If your underwriting needs manual review, the path must still start in the app and use push, email, or SMS to bring the user back.

This requirement has no written substitute. If you think your Public App Store app needs an exception, ask Apple on your entitlement thread before you submit, and do not assume you have one until Apple agrees.

On the other distribution paths, where onboarding can happen outside the app, Apple's checklist still asks you to describe how a merchant is onboarded and why that does not happen in the app. A written description is enough there.

Awareness and enrollment

At least one awareness moment must tell eligible users that Tap to Pay on iPhone exists in your app. Apple prefers a full-screen modal. New merchants see it during onboarding. Existing merchants see it on first login after the feature ships. Apple rejects apps that show it only to new users.

Required elements:

  • A launch email and a push notification. Apple provides templates for both.
  • A way to enroll outside the checkout flow, for example in Settings.
  • A way to enroll from the checkout flow when a user who is not enrolled taps the button.
  • Terms acceptance limited to admin users. Other users see a message telling them to contact their admin.

Apple requires the option outside checkout because a merchant can cancel the terms prompt and must be able to come back and turn Tap to Pay on iPhone on later. You do not need to offer a way to turn it off.

For an existing app, the awareness moment can run when the app starts. If payments are one part of a larger app, start when the merchant opens the payments area, before the first payment attempt: check whether Tap to Pay on iPhone is set up, show the awareness and education screens if it is not, collect terms acceptance, then prepare the reader.

Merchant education

This is the requirement teams miss most often. Your app must teach merchants how to accept a payment with Tap to Pay on iPhone, inside the app. Training sessions, newsletters, and videos sent by email do not satisfy it on their own.

On iOS 18 and later, call KoardMerchantSDK.shared.presentTutorial(from:). It presents Apple's own education screens through Apple's ProximityReaderDiscovery API, and Apple's checklist states that using that API fulfills the merchant education requirements. You do not design the screens.

Apple's checklist requires that education:

  • Appears immediately after the merchant enables Tap to Pay on iPhone and accepts the terms.
  • Can be opened again from Settings or Help.
  • Shows how to accept contactless cards, and how to accept Apple Pay and other digital wallets.
  • Follows Apple's marketing guidelines for its images and wording.

Do not tell merchants they can skip it. Apple objects to copy that does.

You still need to do two things yourself:

  1. Make education reachable later. Add a "Tap to Pay on iPhone" row in Settings or Help that presents the tutorial again.
  2. Cover requirements for your region. In a region that requires PIN, education must show PIN entry and its accessibility features. In a region that requires a fallback, it must show the fallback payment method.

If your app supports iOS versions earlier than 18, build your own education screens for those users from the assets in Apple's Marketing Guide and Toolkit. They must cover, at minimum, how to accept a contactless card, how to accept Apple Pay and other digital wallets, and the PIN and fallback items above where they apply.

Merchant Education lists what merchants need to know and the questions they ask most.

Transaction experience

The Tap to Pay on iPhone button at checkout must:

  • Sit in a prominent place that needs no scrolling.
  • Read "Tap to Pay on iPhone". Use "Tap to Pay" only when the button is too small for the full name, and "Charge" only when Tap to Pay on iPhone is your sole acceptance method.
  • Never be greyed out or hidden because the user is not enrolled. Tapping it starts enrollment.
  • Use the wave.3.right.circle or wave.3.right.circle.fill SF Symbol if it has an icon.

After a tap, show a processing screen, then a clear approved, declined, or timed out result. After any outcome, the merchant must be able to send the customer a digital receipt privately, by SMS, email, QR code, or the iOS share sheet.

Prepare the Reader Before Checkout

Call KoardMerchantSDK.shared.prepare() after initialization, merchant login, and active-location selection, before a customer needs to tap. Apple's requirements ask for this call as early as possible in the app. Preparation time depends on the device, network, and merchant profile. Show inline progress and keep payment controls disabled until the reader is ready.

When the app returns to the foreground, check readiness and avoid starting overlapping preparation tasks. Do not discard preparation errors with try?. An account that is not linked needs a visible terms-acceptance action that calls linkAccountAsync(), followed by preparation. Reader token errors and other failures need their own visible recovery path.

Apple's checklist also asks for a progress indicator while the reader is being configured. Read KoardMerchantSDK.shared.status and show a progress bar or a simple state: not ready, preparing, ready.

See Running Payments for the SDK calls and Apple Best Practices for a preparation coordinator.

Terms and Conditions: Two Paths

A merchant accepts Apple's Tap to Pay on iPhone Terms and Conditions in one of two ways.

Path How it works Use it for
In the app The merchant signs in to their Apple Account on the device and taps Accept. The device then builds its terminal profile. Public, Unlisted, and Custom App distribution, where merchants have their own Apple Account on the device.
Apple Business Connect An organization admin accepts the terms on the merchant's behalf. Koard provides the token your admin uses. Contact support@koard.com to set it up before you deploy devices. Managed devices with no Apple Account. If the merchant is not linked there, the device still shows the terms prompt.

A merchant accepts once. One admin accepts for every user and device of that merchant, so offer the action in onboarding and again in Settings.

Always read terms acceptance from Apple through the Koard SDK. Do not cache it in a local flag, because a local flag can fall out of sync with Apple's records.

Record the Three Videos

Apple asks for three walkthrough videos. The Tap to Pay on iPhone reader screen cannot be captured by screen recording, so film the device with a second phone. Show every step in order. Apple rejects videos that skip or cut a step. The new user video applies only if merchants can sign up inside your app.

New user Existing user Checkout
1. Account creation 1. Sign in to an existing account 1. Add items to the cart or enter an amount
2. Identity checks, if you have them 2. Tap to Pay on iPhone button visible before terms are accepted 2. Payment options screen
3. Merchant approval 3. Awareness moment for existing users 3. Tap to Pay on iPhone button
4. Awareness moment 4. Terms acceptance 4. Start and complete a transaction
5. Terms acceptance 5. Merchant education 5. PIN entry, if it applies
6. Merchant education 6. Progress indicator 6. Fallback, if it applies
7. Terminal profile progress indicator 7. One full transaction
8. Completed indicator 8. PIN entry, if it applies in your region
9. One full transaction 9. Fallback payment method, if it applies in your region

A merchant accepts Apple's terms only once. To record terms acceptance again, create a new merchant and record with it.

2. App Store Review: Process and Guidelines

After the Tap to Pay team grants the distribution entitlement, the App Store team reviews the build you submit through App Store Connect. For Public, Unlisted, and Custom App distribution this is the standard App Review plus a check specific to Tap to Pay on iPhone. Read Apple's App Review Guidelines for payments before you submit.

Put these in your App Store Connect submission notes:

  • A statement that the app uses the Tap to Pay on iPhone entitlement, and how: available to everyone, or behind a feature flag.
  • A description of your use case, for example "a point of sale app for small merchants".
  • A test account that works. Apple recommends one, and reports that most rejections come from test accounts that do not work. Check it on a freshly reset iPhone before you submit.
  • A video walkthrough or a PDF that shows, step by step: enrolling in Tap to Pay on iPhone and accepting the terms, adding items and starting a payment, and a completed payment. Add high-fidelity wireframes of your checkout.
  • A note about any region limit or feature flag that controls Tap to Pay on iPhone, for example "App is limited to the US. The test account works in this region."
  • If Tap to Pay on iPhone is your only acceptance method, set UIRequiredDeviceCapabilities to include iphone-ipad-minimum-performance-a12 so incompatible devices cannot download the app.

Submit the production build, because Apple reviews the app your merchants will use. App Store review usually takes a day or two.

Tap to Pay on iPhone does not run on iPad, and a merchant who opens the app there never sees the terms prompt. What to do depends on the app:

  • If Tap to Pay on iPhone is the only way your app takes payments, make the app iPhone only.
  • If your app also runs on iPad, or takes payments another way, keep it available there. Check KoardMerchantSDK.shared.isReaderSupported at runtime, offer Tap to Pay on iPhone only where it is true, and offer another acceptance method where it is not.

Enterprise apps: do not mention MDM. If you distribute to managed devices, leave MDM out of your App Store Connect app details. It triggers a different entitlement review. Route enterprise distribution through ADEP.

Reply on the same thread. Apple often marks a request for more information as a rejection. Read the note, then answer on the same message thread. Do not open a new one.

3. Request the Distribution Entitlement

Tap to Pay on iPhone has two entitlements. You already have the first one if you followed Setting Up the Entitlement.

Entitlement What it allows How you get it
Development Build and run on registered test devices against UAT. Apple's entitlement request form, on day one.
Distribution TestFlight, the App Store, and enterprise distribution. Some Apple emails call it the publishing entitlement. Reply to Apple's development entitlement email once your build meets the requirements in section 1.

To request it:

  1. Confirm that your build meets every requirement in section 1 for your distribution path, and that the three videos show every step.
  2. Have the Account Holder reply to the email from Apple's Wallet Entitlements team that granted the development entitlement. Keep the Case-ID line from that email in every message you send.
  3. Apple answers with the materials it wants: the videos and a completed copy of its review checklist, and sometimes screen flows or screenshots. Apple gives you an upload link. After you upload, confirm that each file plays, then reply on the thread to say the files are there and that you are requesting the publishing entitlement. Apple reviews requests in the order it receives them. A video Apple cannot open stalls the review, and Apple may not tell you for days.
  4. Wait for Apple's review. Allow about five business days. If Apple asks for changes, make them and answer on the same thread.

If you cannot find the original email, write to ttpoientitlements@apple.com, say that you did not receive it, and include your Apple Developer team ID.

If a review goes quiet for more than a week, tell support@koard.com. Koard can ask its Apple contacts what is holding it up.

Apple grants the entitlement for one app. An update to an approved app does not repeat the review. A different app on the same account does.

TestFlight requires the distribution entitlement. You cannot put a Tap to Pay on iPhone build in front of testers through TestFlight until Apple has passed this review.

4. Use the Distribution Entitlement

Once Apple grants it, build the app you will ship.

4.1. Update Signing

Confirm that Tap to Pay on iPhone appears on your App ID, then create or regenerate a distribution provisioning profile so it includes the entitlement. Without the distribution entitlement, a distribution build fails with an error that the profile does not include com.apple.developer.proximity-reader.payment.acceptance. Setting Up the Entitlement shows where each setting lives.

4.2. Separate the Production Build

Keep UAT and production apart at build time so a UAT key can never ship.

  1. In Xcode, select the project. Under PROJECT, Info, duplicate the Debug and Release configurations and name the copies Debug-Prod and Release-Prod.
  2. Open Product, Scheme, Manage Schemes. Duplicate your scheme, name the copy for production, and assign the production configurations to each action, including Archive. Apple's Customizing the build schemes for a project covers the details.
  3. Give each configuration its own Koard values, for example through .xcconfig files.
// Xcode .xcconfig: $() prevents // from starting a comment.
Koard-Dev.xcconfig
KOARD_API_BASE_URL = https:/$()/api.uat.koard.com
KOARD_API_KEY = ${KoardSandboxAPIKey}

Koard-Prod.xcconfig
KOARD_API_BASE_URL = https:/$()/api.koard.com
KOARD_API_KEY = ${KoardProductionAPIKey}

Keep credentials out of source control. Build settings and Info.plist values can be read from a shipped app, so the app must hold only its own app key. Backend API keys stay on your server.

4.3. Point the Build at Production

Initialize the SDK with the production environment and the production app key. Create that key in production with the payments:tap-ios permission, as described in Getting an API Key. Koard invites you to the production dashboard at app.koard.com once your agreement is in place. You create production keys there.

Production also needs its own merchant, terminal, location, and merchant credentials. Repeat merchant setup with production values, because nothing you created in UAT exists there. The terminal uses the merchant's production processor credentials, and the processor configuration ID is different from the UAT one.

Read the values from Info.plist

Add KOARD_API_BASE_URL and KOARD_API_KEY to Info.plist as ${KOARD_API_BASE_URL} and ${KOARD_API_KEY}, then read them at runtime:

struct KoardAppConfig {
    static let baseURL: URL = {
        guard let urlString = Bundle.main.object(forInfoDictionaryKey: "KOARD_API_BASE_URL") as? String,
              let url = URL(string: urlString) else {
            fatalError("Missing or invalid KOARD_API_BASE_URL")
        }
        return url
    }()

    static let apiKey: String = {
        guard let key = Bundle.main.object(forInfoDictionaryKey: "KOARD_API_KEY") as? String else {
            fatalError("Missing KOARD_API_KEY")
        }
        return key
    }()
}
Or switch with Swift compilation conditions

Add custom flags under Build Settings, Swift Compiler - Custom Flags, for example -DKOARD_ENV_PRODUCTION on the production configurations, then branch on them:

#if KOARD_ENV_PRODUCTION
let environment: KoardEnvironment = .production
let loggingLevel: KoardLoggingLevel = .error
#else
let environment: KoardEnvironment = .uat
let loggingLevel: KoardLoggingLevel = .debug
#endif

let options = KoardOptions(
    environment: environment,
    loggingLevel: loggingLevel
)
KoardMerchantSDK.shared.initialize(options: options, apiKey: apiKey)

KoardOptions.environment accepts .uat, .production, or .custom(String). Lower loggingLevel for production builds, for example to .error or .none, so debug logs do not ship.

4.4. Verify on a Device

Use two iPhones if you can. Switching one phone between a Sandbox Apple Account and a normal one is the most common source of lost time.

  • Keep the UAT build on the test iPhone that stays signed in with your Sandbox Apple Account.
  • Install the production build on a separate iPhone signed in with a normal Apple Account, or reset the test iPhone first.
  • In each environment, run a payment, a refund, a reversal, and a settlement check.
  • In production, do not sign one iPhone in to more than two merchants within 24 hours. It causes problems with Apple. To test several setups, use one merchant with several locations.

Archive with the production scheme. Never archive or submit to App Store Connect from a UAT scheme. Make the production scheme part of your release review.

4.5. Test the Build and Submit

  1. Upload the production archive to App Store Connect.
  2. Test that exact build through TestFlight, on a supported iPhone, with the production merchant.
  3. Submit it for App Store review with the notes from section 2.

TestFlight works only with production: a normal Apple Account, the production app key, and a production merchant. A Sandbox Apple Account cannot take payments in a TestFlight build. Payments made in TestFlight are real and move money.

5. Apple Brand and Marketing Guidelines

Apple controls how Tap to Pay on iPhone is named and shown. These rules apply to your app's store listing, website, emails, and press, during launch and after it. Apple's Marketing Guidelines are the source, and Apple's version wins if this summary differs.

Rule What it means for you
Use the full name Write "Tap to Pay on iPhone" in all marketing. Do not shorten it to "Tap to Pay", and do not put "Apple" in front of it. The checkout button is the one place a shorter label is allowed, as described in section 1.
Use Apple's assets Use the banners, social tiles, emails, product page content, and animations in Apple's Marketing Toolkit. You may add your brand colors, fonts, card art, and logo.
No custom imagery Do not create your own videos, illustrations, photography, or icons that show iPhone or Tap to Pay on iPhone, and do not use stock imagery for it.
Match your region Use only the imagery Apple provides for your region.
Launch first, then market Start marketing only when Tap to Pay on iPhone is available to all of your merchants in the app. That includes public landing pages. If the feature is behind a flag, wait until the flag is on before you change your App Store product page.
Describe it as Apple's feature Say that your app offers Tap to Pay on iPhone. Do not present it as your own product or give it another name.
No custom video Use only Apple's approved product animations and how-to video, as they are. Do not add them to other video, do not place animations or illustrations over the interface, and do not show an Android device.
Launch channels For Public distribution, Apple's checklist requires a launch email, a push notification, and an in-app banner. Apple provides templates.
Press needs Apple's approval Do not publish a press release, blog post, or investor communication that mentions Tap to Pay on iPhone without Apple's approval. Apple runs this through your payment service provider, so contact support@koard.com before you plan one. Approval can take several weeks, and Apple does not always grant it.
Incentives Read Apple's Merchant Incentive Guide before you plan any merchant incentive.
Legal lines Include the trademark and availability lines that Apple's Marketing Guidelines page requires.

Getting the toolkit. The email in which Apple grants your entitlement links to the Marketing Guide and Toolkit for your region. It goes to the Account Holder of your Apple Developer Program membership, so ask that person to pass it to your marketing team. The Merchant Incentive Guide comes with it.

Checking your assets. Apple is specific about how these assets look. Koard works with Komplier for Apple marketing compliance. Its builder produces assets from Apple's templates, and its analyzer checks custom assets against Apple's rules before you publish them.

Design the in-app screens from Apple's Human Interface Guidelines for Tap to Pay on iPhone and the Tap to Pay on iPhone template in Apple Design Resources.

6. Merchant Support

You are the first line of support for your merchants. Apple expects help to be available inside the app, and merchants look there first. Koard takes the issues you cannot resolve: SDK behavior, Tap to Pay on iPhone behavior, certification, and infrastructure.

Merchants need Provide
To learn again how to take a payment A "Tap to Pay on iPhone" row in Settings or Help that presents the education screens again.
Answers to everyday questions The topics in Merchant Education: where to hold the card, wallets, PIN entry, declines, refunds, and settlement timing.
Someone to contact Your support contact, shown in the app.
Their business name on the customer's screen The name and icon on the Tap to Pay on iPhone screen are set from the merchant's details when the feature is first enabled. A merchant can change them by linking a verified brand in Apple Business Connect.

When a merchant reports a problem, start with iOS Troubleshooting. If you need Koard, send the details below to the right place.

Question Where to ask
Entitlement status or a Tap to Pay review decision Reply on your Apple entitlement email thread and cite your Case ID.
App Store review The App Store Connect message thread for that submission.
Apple's terms acceptance, Apple Business Connect tokens, reader preparation, payments, or settlement support@koard.com

Include the environment and the merchant, location, terminal, and transaction IDs when you write to Koard. Never send card numbers, PINs, API keys, or merchant credentials.

Common Rejection Reasons

Reason Avoid it by
Videos skip terms acceptance or account linking Showing every step in the tables in section 1, in order, with no cuts.
No in-app merchant education Calling presentTutorial(from:) after enrollment and from Settings.
Reader not prepared, or prepared only at checkout Calling prepare() after login and location selection, and again when the app returns to the foreground.
Test account does not work on Apple's device Checking the account on a freshly reset iPhone before you submit.
Button uses the wrong copy or is greyed out before enrollment Using "Tap to Pay on iPhone" and keeping the button active.
MDM mentioned in App Store Connect notes Removing the mention and routing enterprise distribution through ADEP.
Awareness moment shown only to new users Adding one for existing users on first login after launch.
Terms acceptance cached locally Reading it from Apple through the SDK every time.
Region limit or feature flag not declared Stating it in the App Store Connect notes.
Launch email, push notification, or banner missing Preparing all three for Public distribution.

Release

When App Store review passes, release the app. If you ship the build with Tap to Pay on iPhone behind a feature flag that you control, declare the flag in your App Store Connect notes and turn it on when you are ready.

After release, monitor payment outcomes, webhook delivery, and settlement, and keep a way to pause new payments if a problem appears.

Apple References

This page reflects Apple's App Review Checklist v1.5.1 (March 2025), Getting Started guide v1.2, and the Marketing Guidelines page as published in November 2026. Apple updates these documents. If you see a difference, Apple's version wins.

Next Step

Finish the remaining checks in the Launch Checklist, then release.