Production-ready SwiftUI monetization stack & high-conversion paywalls for iOS (Swift 6 + RevenueCat).
0
stars
11
commits
Swift
primary language
Sep 9, 2026
updated
An open-core SwiftUI boilerplate to launch apps with a paywall, subscriptions, and authentication in minutes.
LaunchPaywall is an open-core boilerplate that gives you the foundational service layer every subscription app needs: sign-in, purchase management, and a production-ready paywall experience. It is written entirely in Swift 6 with modern SwiftUI syntax (@Observable, @Environment, async/await, @MainActor), so you can focus on your product instead of rewriting the plumbing.
The open-core version includes everything required for a working MVP. Premium templates, additional components, and paywall variants are available in the Pro version (see below).
AuthenticationServices and secure persistence of the user identifier via the Security API.Offerings, package purchases, restoring purchases, and identity sync (logIn/logOut).@AppStorage.Localizable.xcstrings String Catalog, with English as the source language.#if DEBUG flow with UserDefaults persistence lets you exercise the entire paywall and switch between Free/Pro plans without wiring up real RevenueCat accounts or StoreKit during development.isProMock, isAuthenticatedMock) to preview states without networking, and a lightweight analytics abstraction built on OSLog.LaunchPaywall/
βββ LaunchPaywallApp.swift # Entry point: injects managers and picks onboarding vs. content
βββ ContentView.swift # Main view: Free / Pro states + Sign in with Apple
βββ PaywallView.swift # Customizable paywall (plans, purchase, restore)
βββ OnboardingView.swift # 3-screen paged onboarding
βββ Localizable.xcstrings # String Catalog: 6 languages (en source + es, de, fr, it, pt)
βββ Services/
βββ AppConfig.swift # Centralized configuration (keys and URLs)
βββ AuthManager.swift # Sign in with Apple + Keychain (@Observable, @MainActor)
βββ SubscriptionManager.swift# RevenueCat v5 (@Observable, @MainActor)
βββ TelemetryService.swift # Anonymous structured analytics with OSLog
LaunchPaywall is built with a highly decoupled architecture. If your app doesn't need certain features, you can easily strip them out without breaking the rest of the flow.
Don't need Authentication? If your app doesn't require user accounts or "Sign in with Apple":
AuthManager.swift and SignInView.swift.App struct or RootView.swift, simply remove the if authManager.isAuthenticated check and route directly to your Onboarding or Main ContentView.Don't need Subscriptions (RevenueCat)? If you just want to use the boilerplate for the Onboarding UI and String Catalogs:
SubscriptionManager.swift and the RevenueCat SDK dependency.PaywallView.swift or replace its purchase action buttons with standard navigation links.AppConfig.swift file by removing the RevenueCat API Key properties.Clone the repository
git clone https://github.com/launchapp-studio/launchpaywall-ios.git
cd launchpaywall-ios
Open the project in Xcode 26.5+
open LaunchPaywall.xcodeproj
Resolve dependencies
Xcode automatically downloads the RevenueCat package via Swift Package Manager (https://github.com/RevenueCat/purchases-ios, v5.x).
Replace the keys in Services/AppConfig.swift
enum AppConfig {
static let revenueCatAPIKey = "appl_YOUR_REVENUECAT_PUBLIC_KEY"
static let telemetryDeckAppID = "YOUR_TELEMETRYDECK_APP_ID"
static let entitlementID = "pro_access" // must match your entitlement in RevenueCat
static let privacyPolicyURL = URL(string: "https://github.com/launchapp-studio/launchpaywall-ios/blob/main/PRIVACY.md")!
static let termsOfServiceURL = URL(string: "https://github.com/launchapp-studio/launchpaywall-ios/blob/main/TERMS.md")!
}
Enable "Sign in with Apple"
In the LaunchPaywall target β Signing & Capabilities β add the Sign in with Apple capability.
(Optional) Test purchases in the simulator
Add a StoreKit Configuration File (.storekit) with the same Product IDs as RevenueCat and select it in Edit Scheme β Run β Options β StoreKit Configuration. See the detailed instructions in the header of SubscriptionManager.swift. During development you can also use the built-in #if DEBUG toggle to switch between Free/Pro without any store setup.
Build and run on an iOS 17+ simulator or a real device.
π‘ Ready for App Store submission?
Follow our step-by-step Launch Checklist to set up your Apple Developer capabilities, StoreKit products, and RevenueCat entitlements.
OnboardingView is modular and can be embedded into existing apps to serve as a pre-sell sequence right before triggering your paywall:
// Default boilerplate onboarding with a completion callback
OnboardingView {
showPaywall = true
}
// Or fully custom pages tailored to your app
OnboardingView(
pages: [
OnboardingPage(symbol: "sparkles", title: "Discover Pro", description: "Unlock advanced features."),
OnboardingPage(symbol: "bolt.fill", title: "Boost Productivity", description: "Save hours every week.")
],
onComplete: {
showPaywall = true
}
)
Need more layout variations and styling controls?
π Join the Pro Waitlist to lock in an early launch discount.
β Star and watch this repository to be notified as soon as it launches.
Made with β€οΈ by LaunchApp Studio
11 commits
Swift
100.0%
Production-ready SwiftUI monetization stack & high-conversion paywalls for iOS (Swift 6 + RevenueCat).
0
stars
11
commits
Swift
primary language
Sep 9, 2026
updated
An open-core SwiftUI boilerplate to launch apps with a paywall, subscriptions, and authentication in minutes.
LaunchPaywall is an open-core boilerplate that gives you the foundational service layer every subscription app needs: sign-in, purchase management, and a production-ready paywall experience. It is written entirely in Swift 6 with modern SwiftUI syntax (@Observable, @Environment, async/await, @MainActor), so you can focus on your product instead of rewriting the plumbing.
The open-core version includes everything required for a working MVP. Premium templates, additional components, and paywall variants are available in the Pro version (see below).
AuthenticationServices and secure persistence of the user identifier via the Security API.Offerings, package purchases, restoring purchases, and identity sync (logIn/logOut).@AppStorage.Localizable.xcstrings String Catalog, with English as the source language.#if DEBUG flow with UserDefaults persistence lets you exercise the entire paywall and switch between Free/Pro plans without wiring up real RevenueCat accounts or StoreKit during development.isProMock, isAuthenticatedMock) to preview states without networking, and a lightweight analytics abstraction built on OSLog.LaunchPaywall/
βββ LaunchPaywallApp.swift # Entry point: injects managers and picks onboarding vs. content
βββ ContentView.swift # Main view: Free / Pro states + Sign in with Apple
βββ PaywallView.swift # Customizable paywall (plans, purchase, restore)
βββ OnboardingView.swift # 3-screen paged onboarding
βββ Localizable.xcstrings # String Catalog: 6 languages (en source + es, de, fr, it, pt)
βββ Services/
βββ AppConfig.swift # Centralized configuration (keys and URLs)
βββ AuthManager.swift # Sign in with Apple + Keychain (@Observable, @MainActor)
βββ SubscriptionManager.swift# RevenueCat v5 (@Observable, @MainActor)
βββ TelemetryService.swift # Anonymous structured analytics with OSLog
LaunchPaywall is built with a highly decoupled architecture. If your app doesn't need certain features, you can easily strip them out without breaking the rest of the flow.
Don't need Authentication? If your app doesn't require user accounts or "Sign in with Apple":
AuthManager.swift and SignInView.swift.App struct or RootView.swift, simply remove the if authManager.isAuthenticated check and route directly to your Onboarding or Main ContentView.Don't need Subscriptions (RevenueCat)? If you just want to use the boilerplate for the Onboarding UI and String Catalogs:
SubscriptionManager.swift and the RevenueCat SDK dependency.PaywallView.swift or replace its purchase action buttons with standard navigation links.AppConfig.swift file by removing the RevenueCat API Key properties.Clone the repository
git clone https://github.com/launchapp-studio/launchpaywall-ios.git
cd launchpaywall-ios
Open the project in Xcode 26.5+
open LaunchPaywall.xcodeproj
Resolve dependencies
Xcode automatically downloads the RevenueCat package via Swift Package Manager (https://github.com/RevenueCat/purchases-ios, v5.x).
Replace the keys in Services/AppConfig.swift
enum AppConfig {
static let revenueCatAPIKey = "appl_YOUR_REVENUECAT_PUBLIC_KEY"
static let telemetryDeckAppID = "YOUR_TELEMETRYDECK_APP_ID"
static let entitlementID = "pro_access" // must match your entitlement in RevenueCat
static let privacyPolicyURL = URL(string: "https://github.com/launchapp-studio/launchpaywall-ios/blob/main/PRIVACY.md")!
static let termsOfServiceURL = URL(string: "https://github.com/launchapp-studio/launchpaywall-ios/blob/main/TERMS.md")!
}
Enable "Sign in with Apple"
In the LaunchPaywall target β Signing & Capabilities β add the Sign in with Apple capability.
(Optional) Test purchases in the simulator
Add a StoreKit Configuration File (.storekit) with the same Product IDs as RevenueCat and select it in Edit Scheme β Run β Options β StoreKit Configuration. See the detailed instructions in the header of SubscriptionManager.swift. During development you can also use the built-in #if DEBUG toggle to switch between Free/Pro without any store setup.
Build and run on an iOS 17+ simulator or a real device.
π‘ Ready for App Store submission?
Follow our step-by-step Launch Checklist to set up your Apple Developer capabilities, StoreKit products, and RevenueCat entitlements.
OnboardingView is modular and can be embedded into existing apps to serve as a pre-sell sequence right before triggering your paywall:
// Default boilerplate onboarding with a completion callback
OnboardingView {
showPaywall = true
}
// Or fully custom pages tailored to your app
OnboardingView(
pages: [
OnboardingPage(symbol: "sparkles", title: "Discover Pro", description: "Unlock advanced features."),
OnboardingPage(symbol: "bolt.fill", title: "Boost Productivity", description: "Save hours every week.")
],
onComplete: {
showPaywall = true
}
)
Need more layout variations and styling controls?
π Join the Pro Waitlist to lock in an early launch discount.
β Star and watch this repository to be notified as soon as it launches.
Made with β€οΈ by LaunchApp Studio
11 commits
Swift
100.0%