Subscriptions load in TestFlight sandbox but not during App Review — 2.1(b), third rejection

Our first submission has now been rejected under Guideline 2.1(b), with the message: "the in-app purchases do not load successfully." Each review was performed on an iPad Air 11-inch (M3) running iPadOS 26.6.

The app sells only auto-renewable subscriptions. We cannot reproduce the failure, and we have verified every part of the configuration we can think of.

WHAT WE VERIFIED (via the App Store Connect API, not just the UI)

  • Two subscriptions in one group, state READY_TO_SUBMIT
  • Product IDs exactly match what the app requests
  • Available in 175 territories, including the United States
  • Prices set, en-US localizations present for both products and for the group
  • App review screenshots attached to both, state COMPLETE
  • Both subscriptions are included in the review submission (READY_FOR_REVIEW)
  • Paid Apps Agreement: Active. Bank account: Active. Tax forms: Active.

WHAT WORKS

On our own devices, installed via TestFlight (sandbox environment), the products load correctly and a purchase completes and activates as expected. This works on both a real Apple ID and a Sandbox Tester account.

WHAT WE OBSERVED FROM THE REVIEW SESSION

We use RevenueCat. Their server-side API returns our offering with both packages and the correct product identifiers, so the offering metadata is fine. Our backend also shows that the reviewer's session reached our servers and signed in successfully at the review timestamp, so the device had working network connectivity.

That leaves StoreKit itself returning no products on the reviewer's device, which is what empties the offering.

QUESTIONS

  1. Are there known conditions under which StoreKit returns no products in the App Review sandbox for subscriptions that are in "Ready to Submit" and are attached to the same submission as the binary?

  2. For an app that has never been approved, is product loading during review handled differently from a normal sandbox session on a released app?

  3. Is there any way to obtain diagnostics from a review session, or to ask the reviewer for a screenshot of the failing screen? Replies in Resolution Center so far have only repeated the original rejection text.

  4. Is there anything specific to iPadOS 26.6 that could affect StoreKit 2 product lookups?

For the next submission we have added a timeout and automatic retries around the product lookup, plus a visible retry control instead of a spinner, in case the failure is a transient cold-start timeout. But we would rather understand the actual cause than keep guessing.

Any pointers appreciated.

I’m experiencing exactly the same issue. Two of my apps are stuck. Everything works fine when I test through TestFlight using a Sandbox account, but the reviewer tells me that In-App Purchases are not available.

Have you managed to resolve this issue?

Thanks in advance!

Since your backend sees the reviewer's session, it's worth logging exactly what StoreKit returns on their device before the next submission: Storefront.current?.countryCode, the environment, and the raw result or error of Product.products(for:) for your IDs (bypassing RevenueCat's offerings). That tells you whether it's an empty response, a timeout or a storefront issue, instead of guessing.
Two other things that have caused this exact pattern: (1) the paywall waits for offerings and never retries. Your timeout + retry button plan is right, and also prefetch on launch instead of on paywall open. (2) On iPad, any code path that differs (a different paywall layout or a split view) and calls fetch at a different time. In your review notes, say where the paywall is and that you added retry. RevenueCat support has seen this pattern too, so a ticket with the reviewer-session logs is worth it.