Agent skill · software engineering · dpearson2699
storekit
Implement, review, or improve in-app purchases and subscriptions using StoreKit 2. Use when building paywalls with SubscriptionStoreView or ProductView, processing transactions with Product and Transaction APIs, verifying entitlements, handling purchase flows (consumable, non-consumable, auto-renewable), implementing offer codes or promotional/win-back/introductory offers, managing subscription status and renewal state, setting up StoreKit testing with configuration files, or integrating Family Sharing, Ask to Buy, refund handling, and billing retry logic.
Why this skill is useful
Provides specific implementation patterns and API usage for StoreKit 2 that the AI wouldn't reliably generate on its own.
What it needs
About 7k tokens when loaded. Last updated 2026-07-31. 973 stars on the source repository.
What this skill does
StoreKit 2 In-App Purchases and Subscriptions Implement in-app purchases, subscriptions, paywalls, and StoreKit testing using StoreKit 2. Use the modern Swift-based Product, Transaction, PurchaseAction, StoreView, and SubscriptionStoreView APIs. Avoid original In-App Purchase APIs (SKProduct, SKPaymentQueue) unless legacy OS support requires them. StoreKit views initiate purchases automatically. For custom controls, use PurchaseAction in SwiftUI, purchase(confirmIn:options:) in UIKit/AppKit, and product.purchase(options:) on watchOS. Contents Product Types Loading Products Purchase Flow Transaction.updates Listener Entitlement Checking SubscriptionStoreView (iOS 17+) StoreView (iOS 17+) Subscription Status Checking Restore Purchases App Transaction (App Purchase Verification) Purchase Options SwiftUI Purchase Callbacks Common Mistakes Review Checklist References Product Types Type Enum Case Behavior --- --- --- Consumable .consumable Used once, can be repurchased (gems, coins) Non-consumable .nonConsumable Purchased once permanently (premium unlock) Auto-renewable .autoRenewable Recurring billing with automatic renewal Non-renewing .nonRenewing Time-limited access without automatic renewal Loading Products Define product IDs as constants. Fetch products with Product.products(for:). Purchase Flow Prefer StoreKit views for standard paywalls because they initiate purchases, restore purchases, and display policy controls. For custom SwiftUI purchase buttons, prefer PurchaseAction from the environment. Use direct product.purchase(options:) for watchOS, and use purchase(confirmIn:options:) for UIKit or AppKit confirmation. Always handle every PurchaseResult, verify before access, deliver durably, then finish. Transaction.updates Listener Start at app launch, not when a paywall appears. Catches purchases from other devices, Family Sharing changes, renewals, Ask to Buy approvals, refunds, revocations, and unfinished transactions Apple emits once immediately after launch. …
How to use it
Reference it in AdaL, Claude Code, Cursor or any coding agent — nothing to install:
@skills dpearson2699/storekit