If you are trying to figure out how to create a subscription in‑app purchase for iOS, you find out fast that the hardest part is not writing Swift. It is getting App Store Connect, pricing, and review rules right so you do not end up stuck in “Waiting for Review” limbo for a month.
But first, you must avoid a few common setup mistakes that quietly sabotage the entire process. This guide walks through the whole flow: prerequisites, subscription groups, product setup, pricing and trials, StoreKit integration, and sandbox testing.
The goal is to ship a subscription that works, renews, and survives App Review without turning your launch into a guessing game.
Before you touch subscriptions, your Apple back office has to be clean. Apple will happily let you design paywalls and flows while quietly blocking payouts or in‑app purchase setup because something in the background is red.
At minimum, make sure:
If any of this is missing, you can still click around, but things will fail silently later: products that never become “Ready to Submit,” payouts that never arrive, or subscriptions that cannot be attached. For auto‑renewable subscriptions, Apple keeps 30% of the first year of each subscription and usually drops to 15% afterward for eligible long‑running subs, so your pricing and margin math should assume that cut from day one.
At AppMakers USA, we treat this as infrastructure work. The unglamorous checklists here are what keep you from debugging money flows at midnight the day before launch.
Once the account and agreements are in a good place, you can actually reach the subscription configuration screens. The path moves a bit as Apple tweaks UI, but the logic stays the same.
This is the control center you will use for:
A quick sanity check: if you do not see “Auto‑Renewable Subscription” as an option when adding a product, you either picked the wrong app type, or your agreements/region do not allow it yet.
Subscription groups are where your business model and Apple’s rules meet. A subscription group is a set of related subscriptions (for example, Basic / Pro / Team) where each user can only have one active subscription at a time. Upgrades, downgrades, and crossgrades all happen inside that group.
A simple rule: if you are shipping one product with different levels of access, you almost always want one subscription group. Multiple groups only make sense if you have truly separate products that should not share trials or upgrade paths—for example, a meditation app and a separate kids’ content app that just happen to live in the same binary.
Inside a group you:
The group‑level trial rule is the one that surprises teams: a user who has already used a free trial in a group is not treated as “new” just because you move them to a different SKU in that same group. They only get one “first‑time” trial per group.
Some practical patterns we use with clients at AppMakers USA:
Once the group is structured well, everything downstream—pricing, offers, analytics—becomes easier to reason about.
Now that your groups are structured, you can stop arguing about tiers and define the actual products. With groups in place, you can add the actual subscription products users will buy.
In App Store Connect → My Apps → [Your App] → Subscriptions:
Now handle the metadata that actually gets you through review:
Most of the painful rejections we see are not about StoreKit. They are about missing localization, vague descriptions, or metadata that does not line up with what the product actually does. When we are working with teams using GoodBarber, we also keep the subscription names, pricing, and terms in the GoodBarber back office in lockstep with App Store Connect so review is not looking at two different stories for the same paywall.
Now that your metadata is ready, you can move from “what exists” to “what it costs.” This is where you set concrete subscription price tiers and decide how trials and introductory offers work so users know exactly what they are paying for and when.
Remember that you cannot sell subscriptions at all until the Paid Apps agreement is active and your tax and banking setup in App Store Connect is complete. From our side at AppMakers USA, the apps that perform best treat this as a pricing strategy exercise, not just another form to fill out. To keep it manageable, think about it in two passes: first, how you configure subscription price tiers, and second, how you design trials and offers so they support that structure instead of fighting it.
Apple uses a price tier system rather than arbitrary prices. You pick a base tier in your primary currency, then either accept Apple’s regional conversions or override specific countries where you want custom pricing. Avoid regional overrides unless you have clear requirements, like local regulations, competitive pressure, or a specific positioning goal in that market. You do not need to out‑optimize the entire planet. You need pricing that supports your unit economics and makes sense to your audience.
Within each subscription group, price and value should line up cleanly. The top tier in the group should be the richest plan, with lower tiers stepping down in benefits in a way that still feels fair. In App Store Connect you can:
Remember: Apple takes around 30% of the first year and 15% after that for eligible subscribers. That means your ARPU math should assume you are keeping roughly 70–85% of the list price after Apple’s cut. Before you commit to big price jumps, keep in mind that certain increases are effectively one‑way; once you move a live plan to a higher price, you cannot simply roll it back without careful handling of existing subscribers.
A simple, durable structure we come back to often:
Trials and introductory offers sit on top of core pricing; they do not rescue a weak value proposition. Average iOS prices have crept up year over year, but about 82.3% of App Store transactions still happen without any offer attached, which tells you most of the work is done by the base price and perceived value. Trials should confirm that your price makes sense, not hide it.
A simple way to think about them:
Rough patterns we have seen work across projects:
| Option | When It Fits |
|---|---|
| 7-day free trial | Testing lower-priced monthly plans |
| 14-day or 1-month free trial | Higher tiers where users need time to see value |
| Intro discount on annual (~49%) | Locking in committed users despite Apple’s cut |
Avoid weekly plans; long‑term retention often hovers around 3–6%, and they tend to attract churn‑heavy users who create more support load than they are worth. When we do run experiments at AppMakers USA, we A/B test structures in soft‑launch markets first, then localize offers by region and acquisition cost before rolling anything out broadly.
Whatever you choose, keep an eye on the right numbers: customer acquisition cost, lifetime value, trial start rate, trial‑to‑paid conversion, and post‑trial churn. Those tell you whether the pricing and offers you picked are actually working or just looking good in a spreadsheet. Treat this entire section as a business decision, not a UI detail. You are deciding who you want to attract, how you want them to pay, and what behavior you are rewarding. Once those basics are solid, you can layer in AI‑driven matchmaking to suggest the right tier or feature bundle for different user segments instead of blasting everyone with the same generic upgrade.
Once the business rules are in place, StoreKit is the bridge between App Store Connect and your app.
With StoreKit 2, the flow looks roughly like this:
For more serious products, you do not want all of this logic living only on device. A server‑side component that can:
makes it much easier to support multiple platforms, multiple devices per user, and cleaner account recovery. In practice, we often lean on Firebase or similar backend tooling to centralize receipt validation and entitlement checks instead of reinventing yet another backend from scratch.
If you are early, you can start with on‑device verification and a thin abstraction layer around entitlements. Just design that layer so you can move the logic off‑device later without rewriting your whole app.
Developers often choose engines like Godot or Unity based on project size and cost, and the same thinking applies here: pick tools you can afford now, but plan for where they need to be when usage ramps. Our team also recommends planning for cloud scalability early so your subscription infrastructure can grow with your user base instead of becoming the bottleneck.
Subscriptions that look fine in a demo can still fall apart once renewals, upgrades, and cancels start happening. That is what sandbox is for.
A clean test setup looks like this:
Then run the scenarios you will actually see in production:
Most of the broken subscription flows we inherit come from teams that only ran the first purchase once and never looked at what happens three or four renewals later.
Put recurring, high-value features behind the subscription (ongoing content, advanced tools, multi-device sync). Keep onboarding, basic navigation, and core safety/security features free so the app still makes sense without paying.
You can, but it gets messy fast. If you add a lifetime option, treat it as a clear “all-in” tier and keep the rest subscription-based. Make sure your entitlements logic is simple enough that users and support can explain who gets what in one sentence.
Not every month. Set a structure you believe in, run it for a few cycles, and review every 3–6 months with real data. If you change pricing or offers, test in a smaller region first instead of flipping the switch globally.
Mismatched metadata (names, prices, or benefits that don’t match the paywall), unclear terms, or broken restore/subscription flows. Less often, it’s pricing that feels abusive or features behind a paywall that Apple thinks should be available to all users.
Log product IDs, user IDs, transaction IDs, transaction states (purchased, renewed, refunded, revoked), and key timestamps. That gives you enough of a trail to replay what happened when someone says, “I paid, but the app still thinks I’m on free.”
Before you ship, think less about “Did we code this right?” and more about “Would a tired user at 11 p.m. understand what they’re paying for?” If your account setup, groups, products, pricing, and trials all tell one coherent story, StoreKit and sandbox become ways to confirm that story, not patch it.
Walk through a fresh install, read every price, label, and term out loud, then try the flows you know users will hit first—start a trial, upgrade, downgrade, cancel, and come back after an expiration. If anything feels surprising or hard to explain in one sentence, fix it before you press Submit.
At AppMakers USA, that’s the point where we like to get involved: once you know subscriptions are the right model, but you want someone who has already tripped over the edge cases to pressure-test your setup. If you’re there, it’s a good time to bring in a team that can help you ship subscriptions that Apple approves and users actually keep.