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.lprojandtr.lproj, each with anInfoPlist.strings - add
trtoknownRegionsin 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)