Loading skill
Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Generates StoreKit 2 subscription paywall with modern SwiftUI views. Use when user wants to add subscriptions, paywall, or in-app purchases.
.claude/skills/rshankras-paywall-generator/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | -2% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 92% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 13% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 5% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 25% | 0% |
Generate a complete StoreKit 2 subscription paywall with modern SwiftUI views, subscription status tracking, and proper purchase handling.
Use this skill when the user:
Search for existing StoreKit:
Glob: **/*Store*.swift, **/*Purchase*.swift, **/*Subscription*.swift
Grep: "import StoreKit" or "Product.products"If found, ask user:
StoreKit subscription APIs (iOS 18.4+):
SubscriptionOfferView - New SwiftUI view for merchandising subscriptionssubscriptionStatusTask modifier for tracking subscription stateTransaction.currentEntitlements(for:) - per-product entitlement check (iOS 18.4+)RenewalInfo enhancements for expiration reasonsAsk user via AskUserQuestion:
Generate these files:
StoreKitManager.swift - Product loading and purchasingSubscriptionStatus.swift - Status trackingPaywallView.swift - Full paywall UISubscriptionButton.swift - Individual plan buttonProducts.swift - Product ID constantsCheck project structure:
Sources/ exists → Sources/Store/App/ exists → App/Store/Store/com.yourapp.subscription.monthlycom.yourapp.subscription.yearlycom.yourapp.subscription.lifetimeCreate Products.storekit for local testing:
After generation, provide:
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 # iOS 18.4+ viewApp Entry Point:
swift@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:
swiftstruct 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() } } }
SubscriptionOfferView (iOS 18.4+):
swift// Simple merchandising view SubscriptionOfferView(productID: "com.app.subscription.monthly") .prefersPromotionalIcon(true) .subscriptionOfferViewDetailAction { showPaywall = true }
Other measured skills in the registry, with their headline benchmark lift.