StoreKit 2 - "Storefront Not Available" on TestFlight (Works on Simulator)

I'm having issues with StoreKit 2 when trying to load my auto-renewable subscriptions on a physical device via TestFlight. It works perfectly in the simulator using a local .storekit configuration file, but when I install the app through TestFlight, StoreKit does not return any products at all. Instead, I get the error:

"Storefront not available" What I've Tried:

✅ In-App Purchases are enabled on my device.

✅ Using a sandbox account (confirmed logged in under Settings > Developer > Sandbox Account).

✅ The app is signed correctly with automatic signing in Xcode.

✅ The product IDs are correct (they work in the simulator with the local StoreKit file).

✅ I enabled SK2DebugLogging, but I don't see detailed errors.

✅ Restarted the device and signed out/in of my sandbox account.

✅ Checked that the App Store region matches my sandbox account’s region.

✅ The app is not fetching products dynamically at all on a real device—just getting "storefront not available."

Additional Notes

The app is installed via TestFlight, not running in debug mode from Xcode. The app is signed in to the App Store with a real Apple ID (not the sandbox one). Apple confirmed that products don’t need to be "Ready for Sale" for sandbox testing. I checked the Console.app logs on my Mac, but nothing obvious showed up.

What I Need Help With

Why would StoreKit 2 fail to return products in TestFlight, but work fine in the simulator? What does "storefront not available" actually mean in this context? Any steps I might have missed to force StoreKit to fetch products properly? Any help would be greatly appreciated! 🚀

It works perfectly in the simulator using a local .storekit configuration file, but when I install the app through TestFlight

When your app calls StoreKit APIs in Xcode local test environment, StoreKit queries information defined for your app in the active StoreKit configuration file in your Xcode project.

When your app calls StoreKit APIs in the sandbox and production environments, StoreKit queries information defined for your app in App Store Connect. Confirm the product identifiers you use are associated with in-app purchases that are configured for your app in App Store Connect.

<Why would StoreKit 2 fail to return products in TestFlight, but work fine in the simulator? > This may happen for any of the following reasons:

  • You have an inactive developer account. Your Account Holder must renew membership, accept the Paid Apps Agreement again, and update tax and banking information.
  • You don’t have a Paid Apps Agreement in effect in App Store Connect. The agreement is in effect if it has an Active status. For more information about the statuses, see View agreements status .
  • You have incomplete or outdated tax and banking information in App Store Connect. The banking and tax information are complete if they both have an Active status. For more information, see Manage banking information,and Manage tax information.
  • The product identifier of your in-app purchase doesn't match the product identifier of an in-app purchase you defined for your app in App Store Connect.
  • You didn't set a price or add localizations to your in-app purchases. For more information, see View and edit in-app purchase information.
StoreKit 2 - "Storefront Not Available" on TestFlight (Works on Simulator)
 
 
Q