We're testing In-App Purchases for our app distributed via TestFlight, using Sandbox Apple Accounts. We observe two device-dependent behaviors and have two questions. (App-specific details, including the bundle ID, are in our Feedback report FB24632077.)
Observation 1 — Consumable second purchase fails with DuplicateTransaction on some devices
- The first purchase of a consumable succeeds and the transaction is finished. A second purchase of the same consumable then fails with
PurchaseFailureReason.DuplicateTransaction("This In-App Purchase has already been bought") on some devices. - It correlates with sandbox session persistence: on devices where the purchase prompts for password only (e.g., iOS 26.x, iPadOS 18.4.1) the second purchase succeeds; on devices where it prompts for the account (email) + password every time (e.g., iOS 18.3.2, iPadAir2 15.6), the second purchase fails.
- The same Sandbox Apple Account behaves differently on different devices. An Ad Hoc (development-signed) build with the same account succeeds.
Observation 2 — Product price sometimes returns USD instead of the storefront currency
- With the same Sandbox account (region: Japan), prices are shown in JPY on iOS 26.2 but in USD on iOS 18.3.2. The App Store app shows JPY, but
SKProductsRequest/ StoreKit 2Productmetadata returns USD.
Question 1: Are these known Sandbox/TestFlight limitations? If so, what is the recommended way to reliably test repeat consumable purchases (and to get the correct storefront currency) in TestFlight across many devices and OS versions?
Question 2: For TestFlight IAP testing, are there environmental differences between (A) using the device's real Apple ID (signed into Media & Purchases; automatic sandbox) and (B) signing out of Media & Purchases and using a Sandbox Apple Account — with respect to:
- reliability of repeat consumable purchases,
- authentication / session persistence (password-only vs account + password each purchase),
- storefront / currency resolution for product metadata,
- ability to clear purchase history?
Which approach do you recommend for a consistent, reliable TestFlight IAP QA environment?
Environment: TestFlight (App Store distribution), Sandbox tester region = Japan. (App-specific identifiers such as bundle ID are in our Feedback report FB24632077.) Repro: buy a consumable once (succeeds, finished) → buy the same product again → DuplicateTransaction on affected devices.
Thanks!