RevenueCat offerings returning empty (current: null, allKeys: []) despite correct setup — first-time auto-renewable subscription submission

Hi all, I'm launching my first iOS app (Capacitor/Next.js WebView wrapper) with two auto-renewable subscriptions via RevenueCat, and I'm stuck on a persistent issue across multiple App Store Review rejections. Setup:

Bundle ID: no.skaren.app Two auto-renewable subscriptions: no.skaren.app.premium.monthly and no.skaren.app.premium.yearly, both in a single subscription group RevenueCat integrated via @revenuecat/purchases-capacitor App-Specific Shared Secret added to RevenueCat App Store Connect API key (with correct Key ID/Issuer ID) added to RevenueCat Paid Apps Agreement: Active Bundle ID in RevenueCat matches exactly RevenueCat API key in app code matches dashboard exactly

The problem:

On a physical device (TestFlight build, signed into Sandbox Apple ID), calling Purchases.getOfferings() always returns: {"current":null,"allKeys":[]} No errors are thrown — the offerings object is just empty. This happens consistently across multiple builds, after removing a conflicting limitsNavigationsToAppBoundDomains WebView restriction (which was separately causing a blank-screen bug, now fixed and confirmed working on-device). App Store Connect status:

This is our first subscription submission ever. Both subscription products currently show "Developer Action Needed" status in App Store Connect (their localizations were rejected once for vague wording, fixed and resaved, but the products remain in this state). App Review's rejection message explicitly states:

"Apple reviews In-App Purchase products in the sandbox and the In-App Purchase products do not need prior approval to function in review."

However, our experience suggests otherwise — RevenueCat returns zero offerings, and App Review's own testers also report an "error message displayed on the subscription page" when attempting to test the IAP flow. Question:

Is it actually true that subscriptions in "Developer Action Needed" / not-yet-approved status can still be fetched via StoreKit/RevenueCat during sandbox testing? Or does the first-ever subscription submission genuinely need to be approved (i.e., go through the review cycle once) before getOfferings() will return populated data? Has anyone encountered this exact "chicken-and-egg" situation, where the first IAP submission can't be tested until reviewed, but review fails because it can't be tested? Any insight into whether this is expected sandbox behavior for first-time subscription submissions, or whether there's a configuration issue I'm missing, would be hugely appreciated. Thanks!

RevenueCat offerings returning empty (current: null, allKeys: []) despite correct setup — first-time auto-renewable subscription submission
 
 
Q