DEV Community

Çağrı Baş
Çağrı Baş

Posted on AI-assisted

Three App Store surprises from shipping my first Flutter app

I'm the solo developer of Vela, an iPhone app built with Flutter (Riverpod, Drift, Supabase, RevenueCat). It shipped in October. None of these three issues showed up in tests; all three showed up in App Store Connect.

1. The store's language row ignores CFBundleLocalizations

The app is fully localized in Turkish and English through Flutter's ARB files, and Info.plist lists both languages. The store page still said English only. In App Store Connect, the build's metadata listed locales = ["en"].

Apple seems to read the languages from the .lproj folders inside the bundle, and my Flutter iOS project shipped only Base.lproj. The fix:

  • add en.lproj and tr.lproj, each with an InfoPlist.strings
  • add tr to knownRegions in the Xcode project
  • check that the folders actually exist inside the built Runner.app

The next build's metadata in App Store Connect showed ["tr", "en"], and once that build went live the store page listed "English and Turkish".

2. TestFlight shows dollar prices to a Turkish account

On TestFlight, my Turkish account saw USD prices on the paywall, while RevenueCat recorded the same purchases in Turkish lira. This is known sandbox behaviour: the sandbox storefront can fall back to the US catalog. RevenueCat's docs cover it in the Currency section of their App Store sandbox guide.

The paywall just prints the store's priceString, so there was nothing to fix in the app. The lesson: don't "fix" currency in code based on what TestFlight shows you.

3. Your next App Review reviewer may already be a subscriber

In the review sandbox a yearly plan renews daily, and reviewers can come back with the same Apple account. If your UI hides the purchase screen from subscribers, the reviewer can't reach the thing they're asked to review. Keep a path to the paywall open for subscribers too.


That's the list. The app itself, if you're curious: Vela on the App Store. It's built on ACT principles (stepping back from thoughts instead of fighting them) and is not a substitute for therapy.

Top comments (0)