TestFlight: StoreKit 1 and 2 return USD prices, but purchase sheet shows JPY

I'm investigating a price/currency mismatch in a TestFlight app.

Environment:

  • iPhone 15, iOS 26.6.2
  • App version 0.4.2 (Build 47), distributed through TestFlight
  • Consumable product ID: line_stamp_8pack_1980
  • Diagnostic comparison: October 5, 2026, at 11:22:47 JST (UTC+09:00)

For the same product, all three product lookup paths returned price 11.99, currency USD, and display price $11.99:

  • StoreKit 1: SKProductsRequest / SKProduct
  • StoreKit 2: Product.products(for:)
  • expo-iap: fetchProducts

The direct StoreKit calls were made through native Swift diagnostics in the app. All three lookups succeeded without errors.

StoreKit 2 reported storefront country USA and ID 143462 before and after its lookup. expo-iap also reported USA before and after its lookup.

StoreKit 1's storefront was unavailable before its request. Afterward, it reported USA, with storefront identifier "143462-9,29". Our diagnostic initially labeled this as a storefront change, but an unavailable-to-available result does not establish an actual country change.

During the same testing session, Apple's purchase confirmation sheet for this product displayed ¥1,980 and stated that the purchase was for testing only. I canceled the sheet without completing the purchase.

The Media & Purchases account's country/region is Japan. App Store Connect pricing for this product is ¥1,980 in Japan and $11.99 in the United States.

What could cause the product lookup APIs to return the US storefront price while the purchase confirmation sheet displays the Japanese price?

What additional diagnostics should I collect to identify the cause and obtain a product price consistent with the purchase sheet?

Thank you.

As far as I know, 143462 is the storefront ID for Japan, not the US (I believe the US one is 143441), and your StoreKit 1 identifier 143462-9,29 also carries a -9 language suffix. If that mapping is right, your numeric storefront ID says Japan while countryCode says USA, which would mean the storefront object itself is inconsistent in that session rather than your lookup code being wrong.

Other data that can help:

  1. Log Storefront.current (both id and countryCode) immediately before Product.products(for:), and again right after the purchase sheet is dismissed.

  2. Check whether a sandbox account is also signed in on the device (Settings > Developer > Sandbox Apple Account) and which region it is set to.

TestFlight and sandbox pricing behavior is not documented very precisely, so I would treat the purchase sheet price as the one that reflects what a real customer would be charged.