Paywall Kit — Plan Model, Purchase Actions & Motion for SWPaywall Templates

Shared base for the eleven SWPaywall templates — an SWPaywallPlan model that covers subscriptions of any period, lifetime unlocks, consumable packs and intro offers (free trial, pay-up-front, pay-as-you-go) and derives every price comparison and terms line from real numbers, a `.swPaywallActions(purchase:restore:termsURL:privacyURL:)` environment hook with shared purchase button, restore/legal footer and close button, and TimelineView/Canvas motion helpers (aurora, particles, Ken Burns, shine, entrance) — plus loaders that feed plans from StoreKit 2 or RevenueCat

Pro
Included in ShipSwift Pro: $89 a year, or $199 for life.
Get Pro

Copies a short instruction with your private download link. Paste it into your agent: it downloads the whole skill (the source code, the setup steps and the mistakes we already made for you) and builds the screen.

Works with

+70

What it does

Every custom paywall needs the same plumbing before it can look good: a model for "what can be bought" that handles weekly / monthly / quarterly / yearly / lifetime / consumable products, intro offers, per-month equivalents and "Save X%" badges; billing-terms copy that matches the real offer (App Review checks this); a purchase button that spins and locks the screen while StoreKit works; Restore Purchases, Terms and Privacy links; and a close button. This kit is that plumbing, shared by every paywall-* template skill:

  • SWPaywallPlan — one purchasable option. Build it from a StoreKit 2 Product (real, localized prices) or by hand (previews, demos). Templates read derived values only (billingText, termsText, callToAction, savings(in:), pricePerMonthText …), so nothing in a template is hard-coded to "monthly + yearly".
  • .swPaywallActions(...) — attach your purchase / restore closures and legal URLs once; every template inside picks them up from the environment. Works the same for StoreKit 2, RevenueCat or your own backend: the closure receives the selected plan.
  • Building blocks — SWPaywallPurchaseButton (spinner + lock while purchase runs), SWPaywallFooter (Restore · Terms · Privacy), SWPaywallCloseButton (Liquid Glass on iOS 26), SWPaywallPanelBackground, SWPaywallPressStyle, SWPaywallFeature.
  • Motion — SWPaywallAurora, SWPaywallParticles (snow / embers / stars), .swPaywallKenBurns(), .swPaywallShine(in:), .swPaywallEntrance(_:delay:). All driven by TimelineView + Canvas (no timers), all frozen under Reduce Motion.

What you get

  • ✓1,201 lines of source code, ready to paste
  • ✓Architecture
  • ✓Dependencies
  • ✓Implementation
  • ✓Usage
  • ✓Integration Checklist
  • ✓Common Customizations
  • ✓Known Pitfalls
paywallsubscriptionStoreKitRevenueCatin-app purchasemonetizationfree trialintro offerlifetimeconsumableApp ReviewSwiftUIanimation

Architecture

FileContents
SWPaywallPlan.swiftSWPaywallPlan (+ Period, Kind, Offer), StoreKit mapping, derived prices and copy, sample* plans
SWPaywallActions.swiftSWPaywallActions environment value + .swPaywallActions(...), SWPaywallFeature, purchase / close buttons, footer, panel background, press style
SWPaywallEffects.swiftAurora, particles, Ken Burns, shine, entrance
SWDebugLog.swiftswDebugLog(...) — debug-only logging used by SWPaywallActions (skip it if your project already has ShipSwift's SWUtil)

Template catalog (each is its own skill and "requires paywall-kit"):

SkillLayoutPlans it is built for
paywall-planApple SubscriptionStoreView with branded header (classic plan picker)monthly + yearly
paywall-timeline"How your free trial works" timeline (Today → reminder → billing day)one plan with a free trial
paywall-heroHero photo, checklist, stacked plan rows2–3 subscriptions
paywall-immersiveFull-bleed photo, rating laurels, dark glass rowsweekly + yearly
paywall-editorialSerif, paper-toned membership pagemonthly + quarterly + yearly
paywall-plan-cards"1 / 12 / ∞" cards, award, review carouselsubscriptions + lifetime
paywall-lifetimeGold emblem, feature grid, price anchorone lifetime unlock
paywall-creditsConsumable packs with per-row price buttonsconsumables
paywall-tiersPlus / Pro segmented tiers2+ tiers × monthly/yearly
paywall-offerDiscount hero, ticket, countdownone plan with an intro / win-back offer
paywall-comparisonFree vs Pro table + billing switchmonthly + yearly

How derived values work (all on SWPaywallPlan):

Property / methodExample output
displayPrice$59.99 (StoreKit's localized string when built from a Product)
billingText$9.99/month, $24.99 every 3 months, $99.99 once
pricePerMonthText / pricePerWeekText$5.00 / $1.15
equivalentText(per: .month)$5.00/mo
savings(in: plans)50 — vs the most expensive comparable plan, per month (subscriptions) or per unit (consumables)
offerText7-day free trial, $29.99 for the first year, $1.99/month for 3 months
termsText7-day free trial, then $59.99/year. Cancel anytime. / Renews monthly at $9.99 until canceled.
callToActionStart 7-Day Free Trial, Claim My Offer, Subscribe for $9.99/month, Unlock Forever
reassuranceTextNo payment now. Cancel anytime.
SWPaywallPlan.defaultID(in:preferred:)preferred ID → first plan with a badge → best per-month subscription → first plan

More in Paywall and payments

A classic paywall: perks up top, monthly or yearly below, with the saving called out.
Classic plan picker
Pro
A classic paywall: perks up top, monthly or yearly below, with the saving called out.
A free-trial timeline that shows today, the reminder day and the charge date.
Free-trial timeline
Pro
A free-trial timeline that shows today, the reminder day and the charge date.
A photo header with a checklist of perks and a trial on the yearly plan.
Photo header
Pro
A photo header with a checklist of perks and a trial on the yearly plan.
A full-bleed hero with ratings and a glowing call to action that changes with the plan.
Full-bleed hero
Pro
A full-bleed hero with ratings and a glowing call to action that changes with the plan.
A quiet editorial paywall with monthly, quarterly and yearly plans.
Editorial
Pro
A quiet editorial paywall with monthly, quarterly and yearly plans.
Sliding reviews above three plan cards, including a one-time lifetime unlock.
Reviews and plan cards
Pro
Sliding reviews above three plan cards, including a one-time lifetime unlock.
A one-time purchase: pay once, keep every pro feature forever, no subscription.
Lifetime unlock
Pro
A one-time purchase: pay once, keep every pro feature forever, no subscription.
Credit packs for pay-as-you-go features, with the best value marked.
Credit packs
Pro
Credit packs for pay-as-you-go features, with the best value marked.
Two tiers side by side: switch between Plus and Pro and the perks and prices follow.
Two tiers
Pro
Two tiers side by side: switch between Plus and Pro and the perks and prices follow.
A win-back offer: half off the first year, with a live countdown.
Win-back offer
Pro
A win-back offer: half off the first year, with a live countdown.
A free-versus-Pro comparison table with a monthly and yearly switch.
Free vs Pro table
Pro
A free-versus-Pro comparison table with a monthly and yearly switch.