Hello,
I'm developing a Capacitor/Next.js iOS app with RevenueCat for auto-renewable subscriptions. On a real iPhone via TestFlight, StoreKit never returns my subscription products, so the Apple payment sheet never appears.
App
- TestFlight builds tested: 110, 111, 112 (iOS 1.1.0)
- In-App Purchase capability enabled on App ID
- Paid Applications Agreement: active
- Banking/tax: active
Subscription product IDs (auto-renewable, same subscription group)
- vytalai_premium_monthly
- vytalai_premium_yearly
- vytalai_premium_yearly_intro (exit offer)
What happens
- Install app from TestFlight on physical iPhone
- Navigate to paywall
- App calls RevenueCat → Purchases.getProducts() with the 3 product IDs above
- StoreKit returns 0 products (or configure/getProducts times out)
- UI shows: "Apple Store: 0 subscriptions on this device — Sandbox popup cannot open"
- Tapping subscribe does not open the Apple payment sheet
Fallback prices appear (3.49 / 29.99) instead of live App Store prices (3,49 € / 29,99 €), which suggests StoreKit is not returning products.
What we already verified
- Correct bundle ID in build metadata
- NEXT_PUBLIC_REVENUECAT_API_KEY_IOS (appl_*) embedded in EAS production build
- Provisioning profile regenerated and active
- Subscription metadata corrected (was Rejected, now Waiting for Review)
- All 3 subscriptions attached to app version submission
- RevenueCat offering "default" with monthly, annual, and annual_intro packages
- App Store Server Notifications URL configured to RevenueCat
- Legal pages open in-app (no external cookie banner on native)
- Testing on TestFlight only (not Safari/web)
App Review context We received Guideline 2.1(b) rejections because:
- Error on purchase page
- Exit offer (50% OFF / €1.91 per month equivalent) referenced product vytalai_premium_yearly_intro which was not submitted for review initially — now added and submitted with the app version.
Question Even with subscriptions in "Waiting for Review" state and metadata completed, should StoreKit Sandbox/TestFlight return these products on device so we can test the payment sheet before approval?
If not, what exact App Store Connect state is required for StoreKit to return products on TestFlight?
Any guidance on why getProducts would return 0 for valid product IDs on a TestFlight build would be greatly appreciated.
Thank you.