App Store subscriptions without the rejection

If your app charges a subscription, the App Store has specific rules about how you present it, and reviewers check every one. Here's the setup that passes review the first time.

The products

Create your subscription products in App Store Connect before you submit, with the exact IDs your code expects. Attach the free trial to the product, not to the app. Add a review screenshot to each product showing where it appears in the app.

If the products aren't created, or the Paid Apps agreement isn't signed, or banking and tax aren't complete, the products won't load during review and you'll be rejected for a broken purchase flow. This is the single most common cause of a first rejection and it has nothing to do with your code.

The paywall copy

Guideline 3.1.2 requires the paywall to state, in text, before the purchase button:

Use the same words everywhere. If the App Store listing says "two weeks free" the paywall says "two weeks free," not "14-day trial." Reviewers compare them.

The restore button

Every paywall needs a Restore Purchases button, and it needs to work. A reviewer will delete the app, reinstall, and tap it. If the subscription doesn't come back, that's a rejection.

Fail open, lock late

Entitlement checks can return an undetermined state, especially on first launch before StoreKit has synced. Treat undetermined as entitled. Lock the app only when the store affirmatively reports there's no active subscription. An app that shows a paywall on first launch because the store hasn't answered yet feels broken, and reviewers notice.

No visible test switches

Any tester bypass for the paywall must be invisible. A hidden gesture on the version number is fine. A toggle in Settings that says "Unlock everything" is a rejection under 2.3, even if it does nothing in production.

Account deletion

If users create an account, they can delete it from inside the app. This has nothing to do with subscriptions, but it's checked in the same pass and it's the second most common cause of rejection.

What we do

Every app we ship goes through this list before submission: products created and verified with a sandbox purchase on a real device, paywall copy checked against the listing word for word, restore tested on a second device, account deletion in Settings. We check the same things Apple checks, before Apple does.