If you are shipping a subscription iOS app in 2026, you have two real options for handling purchases: RevenueCat or native StoreKit 2. We run both in production at Tappa, and the right answer depends on the app. This is a working engineer's guide to choosing.
What StoreKit 2 gives you, free
StoreKit 2 is a real, modern Swift API. Async/await, well-typed, and tightly integrated with the system. If you are starting today and your app is reasonably simple, StoreKit 2 is now genuinely good enough on its own.
let products = try await Product.products(for: ids)
let result = try await products.first?.purchase()
Three lines, no third-party SDK. The API also handles subscription status, family sharing, and refund flows in ways that used to require RevenueCat to glue together.
What RevenueCat still wins on
Cross-platform. If you have, or will have, an Android version, RevenueCat remains the cleanest abstraction over both stores. We use it on every app where Android is even a theoretical future.
Server-side state. RevenueCat gives you a webhook firehose of subscription events into your own backend. Doing the equivalent with StoreKit 2 means implementing the App Store Server Notifications V2 endpoint yourself, validating signed JWS payloads, and persisting state. Possible, but a real chunk of work.
A/B paywall testing. RevenueCat's paywall A/B testing tooling is now mature enough that even hardened do-it-yourselfers find it useful. We use it on apps where pricing experimentation is constant.
Analytics. Out of the box, RevenueCat gives you cohort retention, MRR, churn, and LTV. Building those yourself is doable, but it is real engineering and ongoing work.
The decision tree we use
- Single-app, iOS-only, simple paywall, small team. StoreKit 2.
- Multi-platform now or soon. RevenueCat.
- Heavy A/B testing on paywall and pricing. RevenueCat.
- App with rich server-side personalisation that needs subscription state. RevenueCat (or StoreKit 2 plus your own backend, if the team has the bandwidth).
- Studio with eight apps and a single shared analytics layer. RevenueCat — the operational savings compound.
What we run
- I Remember: StoreKit 2. Single platform, simple paywall, no backend needed. Saves us a fixed monthly cost.
- Lunara: RevenueCat. Multi-platform on the roadmap, heavy paywall experimentation, MRR dashboards in heavy use.
- Receipt Scanner: RevenueCat. Backend syncing of subscription state to a CSV-export service.
- DrawBuddy: StoreKit (legacy migration in progress).
The non-obvious answer is: start with StoreKit 2 for v1 unless you have a clear, immediate reason for RevenueCat. Migrating later is annoying but doable. Starting on RevenueCat for an app that never needs it is paying rent on infrastructure you will not use.
If you want to talk through a specific app's choice, write us. We are happy to give honest engineering advice.