Do it yourself
$109 per platform, one-time
The WebViewGold license: a finished Xcode or Android Studio project. Paste your URL, set name and icon, switch on features, build and submit. Free updates forever.
See plans on the main pageApp Store rejection
Your in-app purchase works, and Apple still rejects the app. 3.1.2 rejections are about what the paywall tells the user before they tap: what they get, how much, how often, that it renews, and how to restore or cancel. All of it is copy and two links.
From $109 one-time per platform, or let our team do it all from $698.
Auto-renewable subscriptions must deliver ongoing value, work across the user's devices, and be presented honestly: the paywall must state the subscription's name, its length, the price per period, and that it renews automatically until cancelled. The app and its App Store listing need working links to the terms of use and the privacy policy, and users must be able to restore purchases. Free trials and introductory offers must say what they cost afterwards.
Web pricing pages break several of these at once. A card that says "Pro $9/mo" with a "Start free" button has no period in words, no auto-renew statement, no trial end price, no restore link, and a "Cancel anytime in your dashboard" line that points to Stripe. That is a 3.1.2 rejection even though the RevenueCat purchase itself succeeds.
restoreinapppurchases://) and a "Manage subscription" link (cancelinapppurchase://).Design the paywall in the RevenueCat dashboard, add your terms and privacy links there, and open it from the web app with revenuecat://launchPaywall?external_id=USER_ID&offering=default. The template shows localized prices and a restore button, so the required elements are in one place. Requires iOS 15 or later.
Keep your design, add the checklist items above, and link the buy button to revenuecat://purchase?external_id=USER_ID&product=pro_monthly. For localized prices, read the store country from storeLocation after calling getstorelocation:// (or enable autoInjectVariable in Config.swift) and show the matching price you set in App Store Connect.
RevenueCat webhooks update the user's plan in Supabase or Firebase. In the app, show "Pro until [date]" and the manage link; getpurchasehistory:// fills window.purchaseHistory if you want a native receipt list.
The Stripe customer portal, "Change plan on the website" buttons and web-only promo codes must not appear inside the app. Hide them with the user agent marker or with app-only CSS.
Paste the terms of use URL and the privacy policy URL into the App Store description and the privacy policy field. Apple's standard EULA can be used if you have no terms of your own.
Walk through purchase, restore and cancellation with a sandbox tester, record a short video, upload the new build and reply in Resolution Center with where the disclosures are.

WebViewGold has allowed us the shortest and most efficient time-to-market ever possible from among all the other app platforms we have ever tried during the past 5 years. I don’t know why I hadn’t discovered you sooner, but I am really, really glad I did. Currently nearing 6000 app downloads on both iOS App Store & Google Play Store without any problem!
| Flagged | Passes |
|---|---|
| Start free | 7-day free trial, then $4.99 per month. Renews automatically; cancel at least 24 hours before the trial ends to avoid the charge. |
| Pro $9 | Pro, $8.99 per month, billed monthly until cancelled. |
| Lifetime access (for a subscription) | Yearly plan, $49.99 per year. |
| Cancel anytime on our website | Manage or cancel in your Apple ID subscription settings. |
Create a Paywall component for my app. When the user agent contains MyAppiOS (our iOS app), show this version; on the web keep the existing Stripe pricing. Content: plan name [name]; what is included [list]; price per period as a variable [price] with the period written in words (per month / per year); free trial [days] days, then [price] per period; the sentence: Your subscription renews automatically until cancelled. Manage or cancel it in your Apple ID subscription settings at least 24 hours before the current period ends; a Subscribe button that navigates to revenuecat://purchase?external_id=[userId]&product=[productId]; a Restore purchases text link to restoreinapppurchases://; a Manage subscription link to cancelinapppurchase://; small footer links to /terms and /privacy. Keep the layout simple, high contrast, buttons at least 44 px high, no claims not in this list.
In the app, on the paywall, before the purchase sheet. The StoreKit sheet repeats it, but reviewers want the disclosure on your screen.
No. Comparing prices or pointing to a cheaper web plan inside the app is a 3.1.1 issue on top of 3.1.2. Keep web pricing on the web.
No. Unlock the entitlement from your backend for users who already pay on the web; that is allowed as long as the app itself offers IAP and does not link out to pay.
Same result, different amount of work on your side. All three come with the approval guarantee and 24/7 human support.
$109 per platform, one-time
The WebViewGold license: a finished Xcode or Android Studio project. Paste your URL, set name and icon, switch on features, build and submit. Free updates forever.
See plans on the main page$349 per license, one-time add-on
No Mac, no Xcode, no Android Studio: configure in the browser, we build both apps in the cloud and hand them to App Store Connect and the Play Console.
How the Cloud Builder works Try the free demo$698 per platform $798
Send us your URL and icon. Our team configures, builds and delivers your app within 72 hours, white-label, with source projects. Both platforms for $1,158.
Full Service details Powered byWinter Sale prices valid until December 31, 2026.
App Store & Google Play approval guarantee – or your money back within 14 days
Rather hand it over? Full Service: we configure, build and deliver within 72 hours, from $698 per platform. Questions? Chat with us 24/7.
Refunds are granted under the conditions listed in our FAQ: a non-content rejection by Apple and/or Google, claimed within 14 days after purchase.