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:
- The name of the subscription
- The length of the billing period
- The price, with currency
- What the trial is and when it ends, if there's a trial
- That it renews automatically unless cancelled
- Links to your Terms of Use and Privacy Policy
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.