Non-consumable IAP app rejected: Pro auto-unlocked for pre-1.0.5 paid users, App Review asks for expired subscription account

Hello everyone,

I’m currently stuck in App Review and would appreciate input from anyone who has dealt with a similar situation.

App setup

  • iOS app, SwiftUI, StoreKit 2

  • No user accounts (no login, no username/password, no backend)

  • No subscriptions

  • Monetization model:

    • App was paid before version 1.0.5
    • Since 1.0.5 the app is free
    • Unlocking full functionality is done via a non-consumable, one-time IAP (“Pro Unlock”)
  • Existing users who bought the app when it was paid are automatically granted Pro access

  • New users get a 24-hour local trial, then must purchase the non-consumable IAP

  • All state is local / device-based, no server

There is no concept of an account, subscription renewal, or expired subscription in the app.


Rejection from App Review

Apple rejected the app with the following message:

Guideline 2.1 – Information Needed

We are not able to continue our review because we need access to a demo account with an expired subscription to review the entire purchase flow.

Please provide a user name and password for a demo account with expired subscriptions in the App Review Information section of App Store Connect.

This is where I’m confused.


Why this doesn’t seem applicable

  • The app does not use subscriptions
  • The app does not have user accounts
  • The IAP is non-consumable, one-time purchase
  • Trials are not subscription-based and expire automatically on-device
  • There is no “expired subscription account” that could exist technically

StoreKit testing is done via sandbox Apple IDs, but those are:

  • not app-level accounts
  • not usernames/passwords inside the app
  • only used in the Apple purchase sheet

Additional complication

Because old paid users are automatically recognized as “Pro” via AppTransaction.originalAppVersion, the Unlock Pro button is hidden once Pro is active. This means that on some devices (including mine), the purchase sheet never appears anymore because the app already considers the user entitled.

This might be confusing App Review and causing them to assume the app uses subscriptions and gated accounts.


Questions

  1. Has anyone seen App Review request a demo account with expired subscription for an app that uses only non-consumable IAPs?

  2. Is there a correct way to respond other than explicitly explaining that:

    • there are no accounts
    • there are no subscriptions
    • StoreKit sandbox Apple IDs are sufficient?
  3. Would providing a sandbox Apple ID (clearly labeled as such) help, or is that inappropriate since Apple reviewers already have sandbox accounts?

  4. Is this likely just a misclassification by App Review, or is there something in Apple’s guidelines that I’m missing?


What I’ve already tried

  • Explained the purchase flow step-by-step in App Review notes
  • Clarified that the Paid Apps Agreement is already accepted
  • Clarified that Pro access is automatically granted to previous paid users
  • Verified that the IAP is correctly configured and available in App Store Connect

At this point I’m unsure whether I should:

  • escalate / push back on the incorrect assumption, or
  • modify the UI to make the purchase path permanently visible even for entitled users

Any insight from people who have gone through similar review issues would be greatly appreciated.

Thanks in advance.

Follow-up / Update

Update: New rejection – “Unlock Pro not responsive” on iPad, cannot reproduce locally

I wanted to provide an update, as the app was rejected again after addressing the previous feedback.

New rejection details

Apple now reports the following issue:

  • Guideline 2.1 – Performance – App Completeness

  • Bug description: “Unlock Pro is not responsive”

  • Steps to reproduce (per review):

    • Tap “Unlock Pro”
    • No action occurs
  • Review device: iPad Air (5th generation)

  • OS: iPadOS 26.2.1

This is confusing because:

  • The app works correctly on my devices

  • I tested the full purchase flow successfully:

    • on physical iPhone
    • in the iOS Simulator
    • even on an iPad simulator
  • The StoreKit purchase sheet appears as expected when tapping “Unlock Pro”

I followed Apple’s advice to:

  • uninstall previous versions
  • reinstall fresh
  • test upgrade paths

I still cannot reproduce a state where tapping “Unlock Pro” does nothing.


Important technical detail (possible cause)

Looking closer at my implementation, I realized there is a silent-failure code path:

  • When “Unlock Pro” is tapped:

    • purchasePro() is called
    • If Product.products(for:) fails or returns an empty array (sandbox / network / StoreKit timing issue),
    • proProduct remains nil
    • The function logs "Product not found" and returns
    • No user-visible feedback is shown

From a user (or reviewer) perspective, this results in:

Tap “Unlock Pro” → no visible action

This could explain Apple’s observation, even if the issue is intermittent and not reproducible locally.


Additional complication: iPad testing

Although the app is marked as iPhone-only in App Store Connect, Apple tested it on an iPad Air (5th gen) in iPhone compatibility mode.

I’m now assuming:

  • App Review may still test iPhone-only apps on iPad
  • StoreKit behavior (timing / product loading) may differ slightly in that environment

Planned fix

To make the purchase flow App-Review-proof, I am implementing:

  • A dedicated HydraProView that is:

    • always accessible
    • visible even when Pro is already active
  • Explicit loading and error states:

    • disable “Unlock Pro” while products are loading
    • show a visible error message + retry button if products cannot be loaded
  • Ensure that no tap can ever fail silently, even if StoreKit temporarily returns no products


Questions to the community

  1. Have others seen StoreKit sandbox product loading intermittently fail during App Review, leading to “button not responsive” reports? How did you solve that?

  2. Is it common for Apple to test iPhone-only apps on iPad and hold them to the same stability expectations?

  3. Does Apple generally accept the solution of:

    • disabling purchase buttons while loading
    • and showing a visible error + retry instead of silently returning?

Any insight or confirmation would be appreciated. At this point, I’m confident the issue is not a functional bug, but an unhandled StoreKit edge case combined with App Review environment differences.

Thanks again to everyone who helped on the first post.

Non-consumable IAP app rejected: Pro auto-unlocked for pre-1.0.5 paid users, App Review asks for expired subscription account
 
 
Q