Ten Apps, Five Different StoreKit Shapes
Paid up front, paid plus an unlock, free plus an unlock, free plus consumable credits, free plus a subscription. What each one costs you in code, and the one I removed after shipping it.
I have ten apps on the App Store and I did not set out to try every monetisation model Apple offers. It happened one app at a time, each decision sensible in isolation, and I now maintain five distinct StoreKit shapes across the portfolio.
Here is what each one actually costs to build and support, including the one I shipped and then took back out.
The five shapes
Paid up front, no in-app purchase. Mino at $2.99, Nava at $2.99, PlotCraft and DiceCraft at $0.99. There is no StoreKit code in these apps at all. The App Store handles the transaction before the app ever runs.
Paid up front plus a non-consumable unlock. ComicFlow is $2.99 with an optional $6.99 Pro unlock that adds e-reader export and Face ID-locked collections.
Free plus a non-consumable unlock. PhotoStrip is free to download and free to use for five photos per batch. One $4.99 purchase removes the limit.
Free plus consumables. Negink gives three free generation credits, then sells credit packs: ten for $1.99 as a first purchase, thirty for $9.99, a hundred for $24.99, three hundred for $59.99.
Free plus a subscription. Wallora gives free credits during onboarding, then sells a recurring plan for continued generation.
And then Solspot and Timeflip, which are free with no purchase mechanism whatsoever.
Paid up front is nearly free to build
Worth stating plainly because it is easy to forget once you are deep in StoreKit: an app with no in-app purchase has no purchase code, no receipt validation, no restore flow, no entitlement state, no paywall, no sandbox testing, and no support email that starts “I paid but it still says free”.
Every one of those is a real ongoing cost, and four of my apps pay none of it.
The trade is that you have no free tier, so nobody tries before buying, and your App Store page has to do all the convincing on its own. For a $0.99 utility that is a fine trade. For anything where the value is hard to explain in six screenshots, it is not.
Non-consumables are the easy IAP
If you are going to sell something, sell a non-consumable. It is one purchase, permanent, and Apple handles almost everything.
The important property is that it is restorable. A user who reinstalls, or picks up a second device on the same Apple ID, gets their unlock back from the App Store. You do not need an account. You do not need a server. You do not need to know who they are. StoreKit 2 makes this close to trivial, because current entitlements are a property you read rather than a receipt you parse:
for await result in Transaction.currentEntitlements {
guard case .verified(let transaction) = result else { continue }
if transaction.productID == proProductID {
isPro = true
}
}
That is the whole entitlement check. No account system, no backend, no user identity. Both ComicFlow’s Pro unlock and PhotoStrip’s batch unlock are this shape, and neither has generated a support email about a lost purchase.
The gating decision is more interesting than the code. PhotoStrip gates on batch size and nothing else: every feature is available in the free tier, on five photos. You can watermark, strip EXIF, convert between all six formats, and see exactly what the app does before paying. What you cannot do is run it on your whole camera roll.
I like this better than feature-gating because it is honest about what you are buying. You are not buying access to the watermark tool. You are buying the removal of an artificial limit, and you know precisely what that limit feels like before you decide.
Consumables are where the work is
Negink sells credits. Credits are consumables, and consumables are a different animal, because they are not restorable.
Apple does not track how many credits a user has left. That is your problem. If a user buys a hundred credits, uses forty and reinstalls, Apple will tell you nothing useful. There is a purchase in their history and no notion of a remaining balance.
Which leaves you three options: build an account system, keep the balance on device and accept that a wipe loses it, or persist an anonymous identifier somewhere that survives reinstalls. Negink keeps an anonymous device identifier in the Keychain, which survives app deletion, so a reinstall does not resurrect the free credits and does not lose paid ones. No account, no email, no login.
That “does not resurrect the free credits” clause is the other half of consumables. A free allowance plus a delete-and-reinstall cycle is an infinite free tier if you are careless, and the cost of a generation is real money to me, not a rounding error.
There is a further wrinkle. The intro pack, ten credits for $1.99, is first-purchase-only. Apple has no built-in concept of that for consumables the way it does for subscription introductory offers, so it is something you enforce yourself and hide from the UI afterwards.
None of this is difficult. It is all just there, permanently, in a way the non-consumable apps simply do not have.
The subscription I removed
Negink originally sold a subscription. Weekly or yearly, a hundred credits a month. In version 2.0 I replaced it with the credit packs.
The reasoning was that the shape did not match the behaviour. Tattoo design is bursty. Someone plans a piece over a couple of weeks, generates thirty or forty concepts, takes them to an artist and is done for a year. Charging them monthly for a thing they use in a fortnight means they either cancel immediately, which makes the subscription a clumsy one-off purchase, or forget to cancel, which is revenue I do not want.
Credit packs match that. Buy what you need, credits do not expire, come back in a year and your balance is still there.
The part I want to flag for anyone considering the same move is what happens to the people already subscribed. You cannot cancel a subscription on a user’s behalf. You can stop offering it, you can remove it from your paywall, and existing subscribers keep renewing until they choose to cancel in their own Apple ID settings.
Which means the subscription code does not go away. The paywall stops showing it, but the entitlement check has to keep honouring it, the Terms of Service needs a legacy clause explaining that those plans continue, and support has to be able to answer a question about a product you no longer sell.
Removing a subscription is strictly additive work. Every path that existed still exists, plus the new one. If I had known that in advance I would have thought harder before shipping the subscription in the first place.
Wallora still has one, and there it fits: generating art is an ongoing activity for the people who like it, and the cost to me is per-generation and recurring, so a recurring price genuinely tracks a recurring cost.
Free with nothing to buy
Solspot ships with no purchase mechanism at all. No StoreKit, no paywall, nothing gated. There is a test in the project that asserts it.
This was a deliberate choice for a first version and not a permanent promise, which is a distinction worth being careful about in public. I have not said the app will be free forever, because I do not know that, and an indie developer who promises permanence and then charges has spent something they cannot get back.
What I have said is narrower and I can keep it: every light reading is free, including the difficult bright ones that a competitor might reasonably paywall. That is a commitment about a specific feature rather than about the entire future of the app.
What I would do differently
Fewer shapes. Not because any individual choice was wrong, but because five shapes means five paywall implementations, five sets of sandbox test cases, five bodies of support knowledge and five things to get right when StoreKit changes.
If I were starting again with the same ten apps, I would push almost everything toward two: paid up front for utilities where the value is obvious from the screenshots, and free plus a non-consumable unlock where it is not. Those two cover eight of my ten. They are restorable, they need no server, they need no account, and they cannot leave a user out of pocket for something they stopped using.
Consumables and subscriptions are for when the thing you sell costs you money every time someone uses it. That is a real category, and it is smaller than the App Store’s incentives make it look.