First run tip: If you haven’t configured products yet, disable the payments
feature to avoid “offerings empty” errors:
apps/mobile/features/feature-registry.tsx → featureFlags.payments = false.
Re-enable after setup is complete.Prerequisites
- Apple Developer account ($99/year)
- App created in App Store Connect
- RevenueCat account (free tier available)
Step 1: App Store Connect
1.1 Create Subscription Products
- Go to App Store Connect
- Select your app → Monetization → Subscriptions
- Create a Subscription Group (e.g., “Premium”)
- Add your subscription products
1.2 Product Configuration
For each product, configure:| Field | Example |
|---|---|
| Product ID | mobile_launch_monthly_sub |
| Reference Name | ”Monthly Subscription” |
| Duration | 1 Month |
| Price | Select a price tier |
1.3 Add Localization
Required! Each product needs at least one localization:- Click on your product
- Go to Localizations → Add
- Add Display Name and Description
1.4 Accept Paid Apps Agreement
- Go to Agreements, Tax, and Banking
- Accept the Paid Apps Agreement
- Complete all required tax and banking information
Products won’t load until this agreement is active.
Step 2: RevenueCat Dashboard
2.1 Create Project
- Sign up at RevenueCat
- Create a new project
- Add your iOS app with the correct bundle ID
2.2 Connect App Store
- Go to Apps & providers → Your iOS app
- Add your App Store Connect Shared Secret:
- In App Store Connect: Your App → General → App-Specific Shared Secret
- Click “Generate” if you don’t have one
- Copy and paste into RevenueCat
2.3 Import Products
- Go to Product Catalog → Products
- Click + New under your App Store app
- Enter the Product ID exactly as in App Store Connect
- Products should sync automatically
2.4 Create Entitlements
Entitlements define what features users get access to:- Go to Product Catalog → Entitlements
- Click + New
- Create an entitlement (e.g.,
proorpremium) - Attach your products to this entitlement
2.5 Create Offerings
Offerings group products for display in your paywall:- Go to Product Catalog → Offerings
- Click + New
- Name it (e.g.,
default) - Add packages:
$rc_monthly→ your monthly product$rc_annual→ your yearly product
- Click Make Current to set as default
2.6 Get API Keys
- Go to API Keys in sidebar
- Copy your Public API Key
- iOS: starts with
appl_ - Android: starts with
goog_
- iOS: starts with
Step 3: Configure Your App
3.1 Add API Keys
Update API keys inlib/payments/config.ts:
3.2 Set Payment Provider
Update the feature registry:Step 4: Create a Paywall
RevenueCat lets you design paywalls without code:- Go to Paywalls in RevenueCat dashboard
- Click + New Paywall
- Use the visual builder to design your paywall
- Add your products, benefits, and styling
- Assign the paywall to your offering
<RevenueCatUI.Paywall /> component will automatically display this paywall.
Step 5: Testing
Create Sandbox Tester
- App Store Connect → Users and Access → Sandbox
- Click + to add a new tester
- Use a unique email (can be fake, e.g.,
[email protected])
Sign In on Device
- On your iPhone: Settings → App Store
- Scroll down to Sandbox Account
- Sign in with your sandbox tester credentials
Test a Purchase
- Build your app to your physical device
- Navigate to the paywall
- Complete a purchase using sandbox account
- Verify in RevenueCat dashboard → Customers
Sandbox purchases are free and can be repeated for testing.
Verification Checklist
Before testing, verify:- Paid Apps Agreement is Active (not pending)
- Products have price set
- Products have localization (name + description)
- Products are attached to entitlements in RevenueCat
- Offering is set as Current in RevenueCat
- Sandbox account is signed in on device
- Bundle ID matches between app and App Store Connect
Next Steps
Remove / Disable
To disable payments while you configure RevenueCat, set:apps/mobile/features/feature-registry.tsx → featureFlags.payments = false
For production removal guidance, see Removing Features.