iOS Buyout vs Subscription: a 4-app decision based on 2026 data
# Substack Issue #17 (paste-ready) — iOS Buyout vs Subscription: a 4-app decision based on 2026 data
> **Calendar**: 2026-05-20 09:00 PT (1 周内)
> **Hook**: “Indie iOS dev 60 天 ship 4 app, 我在订阅模型默认时代选了 freemium + 一次性 IAP. 这是数据.”
> **A/B subjects** (pick 1):
> - “I shipped 4 iOS apps. I picked one-time purchase. Here’s the math.”
> - “Why your indie iOS app shouldn’t be a subscription (2026 data)”
> - “Day 60: 4 iOS apps + a $2.99 IAP decision”
> **Word count**: 1450 words
> **Cross-post**: 2026-05-22 09:00 PT to dev.to
---
## Why your indie iOS app shouldn’t be a subscription
Open any 2026 indie iOS dev post and you’ll see a default: **freemium + monthly subscription**. Apple’s own marketing pushes it. RevenueCat’s report celebrates it. Every YouTube tutorial defaults to it.
I shipped 4 iOS utility apps in 60 days. I picked one-time purchase IAP for all of them. After running the math against 2026 conversion benchmarks, I think most indie devs default into the wrong model.
Here’s the data and the logic.
## The 5x conversion gap most devs miss
Adapty’s 2026 benchmark (largest sample size in the indie segment) reports:
| Model | Median conversion |
|---|---:|
| Hard paywall (paid app or required IAP unlock) | **12.11%** |
| Freemium + subscription | **2.18%** |
| Trial → paid (good) | 8-12% |
| Trial → paid (great) | 15-25% |
A hard paywall converts **5x better** than freemium subscription. This is counter-intuitive because the conventional wisdom says “let users try first, they’ll be more likely to pay.” The data says the opposite: lower the friction from “decide if you’ll pay” to a single moment, and more people pay.
For utility apps specifically (Adapty), the download-to-trial rate is 24% — meaning users who hit a paywall actually engage with it.
## Why utility apps especially benefit from one-time
Productivity and AI apps thrive on subscriptions because they deliver continuous value: new features, cloud sync, model updates. Utility apps deliver value once or occasionally:
- **AutoChoice** (decision wheel) — used 1-3 times/week
- **AltitudeNow** (altimeter) — used when hiking, days/weeks apart
- **DaysUntil** (countdown) — set once, view passively via widget
- **PromptVault** (prompt manager) — used during AI workflows
User psychology: “I don’t want a monthly fee for an altimeter I use 3 times a year.” The one-time payment frames it as **”buy this useful tool once,”** not **”rent infrastructure forever.”**
## The Apple tax math
People assume subscription is mathematically superior because of recurring revenue. Run the actual numbers:
| Scenario | $2.99 one-time | $1.99/month subscription |
|---|---:|---:|
| User pays | $2.99 once | $23.88/year |
| Apple cut Y1 | $0.90 (30%) | $7.16 (30%) |
| Net to dev Y1 | $2.09 | $16.72 |
| Y2 cut drops to 15% | — | $20.30 (if retained) |
Subscription **looks** like 8x revenue. But:
- Indie devs typically see 30-50% Y1 retention (no marketing spend, no LiveOps team)
- Reality: $16.72 × 0.40 = **$6.69/user effective Y1** vs $2.09 one-time
- Y2 only happens for ~15-20% of original users at indie scale
After accounting for the 5x conversion gap (12% vs 2.18%), one-time still wins:
- 1000 downloads × 12% conv × $2.99 × 0.7 = **$251** (one-time)
- 1000 downloads × 2.18% × $1.99/mo × 5 mo retention × 0.7 = **$152** (subscription)
## When subscription actually wins
Three conditions:
1. **Continuous server cost** (AI inference, cloud storage, sync infra) — your unit economics require recurring
2. **Habit-forming daily usage** — meditation, fitness, language learning
3. **You have a LiveOps team** — content drops, events, retention nurture campaigns
For most indie utility apps, none of these apply. Going subscription-first is fighting your own product against the conversion data.
## My 4-app decision
After running the matrix:
| App | Value cadence | Pricing model | IAP price |
|---|---|---|---|
| AutoChoice (decision wheel) | Occasional | Free + $2.99 one-time | Pro unlock |
| AltitudeNow (altimeter) | Niche/seasonal | Free + $1.99 one-time | Pro unlock |
| DaysUntil (countdown widget) | Daily passive | Free + **dual track** ($4.99 once or $0.99/month) | Pro unlock |
| PromptVault (prompt manager) | Daily active | TBD (likely subscription, due to AI inference cost) | TBD |
DaysUntil gets dual track because user behavior splits:
- 80% set 5-10 events and view passively → one-time $4.99 fits
- 15% are heavy users with 30+ events, custom themes, share countdowns → $0.99/month captures their willingness to pay
## What I built (the boring engineering)
StoreKit 2 makes one-time IAP nearly free to wire. The IAPManager is ~90 lines of Swift, identical across all 4 apps:
```swift
@Observable
final class IAPManager {
static let premiumProductID = “com.jiejuefuyou.<app>.premium”
var isPremium: Bool = false
var products: [Product] = []
func purchase() async {
guard let product = products.first else { return }
let result = try await product.purchase()
if case .success(let v) = result, case .verified(let t) = v {
await t.finish()
await refreshEntitlements()
}
}
func restore() async {
try await AppStore.sync()
await refreshEntitlements()
}
}
```
The PaywallView is a single SwiftUI sheet, ~120 lines, presented at five strategic trigger moments per app:
1. User hits free tier limit (e.g. 6th choice in AutoChoice)
2. User reaches premium-only feature (e.g. share card, export)
3. User opens settings (passive “Upgrade” row)
4. User views past data beyond free retention window
5. Onboarding screen 3 (preview, not forced)
## What this projects to (the boring math)
Conservative model (5% conversion, 1k monthly downloads, 4 apps combined):
| App | DLs | Conv | Net/month |
|---|---:|---:|---:|
| AutoChoice | 300 | 5% | $31 |
| AltitudeNow | 200 | 5% | $14 |
| DaysUntil | 500 | 5% | $87 |
| **Total** | 1000 | — | **$132** |
Optimistic model (10% conversion, 5k monthly downloads):
| App | DLs | Conv | Net/month |
|---|---:|---:|---:|
| AutoChoice | 1500 | 10% | $314 |
| AltitudeNow | 1000 | 8% | $111 |
| DaysUntil | 2500 | 12% | $1196 (mix) |
| **Total** | 5000 | — | **$1620** |
The high end requires real ASO + content distribution work. The low end happens if I just ship and forget — which is fine, because the dev cost is sunk.
## What I’m watching for
- **Day 30 conversion vs prediction**: if I see 5%, model holds. If I see 2%, paywall triggers need work.
- **Restore Purchase rate**: 5-10% restore is normal. If it’s 0, the button is hidden too well.
- **Refund rate**: should be <2% for one-time IAP. >5% means the description is misleading.
- **Cross-app cross-promo lift**: I’ll add “Made by jiejuefuyou” footer banner with a soft link to my other apps. If 10% click-through rate, it doubles effective LTV.
## TLDR
The 2026 indie iOS playbook says “go subscription.” The conversion data says “hard paywall converts 5x.” If your app delivers occasional or one-time value (like most utility apps), one-time IAP is mathematically superior even before accounting for retention reality.
I’ll come back in 30 days with actual numbers. If I’m wrong, I’ll publish that too.
---
**Subscribe** if you want to see the Day 30 data and refund/restore rates.
**Reply** if you’ve shipped indie iOS apps with one-time IAP — I want to compare notes on what trigger moments converted best.
---
## A/B subject candidates
1. “I shipped 4 iOS apps. I picked one-time purchase. Here’s the math.”
2. “Why your indie iOS app shouldn’t be a subscription (2026 data)”
3. “Day 60: 4 iOS apps + a $2.99 IAP decision”
## Cross-platform plan
| Platform | Date | Variant |
|---|---|---|
| Substack | 2026-05-20 09:00 PT | This piece |
| dev.to | 2026-05-22 09:00 PT | Same content + StoreKit 2 code samples expanded |
| Reddit r/iOSProgramming | 2026-05-13 22:00 PT | Excerpt + link |
| HN Show HN | 2026-05-14 06:00 PT | “Show HN: 4 indie iOS apps + a one-time IAP decision” |
| Twitter/X | 2026-05-13 09:30 PT | 8-tweet thread |
| LinkedIn | 2026-05-13 11:00 PT | Repurposed 600-word post |

