Skip to main content

Meeting Apple requirements guide

In this section, you will find information on how to obtain Apple’s approval to use the Link-Out Option (LOO) in your iOS application. All steps are listed in the order you should follow.

✅ 1. Make sure your app qualifies for LOO
  • You sell only digital content/services (e.g., subscriptions, premium access, tokens)

  • Your app is available in European Union countries

  • You do not offer the same content via IAP (In-App Purchase) — LOO cannot coexist with IAP

✅ 2. Accept the required documents in App Store Connect
✅ 3. Apply for the External Link Entitlement
  • Fill the form here:🔗 https://developer.apple.com/support/dma-and-apps-in-the-eu/

  • Add:
    • Your app’s name

    • A list of EU countries where the feature will be active

    • A link to the external checkout (e.g., via Paytool)

    • Screenshots showing the UX flow, including:

      • Screen with the "Buy on the Website" button

      • Screen with the required disclaimer

      • View of the payment page (checkout outside the app)

✅ 4. Prepare a compliant in-app UX
  • Add a button: “Buy on the Website” or “Buy outside the App Store”

    The button must open Safari (NOT a WebView)

    After clicking, the user must see a disclaimer screen:

  • You continue the purchase outside the App Store. Apple is not responsible for the privacy or security of transactions made on this site.

  • The user must manually confirm the intention to continue (e.g., "Continue" or "Cancel")

✅ 5. Implementation of the checkout link
  • It must lead to the hosted PSP page (Paytool address)

  • The page must work correctly in Safari and must not contain redirects to other applications or prompts to install anything

✅ 6. After obtaining Apple permission
  • You will receive External Purchase Link Entitlement

  • Add it to the app configuration (in Xcode or Plist)

  • Activate the feature only for users from EU countries

✅ 7. Submit the new version of the application for review
  • Attach a note informing Apple that you are using LOO in accordance with the DMA

  • Include screenshots or a video of the full UX flow

  • Indicate that you Paytool Verestro is a registered PSP

🟨 Tips:

Accelerate acceptance by providing a video or prototype (e.g. Figma, Loom)

Do not offer promotions or lower prices at checkout outside the App Store — Apple prohibits this

Do not include a link to the payment page in the app description in the App Store — only within the app

There are example code samples in HTML and Swift that displays the Apple-required disclaimer view before redirecting the payer to an external payment gateway such as Paytool.

HTML code sample
<!DOCTYPE html>
<html lang="pl">
<head>
  <meta charset="UTF-8">
  <title>Ostrzeżenie przed przekierowaniem</title>
  <style>
    body {
      font-family: sans-serif;
      padding: 2em;
      background-color: #f9f9f9;
    }
    .container {
      max-width: 480px;
      margin: auto;
      background-color: #fff;
      padding: 2em;
      border-radius: 12px;
      box-shadow: 0 2px 8px rgba(0,0,0,0.1);
    }
    button {
      width: 100%;
      margin-top: 1.5em;
      padding: 1em;
      font-size: 1em;
      border: none;
      border-radius: 8px;
      background-color: #007aff;
      color: white;
      cursor: pointer;
    }
    .cancel {
      background-color: #ccc;
      margin-top: 0.5em;
    }
  </style>
</head>
<body>
  <div class="container">
    <h2>You are leaving this application</h2>
    <p>
      You will be redirected to an external site to complete your purchase. Apple is not responsible for the privacy or security of this transaction.
    </p>
    <button onclick="window.location.href='<paytoolUrl>/token=abc123&appleExternalPurchase=yes'">
      Continue payment
    </button>
    <button class="cancel" onclick="history.back()">Return</button>
  </div>
</body>
</html>

Tip: The checkout link should contain a query param compliant with Apple requirements (e.g. ?appleExternalPurchase=yes)

SWIFT code sample
import UIKit
import SafariServices

class SubscriptionViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        let buyButton = UIButton(type: .system)
        buyButton.setTitle("Buy through the site", for: .normal)
        buyButton.addTarget(self, action: #selector(openExternalPurchaseDisclaimer), for: .touchUpInside)

        buyButton.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(buyButton)
        NSLayoutConstraint.activate([
            buyButton.centerXAnchor.constraint(equalTo: view.centerXAnchor),
            buyButton.centerYAnchor.constraint(equalTo: view.centerYAnchor)
        ])
    }

    @objc func openExternalPurchaseDisclaimer() {
        guard let url = URL(string: "<paytoolUrl>/disclaimer.html") else { return }
        UIApplication.shared.open(url, options: [:], completionHandler: nil)
    }
}

Tip: You must use UIApplication.shared.open—not WebView.

Tip: The URL must lead to a disclaimer page (like the HTML above), not directly to the checkout page.