What does StoreKitError.notEntitled mean?

StoreKitError.notEntitled means the app does not have the entitlements that the StoreKit function it called requires.

Quick facts#

Error StoreKitError.notEntitled
Where StoreKit 2, Swift (StoreKitError)
Available since iOS 15.4, iPadOS 15.4, macOS 12.3, tvOS 15.4, watchOS 8.5, visionOS 1.0
What the vendor says The app does not have the appropriate entitlements to use the functionality.

Cause#

  • The app is missing an entitlement that the called StoreKit function requires. Apple documents the case in one line and does not list which functions or entitlements trigger it.
  • Apple describes In-App Purchase as a capability: some app services need you to add a capability to the target in Xcode, which can edit the target's entitlements (Adding capabilities to your app).
  • The case exists only from iOS 15.4 and macOS 12.3, so older systems report a different failure.

Fix#

  1. Open the target's Signing & Capabilities tab in Xcode and check that the capabilities your feature needs are present, including In-App Purchase.
  2. Confirm the app ID's capabilities in your Apple Developer account match the target, then rebuild and reinstall.
  3. If the failing call needs a special entitlement from Apple, request it first; the case name does not say which one.
  4. Log the call that threw the error so you can tell which function needed the entitlement.

Example#

Swift
import StoreKit

// notEntitled is an app configuration problem, not a customer problem: log it for yourself and hide the feature.
func syncPurchases() async {
    do {
        try await AppStore.sync()
    } catch StoreKitError.notEntitled {
        print("This build lacks an entitlement for this StoreKit call; check Signing & Capabilities")
    } catch {
        print("Sync failed: \(error)")
    }
}

Compile-checked: npm run check:snippets type-checks this snippet with swiftc against the Apple SDK (macOS target, checked 2026-10-03).

How the RevenueDot SDK reports it#

The RevenueDot purchases-ios fork maps StoreKitError.notEntitled to ErrorCode.storeProblemError (code 2). Because that code also covers temporary store failures, read the underlying error to tell them apart. See what storeProblemError means.

Source#

Checked: 2026-10-03

Edit this page on GitHub ↗ View as Markdown Last updated