Guideline 4.0

Guideline 4.0 - Design: Apple Pay Button Not Following Guidelines

Low RiskEasyTypical Fix: 1-2 hours0 Reports
Also known as:Custom button with Apple Pay logo drawn manually instead of using PKPaymentButtonApple Pay button with non-standard colors or gradients appliedApple Pay button is too small (below the 30pt minimum height)Custom rounded corners or shadows applied to the system button’s containerApple Pay logo used on a custom checkout button alongside other payment textApple Pay button text modified (e.g., “Pay Now with Apple” instead of system text)

Our Take

Apple rejected your app because the Apple Pay button does not conform to Apple’s marketing and branding guidelines. Apple requires that apps use the system-provided PKPaymentButton (or the SwiftUI PaymentButton equivalent) rather than custom-designed buttons. Apple is strict about use of its brand assets. Custom buttons that use the Apple Pay logo, the Apple logo, or similar branding in non-approved styles violate Apple’s trademark and design requirements. The button must also be appropriately sized and not be modified with custom colors, rounded corners, or overlays.

Resolution Guide

01

Use the system-provided button

In SwiftUI, use PaymentButton (iOS 16+) or wrap PKPaymentButton:


```swift

import PassKit


// SwiftUI (iOS 16+)

PayWithApplePayButton(.checkout) {

startApplePayFlow()

}

.payWithApplePayButtonStyle(.black) // .black, .white, or .whiteOutline

.frame(height: 50)

```


In UIKit:


```swift

let button = PKPaymentButton(paymentButtonType: .checkout, paymentButtonStyle: .black)

button.addTarget(self, action: #selector(startApplePayFlow), for: .touchUpInside)

```

02

Choose the correct button type

PKPaymentButton supports several types:

- `.buy` — “Buy with Apple Pay”

- `.checkout` — “Check out with Apple Pay”

- `.donate` — “Donate with Apple Pay”

- `.plain` — Apple Pay logo only

- `.setUp` — “Set up Apple Pay”

03

Meet minimum size requirements

The Apple Pay button must be at least 30pt tall and have a minimum width of 100pt. Apple recommends 44–50pt height for comfortable tapping:


```swift

.frame(minWidth: 100, minHeight: 44)

```

04

Do not modify the button’s appearance

Do not apply:

- Custom background colors or gradients

- Non-standard corner radius (the system button has its own radius)

- Drop shadows, borders, or overlays

- Opacity changes or blur effects

05

Use the correct button style for your background

Choose the style that provides adequate contrast:

- `.black` for light backgrounds

- `.white` for dark backgrounds

- `.whiteOutline` for white backgrounds

06

Check Apple Pay availability first

Only show the button when the device can make payments:


```swift

if PKPaymentAuthorizationController.canMakePayments() {

// Show Apple Pay button

} else {

// Show standard checkout or setup button

}

```

07

Review the Apple Pay Marketing Guidelines

Download the official guide from developer.apple.com/apple-pay/marketing/ for detailed specifications on button placement, spacing, and usage alongside other payment methods.

Example Rejection Email

From:Apple App Review Team
Subject:Guideline 4.0 - Design: Apple Pay Button Not Following G
Guideline 4.0 - Design Your app does not follow Apple Pay marketing and branding guidelines. Specifically, your app uses a custom-designed button for Apple Pay checkout that does not use the system-provided Apple Pay button. Apps that offer Apple Pay must use the PKPaymentButton API (or PaymentButton in SwiftUI) to display the Apple Pay button. Custom buttons that incorporate the Apple Pay mark, Apple logo, or similar imagery are not permitted. Next Steps: Please replace your custom Apple Pay button with the system-provided PKPaymentButton and ensure it meets the size and style requirements described in the Apple Pay Marketing Guidelines.

Consider Appealing

Do not appeal. This is a quick fix — simply swap your custom button for PKPaymentButton and resubmit. If you believe your button already uses the system API but was still rejected, double-check that you haven’t applied any modifiers (background, cornerRadius, overlay) to the button or its container.

Generate Appeal

Before & After

Before — Rejected

// Custom Apple Pay button — violates branding guidelines

struct CheckoutView: View {

var body: some View {

VStack(spacing: 16) {

// ... cart items ...


Button(action: { startApplePayFlow() }) {

HStack {

Image("apple-pay-logo") // custom asset

.resizable()

.frame(width: 24, height: 24)

Text("Pay with Apple Pay")

.font(.headline)

.foregroundColor(.white)

}

.frame(maxWidth: .infinity, minHeight: 44)

.background(

LinearGradient(colors: [.blue, .purple], startPoint: .leading, endPoint: .trailing)

)

.cornerRadius(12)

}

}

}

}

After — Approved

// System-provided Apple Pay button — follows branding guidelines

import PassKit


struct CheckoutView: View {

var body: some View {

VStack(spacing: 16) {

// ... cart items ...


if PKPaymentAuthorizationController.canMakePayments() {

PayWithApplePayButton(.checkout) {

startApplePayFlow()

}

.payWithApplePayButtonStyle(.black)

.frame(maxWidth: .infinity, minHeight: 44)

} else {

Button("Checkout") { startStandardCheckout() }

.frame(maxWidth: .infinity, minHeight: 44)

.background(Color.accentColor)

.foregroundColor(.white)

.cornerRadius(8)

}

}

}

}

What changed: The custom button with a hand-drawn Apple Pay logo and gradient background was replaced with the system PayWithApplePayButton. The system button uses Apple’s approved styling (.black) and automatically renders the correct logo, text, and corner radius. A canMakePayments() check ensures the button only appears on supported devices.

Before — Rejected

// UIKit: manually constructed Apple Pay button — wrong approach

let payButton = UIButton(type: .custom)

payButton.setTitle(" Pay", for: .normal)

payButton.setImage(UIImage(named: "apple-logo-white"), for: .normal)

payButton.backgroundColor = .black

payButton.layer.cornerRadius = 16

payButton.heightAnchor.constraint(equalToConstant: 36).isActive = true

After — Approved

// UIKit: system PKPaymentButton — correct approach

let payButton = PKPaymentButton(paymentButtonType: .checkout, paymentButtonStyle: .black)

payButton.addTarget(self, action: #selector(startApplePayFlow), for: .touchUpInside)

payButton.translatesAutoresizingMaskIntoConstraints = false

NSLayoutConstraint.activate([

payButton.heightAnchor.constraint(equalToConstant: 44)

])

What changed: Replaced the custom UIButton (with a manually set Apple logo and custom corner radius) with PKPaymentButton. The system button handles all branding requirements automatically: correct logo, approved text, and proper styling. The height was also increased from 36pt to 44pt to meet the recommended minimum.

Community Solutions · 0

Sign in to share your solution.

More Guideline 4 (Design) rejections

View all Guideline 4 rejections