New Year Special: AI Review Toolkit $29.99 $49.99 Get it now →

iOS Submission Guide

Subscriptions 2026 Guide

App Store Subscription Compliance Guide

Subscriptions are the most scrutinized monetization model on the App Store. From dark patterns to cancellation flows, here's everything you need to know to get your subscription app approved—and keep it approved.

⚠️ Why Subscription Apps Face Extra Scrutiny

Apple has significantly increased enforcement of subscription guidelines. In 2025-2026, subscription-related rejections have risen by 40%, primarily due to dark pattern enforcement and free trial disclosure requirements. Apps that previously passed review are being rejected on updates for practices Apple now considers deceptive.

Understanding Apple's Subscription Philosophy

Apple's subscription guidelines (primarily 3.1.2) are designed around one principle: users must always understand exactly what they're signing up for. This means:

💰

Price Clarity

Users must see the exact price they'll pay before any purchase

📅

Duration Clarity

Billing frequency and trial length must be prominently displayed

🚪

Easy Exit

Cancellation must be as easy as sign-up—no hidden hoops

The "Grandmother Test"

Apple reviewers often apply what's informally called the "grandmother test": if your grandmother couldn't understand exactly what she's buying and how to cancel it, your subscription UI probably won't pass review.

Dark Patterns Apple Will Reject

Apple has explicitly banned several subscription dark patterns. Here are the most common ones that cause immediate rejection:

Confirm Shaming

Using guilt-inducing language on decline buttons like "No, I don't want to save money" or "I prefer the boring version."

Rejected: "No thanks, I hate saving time" / Approved: "Not now" or "Skip"

Hidden Close Buttons

Making the dismiss/close button hard to find, small, low contrast, or delayed in appearing.

Rule: Close/dismiss button must be visible immediately and meet accessibility contrast requirements

Forced Action / Roach Motel

Requiring a subscription to use basic features, or making it easy to subscribe but hard to cancel.

Rule: If your app works without subscription, users must be able to use it. Cancellation info must be accessible.

Bait and Switch

Advertising one price/duration then charging differently, or changing prices immediately after trial ends.

Rule: Price shown before purchase must match what's charged. Introductory offers must clearly state what happens after.

Misleading Free Trial Language

Emphasizing "FREE" while hiding the fact that payment begins automatically after the trial.

Rule: "Free trial" must always be accompanied by clear indication of what happens when it ends

Pre-Selected Premium Options

Auto-selecting the most expensive plan or longest commitment by default.

Rule: Don't pre-select any option, or if you must, default to the least expensive/shortest commitment

🔍 Apple's Review Process for Subscriptions

Apple reviewers specifically test subscription flows by: (1) checking if they can dismiss paywalls, (2) verifying price clarity, (3) testing free trial understanding, and (4) confirming cancellation instructions are accessible. They often record the entire flow as evidence for rejections.

Free Trial Requirements

Free trials are one of the most common sources of subscription rejections. Apple requires complete transparency about what happens when a trial ends.

Mandatory Free Trial Disclosures

Your free trial UI must clearly display all of the following:

1

Trial Duration

"7-day free trial" - not just "free trial"

2

Post-Trial Price

"Then $9.99/month" - the exact amount they'll be charged

3

Auto-Renewal Notice

"Subscription automatically renews unless cancelled"

4

Cancellation Deadline

"Cancel at least 24 hours before trial ends to avoid charge"

❌ Will Be Rejected

START FREE TRIAL

Try Premium for free

  • • No trial duration
  • • No price after trial
  • • No cancellation info

✓ Compliant Design

Start 7-Day Free Trial

Then $9.99/month

Cancel anytime. You'll be charged unless you cancel at least 24 hours before trial ends.

  • • Clear duration (7 days)
  • • Price shown ($9.99/month)
  • • Cancellation info included

💡 StoreKit Free Trial Best Practice

Use Product.SubscriptionInfo.RenewalInfo in StoreKit 2 to dynamically display trial information. This ensures your UI always matches what the App Store shows, avoiding discrepancies that cause rejection.

Cancellation Flow Requirements

Apple requires that cancellation be as easy as subscription. You can't require users to contact support, call a phone number, or navigate through multiple screens to cancel.

What You Must Provide

1

In-App Cancellation Path

Provide clear instructions on how to cancel, accessible from your app's settings or account section.

2

Direct Link to Subscription Management

Use the system-provided deep link to take users directly to their subscription:

// StoreKit 2 - Open subscription management
try await AppStore.showManageSubscriptions(in: windowScene)
3

No Obstacles to Cancellation

Don't require login, surveys, support chat, or any other friction before showing cancellation option.

⚠️ Retention Flows: What's Allowed

You can offer retention deals when users try to cancel, but only if:

  • • The "cancel anyway" option is equally prominent as the retention offer
  • • You don't show multiple retention screens (one is the maximum)
  • • Users can still cancel with a single additional tap
  • • You don't use guilt-inducing language

❌ Rejection-Causing Practices

  • • Requiring users to email support to cancel
  • • Showing multiple retention offers before cancel
  • • Hiding cancellation in a FAQ or help article
  • • Requiring a "reason" before allowing cancellation
  • • Making users type "CANCEL" to confirm

✓ Compliant Practices

  • • "Manage Subscription" button in settings
  • • One optional retention offer with equal "cancel" button
  • • Direct deep link to iOS subscription management
  • • Clear instructions if cancellation is through Settings app
  • • Optional (skippable) feedback survey after cancellation

Pricing Transparency Requirements

Every subscription price shown in your app must match exactly what Apple will charge. This includes handling currency, regional pricing, and introductory offers.

1 Use StoreKit for Pricing Display

Never hardcode prices. Always fetch and display pricing from StoreKit:

// StoreKit 2 - Get localized price
let product = try await Product.products(for: ["premium_monthly"]).first
let priceString = product?.displayPrice // "$9.99" localized

2 Display Billing Period Clearly

Don't just show the price—show the complete billing context:

Wrong: "$9.99" or "Only $9.99!"

Correct: "$9.99/month" or "$99.99/year"

3 Introductory Offer Disclosures

When offering discounted intro prices, you must show both:

  • The introductory price and duration
  • The regular price that will apply afterward

Example: "First month $0.99, then $9.99/month"

💰 Per-Unit Pricing Claims

If you advertise savings like "only $0.82/month when billed annually," you must also prominently show the actual charge: "$99.99/year billed as one payment."

StoreKit Implementation Requirements

Proper StoreKit implementation is crucial for subscription compliance. Here are the key requirements:

Restore Purchases (Required)

Your app must include a "Restore Purchases" button that is:

  • Visible on the subscription/paywall screen
  • Also accessible from Settings/Account
  • Functional—actually restores purchases when tapped
// StoreKit 2 - Restore purchases
try await AppStore.sync()

Transaction Handling

Your app must properly handle all transaction states:

State Your App Must
Purchased Unlock content immediately
Pending Show "pending" state, don't unlock yet
Failed Show error, allow retry
Expired Gracefully revoke access
In Billing Retry Maintain access (Apple recommends)

Family Sharing (If Enabled)

If you enable Family Sharing for subscriptions:

  • Check Transaction.ownershipType to identify family members
  • Grant the same access to family members as the subscriber
  • Handle family sharing revocation gracefully

Common Subscription Rejections

3.1.2

Subscription Information

"Your app doesn't clearly describe the subscription terms, including price, duration, and auto-renewal information."

Fix: Add all required disclosures (price, duration, renewal terms) next to the subscribe button, not buried in ToS.

3.1.2

Free Trial Not Clear

"Users may not understand that they will be charged after the free trial ends."

Fix: Show post-trial price and duration directly on the free trial button. Add "Cancel anytime before [date] to avoid charge."

3.1.1

No Restore Purchases

"Your app doesn't include a mechanism for users to restore their previously purchased in-app purchases."

Fix: Add a visible "Restore Purchases" button on paywall and in Settings. Ensure it actually works.

5.6

Dark Pattern / Deceptive UI

"Your app uses interface elements or language that may deceive or mislead users about subscription terms."

Fix: Remove confirm-shaming language, make close buttons visible, don't pre-select expensive options, use neutral button text.

2.1

Subscription Not Functional

"We were unable to complete the subscription purchase due to a technical issue."

Fix: Test purchases in sandbox and TestFlight. Handle all transaction states properly. Check StoreKit configuration files.

Subscription Compliance Checklist

Pricing & Transparency

  • All prices fetched from StoreKit (not hardcoded)
  • Billing period shown with every price
  • Auto-renewal clearly stated
  • Introductory offers show regular price

Free Trials

  • Trial duration clearly displayed
  • Post-trial price shown on trial button
  • Cancellation deadline mentioned
  • No misleading "FREE" emphasis

User Experience

  • No confirm-shaming language
  • Close/dismiss button visible immediately
  • No pre-selected premium options
  • Paywall can be dismissed without subscribing

Technical Requirements

  • Restore Purchases button present & functional
  • Cancellation instructions accessible
  • All transaction states handled
  • Tested in sandbox environment

Related Guides

Audit Your Subscription Flow Before Submission

Our AI Review Toolkit includes subscription-specific prompts that analyze your paywall screenshots and code for compliance issues—catching dark patterns before Apple does.

Get the AI Toolkit

Want AI to audit your app before submission?

Get our AI Review Toolkit with prompts that catch guideline violations automatically.

Get the AI Toolkit