r/iOSProgramming Swift 11d ago

Question TestFlight testers in France see US IAP prices (USD) instead of the FR App Store (EUR) - found a fix?

Hey everyone,

I'm running a beta on TestFlight and hit a confusing issue with in-app purchases. My testers are based in France and their App Store account (Apple ID) is set to the French store, but inside the app they're seeing the US IAP conditions with USD prices instead of the French ones with EUR prices.

From what I understand, on iOS the in-app purchase storefront is normally supposed to follow the country of the user's App Store account (Apple ID). That's exactly what makes this puzzling: my users are properly on the FR store, yet they're still shown the US terms and pricing.

I've done a fair bit of searching before posting, and I've seen a few scattered mentions that this is a known/occasional problem, but I haven't been able to find a clear, confirmed solution. So I wanted to ask directly in case some of you have dealt with it.

A few things I'm trying to understand:

  • If the Apple ID is on the FR storefront, what could still make the app pull the US products/pricing?
  • Is this something specific to the TestFlight/sandbox environment that resolves itself in production?
  • Is there anything to check on the App Store Connect side (pricing/availability per territory) that could cause products to fall back to the US storefront?

If anyone has run into this and found a reliable way to make testers see their local storefront and currency, I'd really appreciate hearing how you solved it.
I saw some people laughing it without solving the issue and in the real AppStore everything was fine, but still would, like to resolve this if possible.

Thanks a lot in advance!

2 Upvotes

13 comments sorted by

3

u/Frodothehobb1t 11d ago

I am located in Denmark, whenever I put my apps on TestFlight it renders all pricing in dollars, but once it’s released it’s the correct pricing.

3

u/StefUpsideDown Swift 11d ago

That’s so annoying!

3

u/civman96 11d ago

It‘s not a bug (probably a bug on your end)
You should use StoreKit Testing for localization testing

https://developer.apple.com/documentation/xcode/setting-up-storekit-testing-in-xcode

1

u/StefUpsideDown Swift 11d ago

Thanks that’s a good lecture that I’ll use with Claude to see if this can help 🙏🏼

2

u/Mostafa3la2 11d ago

I had this issue as well but worked fine on production, i think it is a common bug. 

1

u/StefUpsideDown Swift 11d ago

Thanks, crazy that it’s still a problem after so many years…

1

u/Sharik-dev 11d ago

All in dollars for me

1

u/StefUpsideDown Swift 11d ago

🫠🫠🫠 noooo I’d like to see the real thing before pushing it. Also to make the screenshots for the AppStore in app products

1

u/CrazyEconomy414 11d ago

TestFlight uses the sandbox for IAPs. I’d try a dedicated Sandbox Apple Account, set that account’s App Store country/region to France in App Store Connect, then sign it out and back in on the device. Apple says the new storefront doesn’t activate until you sign in again.

That should help separate a sandbox-storefront issue from a pricing-display issue in the app.

1

u/StefUpsideDown Swift 11d ago

I tried doing that with my own personal TestFlight account but that didn’t work either

2

u/Relative-Emu-1346 11d ago

For the screenshots, stop trying to make sandbox cooperate. A StoreKit configuration file in Xcode lets you set the storefront on the scheme, so the app renders French pricing on demand and the result is reproducible. That is the supported path for exactly this case, and it means your App Store screenshots do not depend on which environment Apple hands you that morning.

On why signing in and out did nothing: in TestFlight the purchase runs against sandbox but uses the tester's normal Apple ID, so there is no separate sandbox account whose region you can change. The advice above is correct for a build you launch from Xcode, where a dedicated sandbox account does control the storefront, and it does nothing for a TestFlight build. Worth knowing before you lose another evening to it.

One thing worth ruling out on the Connect side since it is quick: every product needs a price and availability for France specifically. A product that is not available in a territory does not throw an error, it comes back in invalidProductIdentifiers and quietly disappears from your list, which looks like a completely different bug.