Auto-renewable subscriptions returning false on RevenueCat Purchase — unable to test in sandbox without Xcode

Hello,

I am experiencing a persistent issue with auto-renewable subscriptions during App Review. Despite verifying all configurations, the subscription purchase flow fails and the app continues to be rejected under Guideline 2.1(b).

Environment

  • App built with FlutterFlow (no Xcode access, Windows-only development environment)
  • purchases_flutter SDK v9.9.5 (RevenueCat)
  • iOS deployment target: iOS 13+
  • Review device reported by Apple: iPhone 17 Pro Max, iOS 26.4.2

Configuration verified

App Store Connect:

  • Subscription group plateup_pro created and configured
  • Products plateup_pro:monthly (1 month) and plateup_pro:yearly (1 year) created with all required fields
  • Both products status: Waiting for Review
  • Paid Apps Agreement: Active as of May 8, 2026
  • All tax forms active: Brazil Tax Form, W-8BEN-E, W-8BEN
  • Banking account: Active

RevenueCat dashboard:

  • In-App Purchase Key configured and validated: Valid credentials confirmed
  • App Store Connect API Key configured and validated: Valid credentials confirmed
  • Apple Server to Server Notifications: configured correctly
  • Entitlements, Offerings and Packages: correctly configured and linked to both products
  • Purchase tracking: All purchases in RevenueCat (default)

App (FlutterFlow):

  • RevenueCat Purchase action configured for both $rc_monthly and $rc_annual packages
  • Action output variables isMonthly and isYearly checked after purchase
  • Both FALSE paths now display an informational alert: "Purchase unavailable. Please try again later."
  • Paywall screen includes subscription title, duration, price, auto-renewal disclosure, EULA and Privacy Policy links, and Restore Purchases button

The problem

When the reviewer taps "Start 7-Day Free Trial", the RevenueCat Purchase action returns false for both isYearly and isMonthly, causing the informational alert to appear instead of completing the purchase. The reviewer sees this as a bug.

Our diagnosis suggests this may be caused by one or more of the following:

  1. Subscription products stuck in "Waiting for Review" status — StoreKit may not return products that have not yet been approved, even in the sandbox environment. This appears to be the circular dependency described in this forum thread: https://developer.apple.com/forums/thread/818349

  2. First-time subscription submission flow — The App Store Connect UI shows the message: "Your first subscription must be submitted with a new app version. Create your subscription, then select it from the app's In-App Purchases and Subscriptions section on the version page before submitting the version to App Review." We have attempted to add the subscriptions to the version page before submitting, but the option to select them was not consistently available.

  3. Possible SDK compatibility issue with iOS 26 — The purchases_flutter SDK version is managed by the FlutterFlow platform, and we cannot rule out a compatibility issue between the SDK and StoreKit on iOS 26.4.2.


Sandbox testing limitation

We are unable to reproduce or verify the issue locally because:

  • The app is developed entirely on Windows using FlutterFlow
  • We have no access to Xcode or macOS
  • Enabling Developer Mode on the iOS test device requires Xcode, which we do not have
  • Without Developer Mode, the Sandbox Account option does not appear in iOS Settings → App Store
  • Our only available testing method is TestFlight, which does not support sandbox purchases without Developer Mode enabled

This means we cannot confirm whether the purchase flow works before submitting to App Review, creating a dependency on the reviewer's sandbox environment.


Questions

  1. Can StoreKit return subscription products in the reviewer's sandbox environment while those products are still in "Waiting for Review" status? Or must the products be approved first?

  2. Is there a way to correctly attach auto-renewable subscriptions to the app version submission from App Store Connect, given that we do not have access to Xcode or the App Store Connect API?

  3. Is there a known compatibility issue between purchases_flutter v9.9.5 (RevenueCat) and StoreKit on iOS 26.4.2 that could cause the purchase action to return false?

  4. Is there any alternative way to test sandbox purchases on iOS without enabling Developer Mode — for example, directly through TestFlight?

Any guidance would be greatly appreciated. We have now gone through multiple review cycles with the same result and have exhausted all configuration options we can verify from our environment.

Thank you.

Answered by eslezinsky in 887589022

Thank you for the detailed responses and suggestions.

I wanted to follow up with an update: we have identified the root cause of the issue.

The problem was a FlutterFlow bug — not a StoreKit or RevenueCat configuration issue.

FlutterFlow was generating the main.dart file with an empty string for the App Store API key, even after the key was correctly saved in the platform settings:

await revenue_cat.initialize( "", // ← App Store key was empty "goog_XXXXXXXXXXXXXXXX", loadDataAfterLaunch: true, );

This caused the RevenueCat SDK to initialize with invalid credentials on iOS, returning INVALID_CREDENTIALS (code 11) on every call — including getOfferings() and purchasePackage(). The purchase action returned false not because of a StoreKit issue, but because the SDK was never properly authenticated.

Workaround applied

Since FlutterFlow does not expose main.dart for direct editing, we implemented a Custom Action called on pgSplash (first action on Page Load) that forces the correct API key at runtime, overriding the empty initialization from main.dart:

Future initRevenueCatManual() async { if (kIsWeb) return; final String apiKey = Platform.isIOS ? 'appl_XXXXXXXXXXXXXXXX' : 'goog_XXXXXXXXXXXXXXXX'; final configuration = PurchasesConfiguration(apiKey); await Purchases.configure(configuration); }

After deploying this fix, the RevenueCat SDK initializes correctly, getOfferings() returns the expected packages with pricing, and the purchase flow completes successfully.

We have reported this as a bug to FlutterFlow via their GitHub issue tracker.

We are now resubmitting to App Review with this fix in place. Hopefully this helps other FlutterFlow developers facing the same issue.

Thank you again for the support.

Thank you for your post. We're investigating and will contact you in App Store Connect to provide further assistance. If you continue to experience issues during review, please contact us.

Accepted Answer

Thank you for the detailed responses and suggestions.

I wanted to follow up with an update: we have identified the root cause of the issue.

The problem was a FlutterFlow bug — not a StoreKit or RevenueCat configuration issue.

FlutterFlow was generating the main.dart file with an empty string for the App Store API key, even after the key was correctly saved in the platform settings:

await revenue_cat.initialize( "", // ← App Store key was empty "goog_XXXXXXXXXXXXXXXX", loadDataAfterLaunch: true, );

This caused the RevenueCat SDK to initialize with invalid credentials on iOS, returning INVALID_CREDENTIALS (code 11) on every call — including getOfferings() and purchasePackage(). The purchase action returned false not because of a StoreKit issue, but because the SDK was never properly authenticated.

Workaround applied

Since FlutterFlow does not expose main.dart for direct editing, we implemented a Custom Action called on pgSplash (first action on Page Load) that forces the correct API key at runtime, overriding the empty initialization from main.dart:

Future initRevenueCatManual() async { if (kIsWeb) return; final String apiKey = Platform.isIOS ? 'appl_XXXXXXXXXXXXXXXX' : 'goog_XXXXXXXXXXXXXXXX'; final configuration = PurchasesConfiguration(apiKey); await Purchases.configure(configuration); }

After deploying this fix, the RevenueCat SDK initializes correctly, getOfferings() returns the expected packages with pricing, and the purchase flow completes successfully.

We have reported this as a bug to FlutterFlow via their GitHub issue tracker.

We are now resubmitting to App Review with this fix in place. Hopefully this helps other FlutterFlow developers facing the same issue.

Thank you again for the support.

Auto-renewable subscriptions returning false on RevenueCat Purchase — unable to test in sandbox without Xcode
 
 
Q