StoreKit returns 0 subscription products in Sandbox/TestFlight — payment sheet never opens (auto-renewable subscriptions)

Hello,

I'm developing a consumer iOS app (Capacitor + RevenueCat SDK) and I've been blocked for several weeks on a StoreKit issue: subscription products are never returned to the device, so the Apple payment sheet cannot open.

I previously contacted Apple Support. I was told to request a phone call, but my call request was declined because of the topic (StoreKit / in-app purchases). I'm posting here hoping someone from Apple or the community can help.

App details

  • App name: Vytal AI
  • Bundle ID: com.ciborgu.vytalai
  • App Store Connect App ID: 6767160542
  • Team ID: JZF7CR3W8Z
  • Distribution: TestFlight (physical iPhone, France)
  • iOS deployment target: 15+

Subscription product IDs (auto-renewable)

  • vytalai_premium_monthly
  • vytalai_premium_yearly
  • vytalai_premium_yearly_intro

All three are in subscription group "Vytal AI" on the correct ASC app (not a typo bundle). Cleared for Sale is ON. Paid Apps Agreement is active. In-App Purchase capability is enabled on the App ID (checkbox is grayed out / locked, which I understand is normal).

Problem

On a real device via TestFlight:

  1. RevenueCat SDK configures successfully (public iOS API key present in build).
  2. Purchases.getProducts({ productIdentifiers: [...] }) returns { products: [] } — zero products.
  3. Because StoreKit returns an empty array, the Sandbox payment sheet never appears when the user taps Subscribe.

This is NOT a UI issue — the native SDK call to Apple returns no products.

What I've already verified

  • Bundle ID in signed IPA matches ASC app: com.ciborgu.vytalai
  • Subscriptions exist only on the correct app (not on an old typo bundle com.ciborgue.vytalai)
  • Removed duplicate ASC app; old App ID cannot be deleted ("in use by App Store") but has no IAPs
  • Regenerated EAS provisioning profile for com.ciborgu.vytalai
  • Sandbox tester account configured on device (Settings → App Store → Sandbox Account)
  • Tested without VPN / iCloud Private Relay
  • Reinstalled app from TestFlight after ASC changes
  • Waited for propagation after metadata / availability updates
  • Associated Domains enabled (for deep links) — separate from IAP

SDK / integration

  • @revenuecat/purchases-capacitor 13.x
  • Direct StoreKit fetch via Purchases.getProducts() (not only RevenueCat offerings)
  • Same result: 0 products from Apple

Expected vs actual

  • Expected: StoreKit returns 3 subscription products in Sandbox; payment sheet opens on purchase.
  • Actual: products array is always empty; no payment sheet.

Questions

  1. Why would StoreKit return 0 products for valid auto-renewable subscriptions on TestFlight when metadata is "Waiting for Review" / in review — shouldn't Sandbox still return products per TN3186?
  2. Is there an ASC configuration state (availability, subscription group localization, missing review screenshot on yearly products, etc.) that causes StoreKit to return zero products even in Sandbox?
  3. Is there an internal flag or propagation delay on Apple's side I should ask to be reset for this app/bundle?

I'm happy to provide additional logs, a sysdiagnose, or a short screen recording from TestFlight showing the empty product response.

Thank you for any guidance — this is blocking App Review (Guideline 2.1) and I cannot test IAP at all.

Nathan

StoreKit returns 0 subscription products in Sandbox/TestFlight — payment sheet never opens (auto-renewable subscriptions)
 
 
Q