StoreKit 2 subscription: “Continue to Purchase” does nothing in App Review, works in TestFlight

Hi,

I’ve been struggling for a while with an issue around an auto-renewable subscription using StoreKit 2 and I’d like to double-check here whether I’m missing something, or if anyone has seen similar behavior.

Context • iOS / iPadOS app, first release • 1 auto-renewable subscription (only product in the app) • Using StoreKit 2 only (Product, Transaction, AppStore) • Review device according to the message: iPad Air 11” (M3), iPadOS 26.2 • I keep failing on Guideline 2.1 – App Completeness • The App Review message is always the same: “The In-App Purchase products in the app exhibited one or more bugs which create a poor user experience. Specifically, no action occurred when we tapped on the Continue to Purchase button.”

In App Store Connect, the subscription is properly configured, is in the state Ready for Review, and is correctly associated with this app version.

What I see (locally + TestFlight)

In TestFlight and local builds, the behavior looks correct: • Product.products(for: […]) returns the product, the price and currency are displayed correctly on the paywall / subscription card. • The user taps “Get PRO” → my overlay is shown (“Preparing purchase…” → then a screen with confirmation and price). • After tapping the “Continue to Purchase” button in that overlay, I call await product.purchase(). • On my devices, the system StoreKit purchase sheet always appears. • In the sandbox logs I can see: • a successful result from purchase() • a verified transaction via VerificationResult • the “user has PRO” flag being set correctly after refreshing entitlements (Transaction.currentEntitlements + fallback Transaction.latest(for:)).

I’ve tested this on multiple real devices and with several sandbox Apple IDs – I cannot reproduce the “nothing happens after tapping” problem.

What App Review reports

App Review repeatedly claims that “no action occurred when we tapped on the Continue to Purchase button.”

From their screenshots and description, the flow is: 1. They open Settings → subscription card. 2. They see the loaded price, so the product has clearly been fetched successfully from the App Store. 3. They tap my “Get SalonFlow PRO” button. 4. My overlay appears with the subscription name and price. 5. They tap “Continue to Purchase” (in my UI this is “Pokračovat k nákupu”). 6. According to them, nothing happens – no system StoreKit confirmation, no error message, no visible action.

Important: this overlay did not appear as an extra complication, but as a reaction to their earlier feedback: • Originally, I had a simple flow: button in the card → directly calling purchase(). • App Review at that time said that after tapping the button “nothing happens”. • I added the overlay specifically to make it obvious that the button does react and that the app is preparing the system purchase: I show the product, the price, and a text explaining that a system App Store confirmation will appear next. • Only from that overlay do I call purchase().

So: in their environment they obviously do reach the overlay (meaning the button definitely does “something”), but the actual StoreKit purchase sheet never shows up.

Additional changes and “safety belts”

From the App Review video it was clear they were tapping the purchase button roughly 3 seconds after launching the app. So I tightened the flow even more: • The “Get SalonFlow PRO” button is now: • disabled until the product has been loaded from the App Store, • visually dimmed, with a spinner and a short text like “Loading subscription information, please wait…”. • The button only becomes active once the product is actually loaded and ready. • After that, the user goes through a two-step process: 1. tap “Get SalonFlow PRO” → overlay with details, 2. tap “Continue to Purchase” → this is where I call purchase().

On my devices, after that step the system purchase confirmation always appears. But App Review still says that after tapping “Continue to Purchase” nothing happens.

What I’d like to ask 1. Has anyone seen a situation where Product.purchase() with StoreKit 2 works fine in TestFlight and sandbox testing, but in the App Review environment the system purchase sheet never appears (no error, just “nothing”)? 2. Are there any known edge cases on iPad (iPadOS 26.2, iPad Air M3) where the StoreKit purchase sheet might fail to show even if: • AppStore.canMakePayments == true, • the product is valid and loaded, • and no error is thrown from purchase()? 3. Could App Review consider my two-step flow (button → overlay → confirm button calling purchase()) problematic in itself, even though the overlay is there precisely because of their initial complaint that “nothing happens” after tapping the button? 4. Is there anything concrete you’d recommend: • adding to the logs, • changing in the timing/order of the purchase() call, • or adjusting in the UI, to make it absolutely clear what is happening in their environment if the system sheet never appears?

From my point of view, the implementation follows the StoreKit 2 documentation, everything works correctly in real tests and TestFlight, but the App Review environment behaves differently and I keep getting stuck on Guideline 2.1.

I’d really appreciate any experience, tips (“we had exactly this and fixed it by X”), or even a recommendation to radically simplify the flow back to a minimal “button → directly purchase()” without any intermediate overlay.

Thanks a lot for any help – this review loop has been going on for weeks and I’d really like to finally resolve it.

StoreKit 2 subscription: “Continue to Purchase” does nothing in App Review, works in TestFlight
 
 
Q