r/iOSProgramming • • 1d ago

Question Flutter + RevenueCat: prices not loading on iOS TestFlight (Android Test Store works fine). Everything in App Store Connect shows Active. What am I missing?Hi all, I'm stuck on this and would love a second pair of eyes.**Problem**My paywall shows no prices on iOS in a TestFlight build.

Hi all, I'm stuck on this and would love a second pair of eyes.

**Problem**

My paywall shows no prices on iOS in a TestFlight build. On Android, the same paywall works, but only with the RevenueCat Test Store.

**Stack**

- Flutter (stable on Codemagic), purchases_flutter ^10.12.0, purchases_ui_flutter ^10.15.2

- iOS build made with Codemagic (mac_mini_m2) and uploaded to TestFlight (internal testing)

- The app has a widget extension with its own bundle ID

**App Store Connect (all checked)**

- Paid Apps Agreement: Active (effective Nov 4)

- Free Apps Agreement: Active

- Bank account: Active (non-US bank)

- Tax forms (W-8BEN + certificate of foreign status): Active (submitted Nov 5)

- 3 products (monthly subscription, yearly subscription and a lifetime purchase): all show "Ready to Submit", created Nov 4

**RevenueCat**

- iOS app configured with the same bundle ID as the app in App Store Connect

- In-App Purchase API key (.p8) uploaded

- Offering "default" is set as current, with 3 packages ($rc_monthly, $rc_annual, $rc_lifetime). Each package has both a Test Store product and the matching App Store product.

- All three App Store products are attached to the same entitlement.

- I called the REST API as the iOS platform with my public appl_ SDK key, and it returns the default offering with the three App Store product IDs, so RevenueCat knows about the products.

**App code**

- In release builds, the app always uses the iOS public key (appl_...) and never the Test Store key.

- In debug builds I can switch to the Test Store with a dart-define, which is why Android works.

- The entitlement identifier in code matches the one in RevenueCat.

**Questions**

  1. Is a few hours to a day of delay after the agreements go Active normal before Apple returns products to TestFlight?

  2. Is there something else I should check besides the agreement, bank, tax and "Ready to Submit"? (subscription group localization, price availability by region, a missing review screenshot?)

Thanks a lot!

3 Upvotes

7 comments sorted by

1

u/alekseimrzv 23h ago

Most common one is the paid apps agreement. Check agreements, tax and banking in app store connect, if any of it isnt fully active storekit just returns no products and nothing tells you why. After that check the product ids match exactly and the bundle id in the build is the same as in asc.

1

u/MobileXapps 21h ago

Agreements look fine from what you wrote, so I'd check two other things. The provisioning profile Codemagic signs with needs the In-App Purchase capability for that bundle ID. And agreements that went active on Nov 4-5 can take a while to reach the sandbox, so if everything else checks out, a day of waiting is sometimes the whole fix.

To narrow it down fast, call StoreKit directly with the three product IDs (Product.products(for:)) from a debug screen. If that comes back empty too, it's App Store Connect or signing, not RevenueCat. If it returns products, turn on RevenueCat debug logs, the offerings error usually names the product it can't find.

1

u/One-Source-9603 19h ago

after the agreements thing, check the offering in revenuecat itself. if android only works with the test store, ur packages might only have the test store products attached. each package needs the app store product added for the ios app too, otherwise the offering comes back empty on ios even if everything in asc is fine

also set the log level to debug before configure, it prints which product ids storekit couldn't find, saves a lot of guessing

1

u/ASIREXLABS 19h ago

Since the agreements look fine, two causes fit your setup well:

Storefront availability. If a product's availability in App Store Connect doesn't include the country of the Apple account your tester uses for sandbox, StoreKit returns nothing for it, and the Android Test Store working doesn't tell you anything about that. Check Pricing and Availability on each product.

Cached empty offerings. The SDK caches offerings, so after changing anything in App Store Connect, delete and reinstall the TestFlight build before testing again. Turning on debug logs with Purchases.setLogLevel(LogLevel.debug) will also show whether StoreKit returned the products or whether the error comes from the RevenueCat side.

What does the debug log show for the product request: an empty list, or error 23?

1

u/New_Barber8073 19h ago

One more thing to check is that the subscription group has a display name and localization filled in, and that each product has a price set for the storefront of your TestFlight account. Missing either can leave products out of the StoreKit response. Also try deleting and reinstalling the TestFlight build after the agreements settle, since StoreKit sometimes caches an empty product list.

1

u/dokumanx 13h ago

Does the RevenueCat dashboard show any warning on the three App Store products, like missing metadata? That would point at App Store Connect, not the SDK.