StoreKit returns no in-app subscriptions on TestFlight despite correct App Store Connect configuration

Hello Applet, I’m experiencing an issue with StoreKit on a TestFlight build. My app uses auto-renewable subscriptions through StoreKit and RevenueCat. Configuration already verified: App installed through TestFlight (not debug). Bundle Identifier: com.ciborgu.vytalai Paid Applications agreement is active. In-App Purchase capability is enabled. Three auto-renewable subscriptions exist in App Store Connect. Product IDs match exactly between App Store Connect, RevenueCat and the application. RevenueCat initializes successfully. A Sandbox test account has been created. Tested on a physical iPhone. Device restarted and app reinstalled from TestFlight. VPN and iCloud Private Relay disabled. When attempting to purchase a subscription, the Apple payment sheet never appears. Our diagnostics indicate that StoreKit does not return any available products for the configured Product IDs, preventing the purchase sheet from opening. Expected Product IDs: vytalai_premium_monthly vytalai_premium_yearly vytalai_premium_yearly_intro Could you please verify if there is any issue with the App Store Connect configuration, StoreKit availability, or the processing state of these subscriptions on Apple’s side? If additional logs or diagnostics are required, I can provide them. Thank you.

I have already contacted Apple Developer Support regarding this same issue. Previously, I was advised to schedule a technical support meeting. However, when I requested the meeting, my request was declined because of the subject of my issue, so I was unable to speak with an Apple engineer. Since I have now completed all the recommended troubleshooting and the issue still persists, I would greatly appreciate it if this case could be reviewed by the appropriate technical team or a StoreKit engineer. Thank you for your assistance.

Hello -

TestFlight uses the Sandbox environment when testing In-App Purchases.

To troubleshoot issues with IAP products in a TestFlight build, please refer to this TechNote and review all of the topics covered to ensure your app and IAP products are correctly configured and ready for testing.

If you have addressed everything in the TechNote and are still having problems, please reply again to this thread with any additional details and we will be happy to try and assist further.

Thank you.

Hello,

Thank you for pointing me to TN3186. I have reviewed every item. Summary:

App: Vytal AI Bundle ID: com.ciborgu.vytalai ASC App ID: 6767160542 Team ID: JZF7CR3W8Z Test environment: TestFlight (build 115, version 1.1.0) Platform: Capacitor + RevenueCat Purchases SDK (@revenuecat/purchases-capacitor)

Subscription Product IDs (auto-renewable, subscription group "Vytal AI"):

  • vytalai_premium_monthly
  • vytalai_premium_yearly
  • vytalai_premium_yearly_intro

TN3186 checklist: ✓ Bundle ID matches ASC app record ✓ Explicit App ID (not wildcard) ✓ In-App Purchase capability enabled on App ID ✓ App signed with valid distribution profile via EAS ✓ Active Apple Developer membership ✓ Paid Apps Agreement: Active ✓ Banking and tax: complete ✓ Price and localizations on all 3 subscriptions ✓ No StoreKit Configuration file in project

Issue: When calling StoreKit via RevenueCat on a physical iPhone (TestFlight), Product.products / getProducts returns ZERO products for all 3 identifiers. Purchase sheet never appears. In-app diagnostic shows:

  • Bundle: com.ciborgu.vytalai (correct)
  • RevenueCat iOS API key present (appl_…)
  • StoreKit products[]: 0

I also run a minimal test (configure → getOfferings → purchasePackage) with the same result.

Could you please verify on your side whether these 3 subscription product IDs are available in sandbox for bundle com.ciborgu.vytalai? Is there a server-side block or metadata issue preventing sandbox catalog sync?

Device: [iPhone model], iOS [version] Sandbox tester: [email if created] Date/time of last test: [date]

Thank you.

Hello - I can confirm that all three of your In-App Purchase subscription products should be available for testing in Sandbox, after successfully loading them through two internal tools available within Apple.

For further assistance from Apple, I recommend submitting a new report via the Feedback Assistant. Ideally your submission will include a Sysdiagnose log that captures what happens in your app when trying to load the IAP products.

Once you have filed through Feedback Assistant, you can reply to this thread with the ticket/case number assigned by Feedback Assistant and we can follow-up further on our side.

Thank you.

Hello,

Thank you for your help.

I have now submitted a report through Feedback Assistant.

Feedback ID: FB23480567

A sysdiagnose captured immediately after reproducing the issue was attached to the report.

Thank you.

@Ciborgu I understand you have checked that the bundle IDs match.

Not sure if the following helps:

  • I had a similar problem, for me personally AppStore Connect App's SKU didn't match with that of Xcode project app target's bundle ID.

I am having a similar problem but not using RevenueCat. Did you or Apple figure out what the problem was?

I am also having the same problem. Subscriptions products are not arriving.

Non-consumable in-app purchases arriving only when they are "Ready for Review" state but i am not able to complete a purchase, and when i try to complete a purchase i get;

Payment completed with error: Error Domain=ASDServerErrorDomain Code=3504 "This item cannot be found." UserInfo={NSLocalizedFailureReason=This item cannot be found., AMSServerErrorCode=3504, client-environment-type=Sandbox, storefront-country-code=USA}

Same signature here, and I have already filed through Feedback Assistant as suggested above.

FB24067333 (filed 2026-07-30, sysdiagnose attached)

App: Apple ID 6794682125, Bundle ID app.negaiboshi, Team 778QPP83C4. Preparing first submission - 1.0 has never been reviewed; build 1.0 (1) uploaded to TestFlight 2026-07-26.

In-App Purchases, all Ready to Submit since 2026-07-27, base country Japan (JPY):

  • app.negaiboshi.pro.monthly (auto-renewable, 480 JPY)
  • app.negaiboshi.placement (non-consumable, 720 JPY)
  • app.negaiboshi.nightsky (non-consumable, 1200 JPY)

Product.products(for:) returns all three correctly (JPY prices, Japanese localizations, Storefront.current = JPN), but product.purchase() fails instantly and the payment sheet is never presented:

Error Domain=ASDServerErrorDomain Code=3504 "This item cannot be found." UserInfo={AMSServerErrorCode=3504, client-environment-type=Sandbox, storefront-country-code=JPN}

Reproduced with zero app code involved: Settings > Developer > Sandbox Apple Account > Manage > Start Transaction > In-App Purchase, with product ID app.negaiboshi.placement and bundle ID app.negaiboshi, fails with "The provided product ID or bundle ID is invalid. [Environment: Sandbox]". Calibration: a deliberately nonexistent product ID (app.negaiboshi.zzz) produces the byte-for-byte identical error, i.e. the sandbox commerce backend treats a real Ready-to-Submit product exactly like a nonexistent one.

From the sysdiagnose attached to FB24067333, storekitd logged two AMSServerCorrelationKeys that should let the commerce backend locate the exact server-side requests:

  • HNB5UGLE72AXSMY5KY7G4NAXQY - inAppBuy, failureType 3504 (in-app purchase attempt, 2026-07-30 09:43:58 UTC)
  • FQN4Y4JOEHYBW2GIR7KPTYTB2A - Start Transaction tool, server code 3766 (2026-07-30 09:44:40 UTC)

TN3186 fully verified: explicit App ID with the In-App Purchase capability, valid development signing, active membership, Paid Applications Agreement active, banking and tax active, price and localizations set on all three, no StoreKit Configuration file (verified None).

Developer-side levers that did not help: a price-point change (720 -> 700 JPY, effective immediately) and a full base-country change (Japan 720 JPY -> United States 4.99 USD and back) both propagated to the sandbox metadata catalog within minutes - products(for:) returned the new prices - while purchase() kept failing with the same 3504. Sandbox account sign-out/in and a device restart made no difference. So the metadata pipeline works while the commerce catalog appears to lack the SKUs.

This does not look isolated: the reply above in this thread reports the identical ASDServerErrorDomain 3504 on the USA storefront, and thread 839645 describes the same pattern on an app that was then rejected under Guideline 2.1(b) because App Review hit the same error. My own thread is https://developer.apple.com/forums/thread/839943 (no replies so far).

Could someone check the sandbox commerce-catalog state for these product IDs, and for the app record itself? Happy to provide anything else that would help.

Thank you.

Same failure signature here, independent app, adding a data point since this thread seems to be the closest match I could find.

App: Safe Cracker, Bundle ID com.seanfu.safe.watchkitapp (watchOS-only), Team 574P9Q3HG7. IAP: com.seanfu.safe.fullversion (non-consumable, $1.99), currently Rejected in ASC after two review rejections that both cite the IAP failing to load ("failed to load even after we tapped Retry").

TN3186 checklist: fully verified — explicit App ID with IAP capability, valid signing, active membership, Paid Apps Agreement active, banking and tax active, price/localization set, no StoreKit Configuration file attached to the build under test.

Symptom: Product.products(for:) returns an empty array with no error (storefront resolves correctly, e.g. USA). This reproduces both for App Review (per the rejection notes) and for my own sandbox testing under certain conditions.

New data point I can add: I built a minimal 3-call repro project (same bundle ID/team, only Product.products, currentEntitlements, and AppStore.sync() — no third-party SDK). On that repro, AppStore.sync() returns userCancelled after the sandbox password prompt is completed successfully — i.e. authentication finishes, but sync still reports userCancelled. That doesn't match the literal meaning of "user cancelled" and looks like an internal failure being mis-surfaced.

Also tracked, closer to what @toyoyo found: in my case, the empty-products result correlates with the IAP's ASC status. With the IAP in "Rejected," Product.products(for:) returns 0 for my own sandbox device; within minutes of resubmitting for review (moving it out of Rejected), the same query on the same device returns 1 product correctly. But that alone doesn't explain the App Review failures, since the rejection emails show the IAP had its own review section (i.e. it was not Rejected) at the time review tested it and still failed — so ASC status isn't the whole story on Apple's side either.

Given how many independent reports are stacking up in this thread with TN3186 fully exhausted, is this something the App Store Commerce Engineer team can escalate as a known backend issue rather than case-by-case Feedback Assistant reports? Happy to file FB + sysdiagnose if that's still the preferred channel — just noting the pattern in case it saves round-trips.

StoreKit returns no in-app subscriptions on TestFlight despite correct App Store Connect configuration
 
 
Q