💳

StoreKit

iOS 15+

Modern Swift APIs for in-app purchases, subscriptions, and App Store integration. StoreKit 2 provides a declarative SwiftUI experience for managing transactions and subscriptions.

Payment
Official Apple Documentation →
iOS Version Compatibility
96.8%
coverage

of iOS users worldwide can use StoreKit (iOS 15+ required)

iOS VersionMarket ShareStatus
iOS 18.730.3%Supported
iOS 18.629.8%Supported
iOS 26.110.7%Supported
iOS 18.56.0%Supported
iOS 16.72.3%Supported
iOS 26.22.0%Supported
iOS 18.31.8%Supported
iOS 15.81.8%Supported
iOS 17.61.7%Supported
iOS 26.01.3%Supported

Key Features

Modern async/await Swift API

SwiftUI subscription views

Transaction history and receipts

Subscription status monitoring

Promotional offers and pricing

Server-to-server notifications

Code Examples

Fetch Products

Load products from the App Store using StoreKit 2

import StoreKit

func loadProducts() async throws -> [Product] {
    let productIDs = [
        "com.example.subscription.monthly",
        "com.example.consumable.coins"
    ]
    
    let products = try await Product.products(for: productIDs)
    return products
}

Purchase a Product

Handle in-app purchase transactions

import StoreKit

func purchase(_ product: Product) async throws -> Transaction? {
    let result = try await product.purchase()
    
    switch result {
    case .success(let verification):
        let transaction = try checkVerified(verification)
        await transaction.finish()
        return transaction
        
    case .userCancelled, .pending:
        return nil
        
    @unknown default:
        return nil
    }
}

func checkVerified<T>(_ result: VerificationResult<T>) throws -> T {
    switch result {
    case .unverified:
        throw StoreError.failedVerification
    case .verified(let safe):
        return safe
    }
}

Monitor Transactions

Listen for transaction updates

import StoreKit

func observeTransactionUpdates() -> Task<Void, Never> {
    Task {
        for await result in Transaction.updates {
            do {
                let transaction = try checkVerified(result)
                
                // Deliver content to the user
                await updatePurchasedProducts()
                
                // Finish the transaction
                await transaction.finish()
            } catch {
                print("Transaction verification failed")
            }
        }
    }
}

Frequently Asked Questions

What is StoreKit?

Modern Swift APIs for in-app purchases, subscriptions, and App Store integration. StoreKit 2 provides a declarative SwiftUI experience for managing transactions and subscriptions.

Which iOS versions support StoreKit?

StoreKit is available on iOS 15 and later. Currently, 96.8% of iOS users worldwide can use this framework.

What are alternatives to StoreKit?

Related frameworks include Swiftui. Each has different capabilities and iOS version requirements.