App Review cannot complete auto-renewable subscription purchase (Guideline 2.1) although sandbox & TestFlight work

Hello,

I’m experiencing repeated rejections related to Guideline 2.1 – App Completeness for an iOS app using auto-renewable subscriptions, and I’m struggling to understand what is missing, as the purchase flow works correctly in sandbox and TestFlight.

App setup:

  • iOS app built with React Native (Expo + react-native-iap)
  • Auto-renewable subscriptions: • Monthly: €4.99 • Yearly: €39.99
  • Paid Apps Agreement accepted
  • Subscriptions configured and active in App Store Connect
  • Privacy Policy and Apple Standard EULA included: • Visible inside the app on the subscription screen • Added in App Store metadata

What App Review reports: App Review states they are unable to buy the in-app purchase, resulting in a rejection under Guideline 2.1 (App Completeness).

What works correctly:

  • getSubscriptions() returns valid products in sandbox
  • Subscription titles, prices, and durations are displayed in the app UI
  • requestSubscription() is triggered when tapping the subscribe button
  • Apple purchase sheet appears and completes successfully in: • Sandbox testing • TestFlight (external testers)

What I’ve verified:

  • No conditional logic blocks purchases in review builds
  • Purchase button always calls requestSubscription
  • purchaseUpdatedListener and purchaseErrorListener are correctly registered
  • No hardcoded prices; prices come from StoreKit
  • Same behavior on iPhone and iPad

Question: Is there any known limitation or requirement in the App Review environment for auto-renewable subscriptions that differs from sandbox/TestFlight when using a custom subscription UI (not SubscriptionStoreView)?

If App Review requires a specific implementation detail (StoreKit 2, SubscriptionStoreView, or something else), I would really appreciate clarification, as this is not explicitly stated in the rejection.

Thank you for your help.

App Review cannot complete auto-renewable subscription purchase (Guideline 2.1) although sandbox & TestFlight work
 
 
Q