Guideline 3.1.1
Guideline 3.1.1 - In-App Purchase: Missing Restore Purchases Button
Our Take
Apple is rejecting your app because it offers In-App Purchases but does not provide a mechanism for users to restore previously purchased content. This is a hard requirement for any app using non-consumable IAP or auto-renewable subscriptions. The restore function is critical because users switch devices, reinstall apps, and use Family Sharing. Without a visible restore button, users might repurchase content they already own. Apple considers this a consumer protection issue and enforces it consistently. This is almost always a quick fix -- you just need a visible 'Restore Purchases' button or link, typically on the paywall or settings screen, wired to StoreKit's restore functionality. The rejection is mechanical and rarely requires an appeal.
Resolution Guide
Add a Restore Purchases button
Place a clearly labeled 'Restore Purchases' button on your paywall screen and/or in Settings. It should be visible without scrolling.
Wire it to StoreKit
Call AppStore.sync() (StoreKit 2) or SKPaymentQueue.default().restoreCompletedTransactions() (StoreKit 1) when the button is tapped.
Show feedback
Display a loading indicator during the restore, then confirm success ('Purchases restored') or inform the user if no purchases were found.
Handle edge cases
Account for scenarios where the user has no prior purchases, where the restore fails due to network issues, or where the user is signed into a different Apple ID.
Test thoroughly
Use sandbox accounts to verify the restore flow works for all product types (non-consumables, auto-renewable subscriptions).
Prevention
Example Rejection Email
Before & After
Paywall screen shows subscription options and a 'Subscribe' button but no restore option anywhere on the screen
Paywall screen includes a 'Restore Purchases' link below the subscribe button, which triggers StoreKit restore and shows a confirmation alert
What changed: A visible restore mechanism is mandatory for any app offering non-consumable IAP or subscriptions.
Community Solutions · 0
Sign in to share your solution.
More Guideline 3 (Business) rejections
- Guideline 3.0 - Business: Irrationally High Pricing
- Guideline 3.1.1 - In-App Purchase: Expiring Virtual Currency
- Guideline 3.1.1 - In-App Purchase: External Link for Digital Content in Reader App Without Entitlement
- Guideline 3.1.1 - In-App Purchase: License Key or Serial Number Unlocks
- Guideline 3.1.1 - In-App Purchase: Loot Boxes Without Disclosed Odds
- Guideline 3.1.1 - In-App Purchase: NFT Ownership Unlocking App Features