My app has been rejected twice under Guideline 2.1(b) because its In-App Purchases did not load during review. Both reviews used an iPad Air 11-inch (M3); the latest was on iPadOS 27.0.1. The reviewer's screenshots show the app's fallback state, which appears when StoreKit 2's Product.products(for:) returns none of the products.
I can't reproduce it
The same build loads all four products with their prices in every test I've run:
- TestFlight on iPhone and iPad (iPadOS 27.0), with a US account
- Run from Xcode with StoreKit Testing disabled, using a brand-new US sandbox account and a fresh install
- Starting offline and then reconnecting
- Signed out of the sandbox
- With In-App Purchases restricted in Screen Time
Setup
- Four non-consumables, $0.49 USD, available in all countries, with localizations and review screenshots
- Submitted together with the app version (status: Waiting for Review)
- Paid Apps Agreement, banking and tax all active
- I've worked through Technote TN3186 (Troubleshooting In-App Purchases availability in the sandbox)
Code
Loading is a single call, retried a few times, and the user can tap Try Again:
let products = try await Product.products(for: productIDs)
Questions
- Is there anything that can stop products from being returned in the App Review environment but not in the sandbox?
- Is there a way to check what the review environment sees?
Any help is appreciated.