rshankras/promoted-iap
Generates Promoted In-App Purchase setup with StoreKit 2 product configuration, paywall integration, and App Store product page display. Use when setting up promoted purchases that appear on the App Store product page.
npx skills add https://github.com/rshankras/claude-code-apple-skills --skill promoted-iap
Set up promoted In-App Purchases so your premium offerings appear directly on your App Store product page, in search results, and in editorial features.
Use this skill when the user:
paymentQueue(_:shouldAddStorePayment:for:)paywall-generator was already usedGlob: **/*Promoted*.swift, **/*StorePayment*.swift
Grep: "shouldAddStorePayment" or "PurchaseIntent" or "promotedPurchase"
Ask user via AskUserQuestion:
Read templates.md for promoted IAP implementation code.
- If Sources/Store/ exists → Sources/Store/Promoted/
- If Store/ exists → Store/Promoted/
- Otherwise → Store/Promoted/
Store/Promoted/
├── PromotedPurchaseHandler.swift # App Store purchase handling
├── PromotedProductConfiguration.swift # Product setup & image specs
└── PromotedPurchaseFlowView.swift # In-app purchase completion UI
Handle App Store-Initiated Purchases (StoreKit 2):
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
.task {
// Listen for purchases initiated from App Store
for await purchaseIntent in PurchaseIntent.intents {
await PromotedPurchaseHandler.shared.handle(purchaseIntent)
}
}
}
}
}
Complete the Purchase:
// PromotedPurchaseHandler determines the right flow:
// 1. Direct purchase (existing user, known product)
// 2. Paywall (show options first)
// 3. Onboarding (new user from App Store)
generators/paywall-generator — Full paywall for purchase completiongenerators/subscription-offers — Offer types for promoted subscriptionsapp-store/marketing-strategy — Strategic product promotion planningTake rshankras/promoted-iap from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.