Paywall Generator
Generate a complete StoreKit 2 subscription paywall with modern SwiftUI views, subscription status tracking, and proper purchase handling.
When This Skill Activates
Use this skill when the user:
- Asks to "add subscriptions" or "add paywall"
- Mentions "in-app purchases" or "IAP"
- Wants "StoreKit 2" implementation
- Asks about "subscription management"
- Mentions "premium features" or "pro version"
Pre-Generation Checks
1. Project Context Detection
- [ ] Check for existing StoreKit implementations
- [ ] Check deployment target (StoreKit 2 requires iOS 15+)
- [ ] Look for existing product IDs in codebase
- [ ] Identify source file locations
2. Conflict Detection
Search for existing StoreKit:
Glob: **/*Store*.swift, **/*Purchase*.swift, **/*Subscription*.swift
Grep: "import StoreKit" or "Product.products"
If found, ask user:
- Replace existing implementation?
- Extend with additional features?
Apple Docs Reference
Latest StoreKit Updates (iOS 18.4+):
SubscriptionOfferView- New SwiftUI view for merchandising subscriptionssubscriptionStatusTaskmodifier for tracking subscription stateTransaction.currentEntitlements(for:)- New API for entitlementsRenewalInfoenhancements for expiration reasons
Configuration Questions
Ask user via AskUserQuestion:
-
Subscription tiers? (multi-select)
- Monthly
- Yearly (with discount)
- Lifetime
- Weekly
-
Features needed?
- Free trial
- Family sharing
- Promotional offers
-
UI style?
- Full paywall screen
- Inline subscription view
- Both
Generation Process
Step 1: Create Core Files
Generate these files:
StoreKitManager.swift- Product loading and purchasingSubscriptionStatus.swift- Status trackingPaywallView.swift- Full paywall UISubscriptionButton.swift- Individual plan button
Step 2: Create Configuration
Products.swift- Product ID constants
Step 3: Determine File Location
Check project structure:
- If
Sources/exists →Sources/Store/ - If
App/exists →App/Store/ - Otherwise →
Store/
Product ID Setup
App Store Connect
- Go to App Store Connect > Your App > Subscriptions
- Create subscription group
- Add subscription products with IDs like:
com.yourapp.subscription.monthlycom.yourapp.subscription.yearlycom.yourapp.subscription.lifetime
StoreKit Configuration (Testing)
Create Products.storekit for local testing:
- File > New > File > StoreKit Configuration
- Add products matching your IDs
- Edit scheme > Options > StoreKit Configuration
Output Format
After generation, provide:
Files Created
Sources/Store/
├── StoreKitManager.swift # Product loading & purchasing
├── SubscriptionStatus.swift # Status enum & tracking
├── Products.swift # Product ID constants
└── Views/
├── PaywallView.swift # Full paywall screen
├── SubscriptionButton.swift # Plan selection button
└── SubscriptionOfferCard.swift # New iOS 18.4+ view
Integration Steps
App Entry Point:
@main
struct MyApp: App {
@State private var subscriptionStatus: SubscriptionStatus = .unknown
var body: some Scene {
WindowGroup {
ContentView()
.environment(\.subscriptionStatus, subscriptionStatus)
.subscriptionStatusTask(for: "your.group.id") { statuses in
subscriptionStatus = SubscriptionStatus.from(statuses)
}
}
}
}
Show Paywall:
struct ContentView: View {
@State private var showPaywall = false
@Environment(\.subscriptionStatus) var status
var body: some View {
VStack {
if status != .subscribed {
Button("Upgrade to Pro") {
showPaywall = true
}
}
}
.sheet(isPresented: $showPaywall) {
PaywallView()
}
}
}
New iOS 18.4+ SubscriptionOfferView:
// Simple merchandising view
SubscriptionOfferView(productID: "com.app.subscription.monthly")
.prefersPromotionalIcon(true)
.subscriptionOfferViewDetailAction {
showPaywall = true
}
Testing Instructions
-
Create StoreKit Configuration:
- File > New > StoreKit Configuration
- Add your products
-
Edit Scheme:
- Product > Scheme > Edit Scheme
- Options > StoreKit Configuration > Select your file
-
Test Purchases:
- Run in Simulator
- Use Transaction Manager (Debug > StoreKit > Transaction Manager)
-
Test Scenarios:
- Purchase flow
- Restore purchases
- Subscription expiration
- Renewal
References
- storekit-patterns.md - Best practices and patterns
- templates/ - All template files
- Apple Docs: StoreKit Updates (iOS 18.4+)