Use case · iOS
Licensing for iOS apps
What the App Store handles, where StoreKit ends, and how a signed-key licensing layer fits for cross-platform and enterprise iOS distribution.
Start FreeFor developers shipping iOS apps that need entitlements beyond what StoreKit alone provides — cross-platform licenses, enterprise distribution, or a shared account across Apple platforms.
- StoreKit only entitles the App Store purchase — it cannot license a Mac or Windows build of the same product.
- Enterprise and ad-hoc iOS distribution has no App Store receipt to validate against.
- A customer who paid on macOS expects the iOS app to unlock too, without paying twice.
Updated March 2026
Licensing on iOS is more constrained than on the Mac, and it is worth being precise about where a licensing layer does and does not belong. This page covers what the App Store mandates, where StoreKit’s reach ends, and the real cases where a signed-key licensing layer earns its place in an iOS app.
What the App Store requires
For an app distributed through the iOS App Store, Apple’s rules are firm: in-app purchases of digital goods and subscriptions must go through StoreKit and Apple’s payment system. You do not get to swap in Stripe for an iOS in-app purchase, and a licensing layer does not change that.
So if your iOS app is a standalone App Store product whose unlock is bought inside the app, StoreKit is the mechanism, full stop. A licensing layer is not a way around Apple’s commission, and presenting it as one would be both against the rules and bad advice.
That is the boundary. Inside the App Store, for purchases of that app’s own digital goods, StoreKit owns licensing. The interesting cases are at the edges.
Where StoreKit runs out
StoreKit entitles an App Store purchase of that app. It says nothing about anything else, and modern products routinely need more:
Cross-platform entitlement. Your product is a Mac app and an iOS app. A customer who buys the Mac version directly — through Stripe, outside the App Store — has a valid license to your product. StoreKit has no concept of that purchase; it cannot unlock the iOS build for them. The entitlement needs to live somewhere platform-neutral.
Enterprise and ad-hoc distribution. iOS apps distributed through the Apple Developer Enterprise Program, or to a controlled set of devices, never touch the App Store. There is no App Store receipt to validate. If those builds have paid tiers, licensing is entirely yours to provide.
A shared account across platforms. When a customer’s license is tied to them, not to a particular store transaction, a single purchase should unlock every platform you ship. StoreKit cannot model that, because it only knows about App Store transactions on Apple platforms.
In each of these, the entitlement is bigger than any one App Store purchase — and that is exactly the gap a licensing layer fills.
How a signed-key layer fits an iOS app
A licensing layer issues a license tied to the customer, expressed as a signed lease. The same lease format is verified by your iOS app, your macOS app, and any other build you ship — each one holds the public key and checks the signature locally.
The result: a customer who buys on macOS through Stripe gets a signed license; your iOS app, given that same license, verifies it and unlocks. The purchase followed the customer across platforms because the entitlement was never tied to a single store. For an enterprise iOS build with no App Store receipt, the signed license is the entitlement — there is nothing else to check against.
Offline license validation works identically on iOS: the app ships with the public key and verifies the lease in memory, with no network call at launch. The Apple-platform SDK surface is the same one a Mac app uses:
import KeylightSDK
await licensing.checkOnLaunch()
switch licensing.state {
case .licensed:
enablePaidFeatures()
case .trial(let daysLeft):
showTrialBanner(daysLeft: daysLeft)
case .expired:
showRenewalPrompt()
case .invalid:
showActivationSheet()
}
Getting the boundary right
The honest summary for an iOS developer: use StoreKit for what Apple requires StoreKit for — App Store in-app purchases of your app’s digital goods. Use a licensing layer for what StoreKit cannot do — cross-platform entitlements, enterprise and ad-hoc builds, and a customer-centric license that unlocks every platform you ship.
Most products that ship on iOS and the Mac end up using both: StoreKit for the iOS App Store purchase, and a signed-key licensing layer so a direct Mac purchase, an enterprise build, or a cross-platform account all resolve to the same entitlement. The macOS app licensing use case covers the Mac side of that pairing.
Keylight issues signed, offline-verifiable licenses that work across Apple platforms. Plans start at $19/month with a free tier; see Pricing.
Frequently asked
Can I use a licensing layer instead of StoreKit on iOS?+
For App Store distribution, Apple requires StoreKit for in-app purchases of digital goods. A licensing layer is for cross-platform entitlements, enterprise builds, and unlocks that span Apple and non-Apple platforms.
How does an iOS app share a license with a Mac app?+
A signed-key licensing layer issues one license tied to the customer, not the platform. The iOS and macOS builds both verify the same signed lease, so a purchase on one unlocks the other.
Does offline validation work on iOS?+
Yes. The iOS app ships with a public key and verifies the signed license locally, exactly as a Mac app does — no server call at launch.
Start licensing your app today
Drop in the Swift SDK, point it at your dashboard, and sell paid apps in under a minute. Free forever tier included.
Start Free