---
title: "What does StoreKitError.notEntitled mean?"
description: "StoreKitError.notEntitled means the app lacks the entitlements a StoreKit 2 function needs. What Apple documents, what to check in Xcode and how the SDK maps it."
url: https://revenuedot.app/docs/errors/storekit-error-not-entitled
---

# 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](https://developer.apple.com/documentation/xcode/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](https://revenuedot.app/docs/errors/sdk-store-problem-error.md).

## Related

- [What does storeProblemError (code 2) mean in the purchases SDK?](https://revenuedot.app/docs/errors/sdk-store-problem-error.md)
- [What does StoreKitError.unsupported mean?](https://revenuedot.app/docs/errors/storekit-error-unsupported.md)
- [What does configurationError (code 23) mean in the purchases SDK?](https://revenuedot.app/docs/errors/sdk-configuration-error.md)

## Source

- [Apple: StoreKitError.notEntitled](https://developer.apple.com/documentation/storekit/storekiterror/notentitled)
- [Apple: Adding capabilities to your app](https://developer.apple.com/documentation/xcode/adding-capabilities-to-your-app)
- [RevenueDot purchases-ios: StoreKitError+Extensions.swift (how the SDK maps StoreKit 2 errors)](https://github.com/revenuedot/purchases-ios/blob/revenuedot/main-patches/Sources/Error%20Handling/StoreKitError%2BExtensions.swift)

Checked: 2026-10-03
