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.