I am seeing different StoreKit storefronts and localized prices between a direct Xcode installation and TestFlight on the same iPhone.
Environment:
- App: CountAdd
- iPhone 15 Pro
- In-App Purchases: non-consumable
- App Store Connect base country/region for IAP pricing: Japan (JPY)
- Japan is enabled for app and IAP availability
Results on the same device with the same app code:
Xcode Debug:
- Storefront: JPN
- Prices: JPY
Xcode Release:
- Storefront: JPN
- Prices: JPY (¥250 / ¥1,250 / ¥2,500)
TestFlight Build 10:
- Storefront: USA
- Prices returned/displayed by StoreKit: USD ($1.99 / $7.99 / $14.99)
Using macOS Console with the physical device connected, I confirmed that the TestFlight build logs:
Storefront updated to ... countryCode: "USA"
For the Xcode Release build, the same device reports:
countryCode: "JPN"
I also deleted the TestFlight app and reinstalled Build 10 to eliminate local app data as a possible cause. The issue remained: TestFlight returned USA/USD.
The Sandbox Apple Account is configured for Japan.
In some tests, although the app displays the StoreKit product price in USD, Apple's purchase confirmation sheet displays the price in JPY.
I am not manually converting or hardcoding prices. The app displays the localized product price returned by StoreKit.
I have already reported this through Feedback Assistant: FB25014147
I also contacted Apple Developer Support: Case 102983767864
Developer Support advised that they cannot investigate technical issues involving Sandbox IAP testing and directed me to Feedback Assistant.
My main questions are:
-
Is it expected or a known issue for a TestFlight/Sandbox build to receive a USA storefront and USD product metadata while a direct Xcode build on the same device receives JPN/JPY?
-
More importantly, can this TestFlight/Sandbox behavior affect the production App Store version? When a user in Japan installs the production app from the App Store, should StoreKit return the Japanese storefront and JPY localized prices?
I am trying to determine whether it is safe to submit/release the app without implementing any manual currency conversion or hardcoded pricing.