Generates StoreKit 2 code for all subscription offer types — introductory, promotional, offer codes, and win-back. Includes eligibility checks, offer presentation, and the preferredSubscriptionOffer modifier. Use when adding subscription offers, free trials, or promotional pricing.
npx skills add https://github.com/rshankras/claude-code-apple-skills --skill subscription-offers
Generate complete StoreKit 2 implementation for all four subscription offer types with eligibility verification, offer presentation, and transaction handling.
Use this skill when the user:
import StoreKit)SubscriptionStoreView offers, iOS 15+ for manual)paywall-generator was already usedGlob: **/*Offer*.swift, **/*Eligibility*.swift
Grep: "introductoryOffer" or "promotionalOffers" or "winBackOffers"
If existing offer code found, ask:
product.subscription?.introductoryOfferproduct.subscription?.promotionalOffersofferType (1 = introductory, 2 = promotional, 3 = offer code) + offerIdentifiertry await AppStore.presentOfferCodeRedeemSheet()product.subscription?.winBackOffers| Typical trial | Categories |
|---------------|------------|
| ~1 month | Entertainment, social, music, books |
| 1 week | Health & fitness, productivity, education, weather |
| 3 days | Photo/video, games, utilities, business |
isEligibleForIntroOffer and render only offers the user can actually redeem.| Playbook | Trigger | Move |
|----------|---------|------|
| Win-back | Subscription expired | Offer on relaunch / re-engagement |
| Retention | Auto-renew flipped off — you get the server notification the moment it flips | Save offer before expiry |
| Upgrade | Downgrade notification received | Nudge back to the higher tier |
| Customer-service appeasement | Support flags a bad experience | Offer on next launch |
| Loyalty | Long tenure (e.g., a free month at the 11th consecutive renewal) | Surprise reward |
| Save | User heads to Manage Subscriptions | Intercept with an offer first |
Ask user via AskUserQuestion:
Read templates.md for all offer implementation code.
isEligibleForIntroOffer)- If Sources/Store/ exists → Sources/Store/Offers/
- If Store/ exists → Store/Offers/
- If Subscriptions/ exists → Subscriptions/Offers/
- Otherwise → Offers/
Store/Offers/
├── SubscriptionOfferManager.swift # Central offer management
├── OfferEligibility.swift # Eligibility verification
├── OfferConfiguration.swift # Offer type definitions
├── OfferBannerView.swift # Contextual offer UI
├── OfferCodeRedemptionView.swift # Code entry (optional)
├── OfferSignatureProvider.swift # Server signatures (optional)
└── OfferAnalytics.swift # Offer tracking (optional)
Check Introductory Offer Eligibility:
let manager = SubscriptionOfferManager()
let isEligible = await manager.isEligibleForIntroOffer(
productID: "com.app.subscription.monthly"
)
Present Best Available Offer:
// Automatically selects the best offer for the user's state
let offer = await manager.bestAvailableOffer(
for: "com.app.subscription.monthly"
)
// Use with SubscriptionStoreView (iOS 16.4+)
SubscriptionStoreView(groupID: groupID)
.preferredSubscriptionOffer(offer)
Present Offer Code Sheet:
// iOS 16+
try await AppStore.presentOfferCodeRedeemSheet()
Win-Back Offer (iOS 18+):
let winBackOffers = await manager.availableWinBackOffers(
for: "com.app.subscription.monthly"
)
if let bestOffer = winBackOffers.first {
// Present win-back UI
}
generators/win-back-offers — Dedicated win-back flow skillgenerators/paywall-generator — Full paywall with offer integrationapp-store/marketing-strategy — Strategic offer planningA set of resources to help me write all kinds of internal communications, using the formats that my company likes to use. Claude should use this skill whenever asked to write some sort of internal communications (status reports, leadership updates, 3P updates, company newsletters, FAQs, incident reports, project updates, etc.).
Extracts and analyzes competitors' ads from ad libraries (Facebook, LinkedIn, etc.) to understand what messaging, problems, and creative approaches are working. Helps inspire and improve your own ad campaigns.
Identifies high-quality leads for your product or service by analyzing your business, searching for target companies, and providing actionable contact strategies. Perfect for sales, business development, and marketing professionals.
Analyzes your recent Claude Code chat history to identify coding patterns, development gaps, and areas for improvement, curates relevant learning resources from HackerNews, and automatically sends a personalized growth report to your Slack DMs.
Complete App Store Optimization (ASO) toolkit for researching, optimizing, and tracking mobile app performance on Apple App Store and Google Play Store
NGS analysis toolkit. BAM to bigWig conversion, QC (correlation, PCA, fingerprints), heatmaps/profiles (TSS, peaks), for ChIP-seq, RNA-seq, ATAC-seq visualization.
Materials science toolkit. Crystal structures (CIF, POSCAR), phase diagrams, band structure, DOS, Materials Project integration, format conversion, for computational materials science.
Transforms vague UI ideas into polished, Stitch-optimized prompts. Enhances specificity, adds UI/UX keywords, injects design system context, and structures output for better generation results.
Take rshankras/subscription-offers 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.