StoreKit

RSS for tag

Support in-app purchases and interactions with the App Store using StoreKit.

StoreKit Documentation

Posts under StoreKit subtopic

Post

Replies

Boosts

Views

Activity

Subscription bundle & suite testing failure on XCode 27 Beta 3
I'm quite excited about the newly announced bundle and suite feature and trying to test the new Subscription Bundle type introduced in the recent Xcode Beta (using a local .storekit configuration file). I have set up: A local .storekit file. Inside it, I configured a Subscription Bundle with the ID "bundle". This bundle is linked to two internal auto-renewable subscriptions in the same file. The StoreKit configuration is active in my Scheme options. When I try to fetch a standard auto-renewable subscription ID, it works perfectly. However, when I try to fetch the "bundle" ID, the API returns successfully but with an empty array [] (no errors thrown). Is there a different way to query/fetch the new Subscription Bundle type in StoreKit 2, or is local testing for bundles not yet supported in the simulator in this beta? My sample code import StoreKit @MainActor class StoreManager: ObservableObject { @Published var products: [Product] = [] func fetchProducts() async { do { // "bundle" is defined in our local .storekit file as a SubscriptionBundle self.products = try await Product.products(for: ["bundle"]) print("Fetched products: \(self.products.map { $0.id })") } catch { print("Fetch error: \(error)") } } } struct ContentView: View { @StateObject private var store = StoreManager() var body: some View { VStack { if store.products.isEmpty { Text("Stuck Loading: Product not found.") } else { ForEach(store.products, id: \.id) { product in Text("Found: \(product.displayName) - \(product.displayPrice)") } } } .task { await store.task { await store.fetchProducts() } } } } My storekit "appPolicies" : { "eula" : "", "policies" : [ { "locale" : "en_US", "policyText" : "", "policyURL" : "" } ] }, "identifier" : "2B237494", "nonRenewingSubscriptions" : [ ], "products" : [ ], "settings" : { "_askToBuyEnabled" : false, "_billingGracePeriodEnabled" : false, "_billingIssuesEnabled" : false, "_disableDialogs" : false, "_failTransactionsEnabled" : false, "_locale" : "en_US", "_renewalBillingIssuesEnabled" : false, "_storefront" : "USA", "_storeKitErrors" : [ ], "_timeRate" : 0 }, "subscriptionBundleGroups" : [ { "id" : "EE1EB207", "localizations" : [ ], "name" : "bundle_group", "subscriptions" : [ { "displayPrice" : "0.99", "duration" : "P1M", "groupNumber" : 1, "internalID" : "84A95B47", "introductoryOffers" : [ { "billingPlanType" : "BILLED_UPFRONT", "internalID" : "DD9208A6", "numberOfPeriods" : 1, "paymentMode" : "free", "subscriptionPeriod" : "P1W" } ], "isFamilyShareable" : false, "linkedSubscriptions" : [ { "internal" : "D1A384C1" }, { "internal" : "01ABB5D2" } ], "localizations" : [ { "description" : "", "displayName" : "", "locale" : "en_US" } ], "productID" : "bundle", "referenceName" : "Awesome Bundle", "subscriptionGroupID" : "EE1EB207", "type" : "SubscriptionBundle" } ] } ], "subscriptionGroups" : [ { "id" : "84E94B59", "localizations" : [ ], "name" : "premium_group", "subscriptions" : [ { "adHocOffers" : [ ], "billingPlans" : [ { "billingPlanType" : "BILLED_UPFRONT", "commitmentDisplayPrice" : "1.99", "displayPrice" : "1.99", "internalID" : "21C9C75B", "isEnabled" : true } ], "codeOffers" : [ ], "displayPrice" : "1.99", "familyShareable" : false, "groupNumber" : 1, "internalID" : "D1A384C1", "introductoryOffer" : { "billingPlanType" : "BILLED_UPFRONT", "displayPrice" : "0.99", "internalID" : "F0651A66", "numberOfPeriods" : 1, "paymentMode" : "payUpFront", "subscriptionPeriod" : "P1M" }, "introductoryOffers" : [ { "billingPlanType" : "BILLED_UPFRONT", "displayPrice" : "0.99", "internalID" : "F0651A66", "numberOfPeriods" : 1, "paymentMode" : "payUpFront", "subscriptionPeriod" : "P1M" } ], "localizations" : [ { "description" : "", "displayName" : "", "locale" : "en_US" } ], "productID" : "premium_monthly", "recurringSubscriptionPeriod" : "P1M", "referenceName" : "premiume monthly", "subscriptionGroupID" : "84E94B59", "type" : "RecurringSubscription", "winbackOffers" : [ ] } ] }, { "id" : "39607B86", "localizations" : [ ], "name" : "basic_group", "subscriptions" : [ { "adHocOffers" : [ ], "billingPlans" : [ { "billingPlanType" : "BILLED_UPFRONT", "commitmentDisplayPrice" : "0.99", "displayPrice" : "0.99", "internalID" : "0FAC3C7D", "isEnabled" : true } ], "codeOffers" : [ ], "displayPrice" : "0.99", "familyShareable" : false, "groupNumber" : 1, "internalID" : "01ABB5D2", "introductoryOffers" : [ ], "localizations" : [ { "description" : "", "displayName" : "", "locale" : "en_US" } ], "productID" : "basic_monthly", "recurringSubscriptionPeriod" : "P1M", "referenceName" : "basic monthly", "subscriptionGroupID" : "39607B86", "type" : "RecurringSubscription", "winbackOffers" : [ ] } ] } ], "subscriptionSuiteGroups" : [ ], "version" : { "major" : 6, "minor" : 3 } }
0
0
409
Jul ’26
"Sandbox Apple Account" Developer Setting Does Not Work
I am trying to test a sandbox account for an in-app subscription. It will not work. When I try to check out in my app, I'm told... 2026-07-08 14:41:59.282977-0700 PlainSite[1364:48033] [Default] [StoreKit] Purchase did not return a transaction: Error Domain=ASDErrorDomain Code=500 "Unhandled exception" UserInfo={NSUnderlyingError=0x2835d21f0 {Error Domain=AMSErrorDomain Code=100 "Authentication Failed" UserInfo={NSMultipleUnderlyingErrorsKey=( "Error Domain=AMSErrorDomain Code=2 \"An unknown error occurred. Please try again.\" UserInfo={NSLocalizedDescription=An unknown error occurred. Please try again.}", "Error Domain=AMSServerErrorDomain Code=-5000 \"(null)\" UserInfo={failureType=-5000, m-allowed=false, pings=(\n), cancel-purchase-batch=true, customerMessage=Check the account information you entered and try again.}" ), NSLocalizedDescription=Authentication Failed, NSLocalizedFailureReason=The authentication failed.}}, NSLocalizedFailureReason=An unknown error occurred, NSLocalizedDescription=Unhandled exception} [CreateAccountView] purchaseForSignup threw: userCancelled This is false. The user (me) did not cancel. This is with me manually typing in the sandbox credentials as the Apple ID and password at the point of completing the transaction on both iOS 15 and iOS 26. So I try to make sure that my sandbox account is properly set in iOS 26's Settings -> Developer -> Sandbox Apple Account screen. It says Sign In. Then it says "Apple Account Sign in Requested". What does this actually mean? Who knows. It could mean my App Store Connect credentials are what it wants so that it can query which sandbox accounts are available to use—after all, that is where they are set up. It could also mean that you should type in the sandbox account's credentials directly because a sandbox account is basically a fake Apple ID. I try both. Neither works. No matter what I do, it just goes back to the Developer view and says "Sign In". Have I signed in? I don't know. Maybe, but probably not, given that nothing works. Is the problem that I didn't confirm the sandbox account's e-mail address? No. It doesn't work before or after I've confirmed the e-mail. Is the problem that I don't have two-factor authentication on for the sandbox account? No. It doesn't work whether or not two-factor authentication is enabled. I am not the only one having this problem. People on a certain Reddit thread I'm for some reason not allowed to link to here (sandbox_accounts_simulator_help) have been having it for the past year it looks like, except they got it to work on a real device, and I'm using an iPhone 17, which is a real device, and it doesn't work. This is the third bug in Apple's code I've found in the past couple of weeks that is preventing me from getting my app published and it's getting frustrating. Any assistance would be appreciated. Fix your code, Apple.
2
0
544
Jul ’26
Our sandbox accounts don't work now.
Our sandbox accounts don't work now. We are testing our IAP product now, so we need our sandbox accounts to be logged in, for purchaise test. Settings -> Developer -> Sandbox Apple Account screen - > log in : Not working Logged out status -> test app -> purchasing IAP product : Not working our 4 members of dev team have same problem now.
0
0
306
Jul ’26
Non-Consumable IAP stuck in ‘Developer Action Required’ – cannot link to version page
My Non-Consumable IAP was rejected with Guideline 3.1.1 and now has status ‘Developer Action Required’. The problem: On the version page in App Store Connect, the ‘In-App Purchases and Subscriptions’ section does not appear at the bottom. I cannot link the IAP to a new version submission. Every time I submit a new binary, Apple approves the app version but rejects the IAP afterward — even though I have no way to attach it to the version in the first place. This seems to be a circular issue: the IAP doesn’t appear on the version page because of its current status, but the only way to fix the status is to submit it with a new version. Has anyone experienced this and found a solution? Any help appreciated!​​​​​​​​​​​​​​​​
4
0
589
Jul ’26
SKTestSession configurations broken?
SKTestSession configurations seem to have been broken starting in Xcode 26.3. The release notes for iOS 26.5 indicate that it was supposed to be fixed there, but I still haven't been able to get it to work. Is there something that has changed recently about how SKTestSession configurations need to be used?
4
2
554
Jul ’26
Cannot load products in Sandbox
Hi, I'm trying to hook up some test in app purchases to test purchase code between our app and our app's backend. When I try to load products (requestProductData) with my Sandbox account, my product identifiers come back in the invalid product identifiers member of the response. My product says it's in "waiting for review" status in app store connect, and I'm logged in to the app store with my sandbox account on my device. We just accepted the paid apps agreement as well--is there some propagation time to that? The product ID I'm using (both in app store connect and in-app) is test_durable. Do I need to append the package name to that or something? I've dug through the docs and through the forums here and come up empty. I tried using the Xcode storekit test harness and the issue there is that because that doesn't actually talk to the store apis, I can't use that to test my backend correctly validating/processing the transactions. Thanks!
0
0
425
Jul ’26
StoreKit 2 returns no products for auto-renewable subscriptions in TestFlight
Hi everyone, I’m having an issue where my TestFlight build cannot load auto-renewable subscription products from App Store Connect. The app is built with Flutter and uses StoreKit 2 through an in-app purchase implementation. The same subscription system works correctly on Google Play Billing and returns product details/prices there, but on iOS StoreKit returns no subscription products. I tested this on a real iPhone installed from TestFlight, not from Xcode debug and not using a local StoreKit configuration. The app requests four auto-renewable subscription product IDs. The IDs in code exactly match the product IDs in App Store Connect. The app diagnostics show: Platform: iOS StoreKit mode: StoreKit 2 Store available: true Requested IDs: 4 subscription product IDs Returned IDs: none Missing IDs: all requested product IDs Error source: app_store Error code: storekit_no_response Error message: StoreKit: Failed to get response from platform. Store note: The store accepted the query, but did not return details for these product IDs. Things I have already checked: Product IDs match exactly between Flutter code and App Store Connect Bundle ID matches the App Store Connect app record In-App Purchase capability is enabled Subscriptions are in one subscription group Subscription availability is set for all countries/regions The TestFlight build is installed on a real device Local StoreKit configuration was removed StoreKit reports store availability as true App Store Connect / In-App Purchase keys are configured for backend verification The same product-loading flow works on Google Play The current App Store Connect status for the subscriptions is: Subscriptions: Ready to Submit / Ready for Review Localizations: Prepare for Submission Also, the bank information is not submitted yet. My question is: can StoreKit in TestFlight return subscription product details while the first auto-renewable subscriptions are still only “Ready to Submit” and have not yet been submitted with an app version for review? Or will StoreKit return no products until: The first subscriptions are attached to an app version and submitted for review Subscription localizations are fully prepared/submitted Paid agreements, tax, and banking are fully completed Since StoreKit is available and accepts the product query, but returns zero products, I’m trying to understand whether this is expected App Store Connect behavior or if there is another configuration issue I should check. Thanks.
1
0
825
Jun ’26
Your first subscription must be submitted with a new app version.
I have seen this problem arise from multiple sources. I am trying to submit my app but a new app version must be bundled with the subscription. The guide consistently says (copy pasted from the "Submit an In-App Purchase" guide) _"On the right, scroll down to the In-App Purchases and Subscriptions section. Click Select In-App Purchases or Subscriptions, or if you’ve already started selecting In-App Purchases or subscriptions, click Edit."_ The problem is there IS NO In-App Purchases or subscription section in the the app section. I have submitted again but at this point I'm loosing hope. I am hoping that adding a StoreKit config file this time on the Xcode side will help however again reading "submission (1)" does not give much hope. Please help as this has delayed launch by quite a lot.
0
0
340
Jun ’26
Can Product.products / SKProductsRequest be used only for display metadata when EU storefront uses ExternalPurchaseCustomLink only?
This is a StoreKit / ExternalPurchaseCustomLink clarification. Apple DTS asked me to post the follow-up question here. We are designing an SDK for apps that support EU external purchase. In EU storefronts, the app will use ExternalPurchaseCustomLink only: No App Store In-App Purchase will be offered to users. No Product.purchase() will be called. No SKPaymentQueue.add(_:) will be called. The actual purchase will happen only on our external website through the ExternalPurchaseCustomLink flow. Question: In this EU ExternalPurchaseCustomLink-only setup, is it acceptable and supported to call Product.products(for:) / SKProductsRequest only to fetch product display metadata from App Store Connect? The metadata would only be used to display the product list UI, for example: product title / display name localized price currency / priceLocale formatting information The returned Product / SKProduct would not be used to start an App Store purchase. Or should apps avoid Product.products(for:) / SKProductsRequest entirely in EU storefronts where only ExternalPurchaseCustomLink is offered, and use their own product catalog instead?
1
0
518
Jun ’26
IAP products not loading in sandbox after activating Paid Apps Agreement
I activated the Paid Apps Agreement today along with banking and tax information. My app uses react-native-purchases (RevenueCat) with StoreKit 2. When tapping purchase buttons in TestFlight I still get "Product not available - Could not load this product." Products show "Waiting for Review" in App Store Connect. Sandbox tester is configured. Is there a delay after activating the Paid Apps Agreement before sandbox purchases work? How long should I expect to wait?
0
0
336
Jun ’26
New auto-renewable subscription not appearing in sandbox (getOfferings/StoreKit returns 0) after re-creating the product — new app, not yet approved
I have a new app (first version, not yet approved) with one auto-renewable subscription. Earlier in development, the subscription loaded and I could complete a sandbox purchase (the StoreKit sheet showed "Sandbox", the price, and my sandbox account). To resolve an App Store Connect submission deadlock, I deleted that subscription and created a new one with a new Product ID. Since then, the new subscription does NOT appear in the sandbox: StoreKit returns no products, so getOfferings (via RevenueCat) returns 0 packages — both during App Review and on my own development build signed into a sandbox account. Configuration (all verified): Subscription is "Ready to Submit" / "Waiting for Review" Available in all territories Paid Apps Agreement active; banking and tax complete Bundle ID and shared secret unchanged from when it worked App Review keeps rejecting under Guideline 2.1(b) ("プレミアムをはじめる" / purchase button unresponsive) because the product never loads. Questions: For a newly created IAP on a not-yet-approved app, how long does it take to become available in the sandbox? Is there a known propagation delay (24h+)? Does re-creating the product with a new Product ID reset or delay sandbox availability? Is anything required for a new product to be served in the sandbox before the app's first version is approved? Any guidance appreciated. Thanks!
1
0
521
Jun ’26
Help with Subscriptions and Localization
Let me start by saying i found 1000s of posts for similar topic and nothing so far worked for me so im here now. This is the first im i developed an app with subscriptions now the problem im facing it is showing missing metadata on all subscriptions i created. inside there is no error just on localization section it shows "Prepare for Submission" and hovering it says i have to submit localization seperately. Now the question is there is no way to submit localization and no way to select subscription when im submitting app for review which i believe is for above reason. I have followed almost everything available online since yesterday from business to screenshots to notes nothing so far worked for me. Need your support to resolve this issue asap Thank you
1
0
558
Jun ’26
initConnection() from react-native-iap throws "undefined is not a function" in TestFlight build — StoreKit not connecting
Platform & Versions React Native: 0.85.3 Expo SDK: 56 react-native-iap: 15.3.3 iOS: 18.7.8 Device: iPhone 16 Pro Distribution: TestFlight (distribution: "store" via EAS Build) Problem In a TestFlight build (App Store distribution, not ad-hoc), calling initConnection() from react-native-iap throws a TypeError: "undefined is not a function" on iOS. This happens on every app launch. The error is caught in a try/catch around initConnection() and we never reach getSubscriptions() or purchaseUpdatedListener(). The app never connects to StoreKit. All IAP attempts fail immediately with "Store unavailable." What we've confirmed Sandbox tester account is configured in Settings → App Store → Sandbox Account "Allow Purchases & Renewals" is ON in the Sandbox Testing screen An active sandbox subscription exists (visible in Settings → App Store → Sandbox Account → Subscriptions), meaning StoreKit was reachable at some earlier point react-native-iap is listed in the Expo config plugins in app.json — EAS should be linking StoreKit.framework and adding the com.apple.developer.in-app-payments entitlement Built with --clear-cache to force a clean native project generation All 5 IAP product IDs (2 subscriptions, 3 consumables) are linked to the app version in App Store Connect and are in "Ready to Submit" state ITSAppUsesNonExemptEncryption is set to false in Info.plist Code try { await initConnection(); // throws "undefined is not a function" // never reaches here await getSubscriptions({ skus: ['com.smartailearning.iem.pro.yearly', 'com.smartailearning.iem.pro.monthly'] }); } catch (e) { console.error(e.message); // "undefined is not a function" } Question Is react-native-iap v15 incompatible with React Native 0.85 / Expo SDK 56 on iOS? Is there a known issue with the StoreKit native module not loading in EAS-managed builds? Should we be using StoreKit directly via a custom native module instead?
0
0
276
Jun ’26
First app release rejected because IAPs didn’t appear, and now the In-App Purchases section is missing from the app version page
I’m trying to submit the first release of my iOS app together with the app’s first consumable in-app purchases, and I’m stuck in what looks like an App Store Connect state issue. My app was already rejected by App Review because the in-app purchases did not appear inside the app when the reviewer opened the paywall. Current setup: First app release Current app version page: iOS App Version 1.0.2 Current attached build: 5 App has never been released before 4 consumable IAPs: com.glowup.credits.100 com.glowup.credits.500 com.glowup.credits.1000 com.glowup.credits.2500 What I see in App Store Connect: All 4 IAPs show Waiting for Review On the iOS App Version 1.0.2 page, the In-App Purchases and Subscriptions section does not appear at all Because of that, I cannot explicitly select or attach the IAPs from the version page What I’ve already done: Uploaded a new build and attached build 5 to version 1.0.2 Removed my local StoreKit configuration file so the app now uses live App Store / StoreKit only Confirmed RevenueCat is configured correctly and sees the offering/packages RevenueCat logs show the products exist remotely, but StoreKit cannot fetch any live products and returns an “offerings empty / none of the products could be fetched” type error RevenueCat also reports the products are still in WAITING_FOR_REVIEW My questions: If the IAPs already show Waiting for Review, are they automatically linked to the current app submission? Is it expected that the In-App Purchases and Subscriptions section can disappear from the app version page in this state? For a first-release app that was already rejected, is attaching a new build and clicking Update Review enough, or is there another step required to associate the IAPs with the resubmission? Has anyone seen App Review reject an app for missing IAPs while the IAPs were still pending review and not yet fetchable from StoreKit? Any guidance from someone who has dealt with this exact first-release + first-IAP submission flow would help a lot.
2
0
745
Jun ’26
StoreKit returns 0 subscriptions on TestFlight — Apple IAP payment sheet never opens (Capacitor + RevenueCat)
Hello, I'm developing a Capacitor/Next.js iOS app with RevenueCat for auto-renewable subscriptions. On a real iPhone via TestFlight, StoreKit never returns my subscription products, so the Apple payment sheet never appears. App TestFlight builds tested: 110, 111, 112 (iOS 1.1.0) In-App Purchase capability enabled on App ID Paid Applications Agreement: active Banking/tax: active Subscription product IDs (auto-renewable, same subscription group) vytalai_premium_monthly vytalai_premium_yearly vytalai_premium_yearly_intro (exit offer) What happens Install app from TestFlight on physical iPhone Navigate to paywall App calls RevenueCat → Purchases.getProducts() with the 3 product IDs above StoreKit returns 0 products (or configure/getProducts times out) UI shows: "Apple Store: 0 subscriptions on this device — Sandbox popup cannot open" Tapping subscribe does not open the Apple payment sheet Fallback prices appear (3.49 / 29.99) instead of live App Store prices (3,49 € / 29,99 €), which suggests StoreKit is not returning products. What we already verified Correct bundle ID in build metadata NEXT_PUBLIC_REVENUECAT_API_KEY_IOS (appl_*) embedded in EAS production build Provisioning profile regenerated and active Subscription metadata corrected (was Rejected, now Waiting for Review) All 3 subscriptions attached to app version submission RevenueCat offering "default" with monthly, annual, and annual_intro packages App Store Server Notifications URL configured to RevenueCat Legal pages open in-app (no external cookie banner on native) Testing on TestFlight only (not Safari/web) App Review context We received Guideline 2.1(b) rejections because: Error on purchase page Exit offer (50% OFF / €1.91 per month equivalent) referenced product vytalai_premium_yearly_intro which was not submitted for review initially — now added and submitted with the app version. Question Even with subscriptions in "Waiting for Review" state and metadata completed, should StoreKit Sandbox/TestFlight return these products on device so we can test the payment sheet before approval? If not, what exact App Store Connect state is required for StoreKit to return products on TestFlight? Any guidance on why getProducts would return 0 for valid product IDs on a TestFlight build would be greatly appreciated. Thank you.
2
0
702
Jun ’26
StoreKit purchase cancelled after app backgrounding during bank authentication (3D Secure)
Hello, We are experiencing an issue with StoreKit purchases on iOS. Some users are required by their bank to complete an additional authentication step (3D Secure / banking app validation) during an in-app purchase subscription flow. The purchase starts correctly and StoreKit displays the purchase sheet. When the user temporarily leaves the app to validate the payment in their banking application and then returns, StoreKit eventually reports the purchase as cancelled. No transaction is delivered to StoreKit observers, no entitlement becomes active, and restoring purchases does not find any completed transaction. Steps to reproduce: Open the app. Start an auto-renewable subscription purchase using StoreKit. Authenticate with Apple ID if requested. When the bank authentication screen appears, leave the app and open the banking application. Approve the payment in the banking application. Return to the original app. Observed result: StoreKit reports the purchase as cancelled and no transaction is received. Expected result: The transaction should continue processing after bank authentication and eventually complete successfully. Environment: Xcode 26.3 (17C529) macOS Tahoe 26.3 iOS 26.2.1 Physical iPhone device Question: Is this expected StoreKit behavior when a user leaves the app for external banking authentication, or is there a recommended StoreKit integration pattern that should allow the purchase flow to continue successfully? Thank you.
12
0
938
Jun ’26
Apple Age Restriction API -
https://developer.apple.com/documentation/declaredagerange/ https://developer.apple.com/documentation/declaredagerange/agerangeservice/requiredregulatoryfeatures For these API, (1) How is Apple determining the user is in Texas? IP or Address on the account? (2) How do we know if an API is active. Testing today (6/18) we are seeing both false in a region/state where the law is now in effect. (3) How will we know when Apple adds more regions to the API enablement? Is there a communication channel for this?
0
0
266
Jun ’26
Subscription bundle & suite testing failure on XCode 27 Beta 3
I'm quite excited about the newly announced bundle and suite feature and trying to test the new Subscription Bundle type introduced in the recent Xcode Beta (using a local .storekit configuration file). I have set up: A local .storekit file. Inside it, I configured a Subscription Bundle with the ID "bundle". This bundle is linked to two internal auto-renewable subscriptions in the same file. The StoreKit configuration is active in my Scheme options. When I try to fetch a standard auto-renewable subscription ID, it works perfectly. However, when I try to fetch the "bundle" ID, the API returns successfully but with an empty array [] (no errors thrown). Is there a different way to query/fetch the new Subscription Bundle type in StoreKit 2, or is local testing for bundles not yet supported in the simulator in this beta? My sample code import StoreKit @MainActor class StoreManager: ObservableObject { @Published var products: [Product] = [] func fetchProducts() async { do { // "bundle" is defined in our local .storekit file as a SubscriptionBundle self.products = try await Product.products(for: ["bundle"]) print("Fetched products: \(self.products.map { $0.id })") } catch { print("Fetch error: \(error)") } } } struct ContentView: View { @StateObject private var store = StoreManager() var body: some View { VStack { if store.products.isEmpty { Text("Stuck Loading: Product not found.") } else { ForEach(store.products, id: \.id) { product in Text("Found: \(product.displayName) - \(product.displayPrice)") } } } .task { await store.task { await store.fetchProducts() } } } } My storekit "appPolicies" : { "eula" : "", "policies" : [ { "locale" : "en_US", "policyText" : "", "policyURL" : "" } ] }, "identifier" : "2B237494", "nonRenewingSubscriptions" : [ ], "products" : [ ], "settings" : { "_askToBuyEnabled" : false, "_billingGracePeriodEnabled" : false, "_billingIssuesEnabled" : false, "_disableDialogs" : false, "_failTransactionsEnabled" : false, "_locale" : "en_US", "_renewalBillingIssuesEnabled" : false, "_storefront" : "USA", "_storeKitErrors" : [ ], "_timeRate" : 0 }, "subscriptionBundleGroups" : [ { "id" : "EE1EB207", "localizations" : [ ], "name" : "bundle_group", "subscriptions" : [ { "displayPrice" : "0.99", "duration" : "P1M", "groupNumber" : 1, "internalID" : "84A95B47", "introductoryOffers" : [ { "billingPlanType" : "BILLED_UPFRONT", "internalID" : "DD9208A6", "numberOfPeriods" : 1, "paymentMode" : "free", "subscriptionPeriod" : "P1W" } ], "isFamilyShareable" : false, "linkedSubscriptions" : [ { "internal" : "D1A384C1" }, { "internal" : "01ABB5D2" } ], "localizations" : [ { "description" : "", "displayName" : "", "locale" : "en_US" } ], "productID" : "bundle", "referenceName" : "Awesome Bundle", "subscriptionGroupID" : "EE1EB207", "type" : "SubscriptionBundle" } ] } ], "subscriptionGroups" : [ { "id" : "84E94B59", "localizations" : [ ], "name" : "premium_group", "subscriptions" : [ { "adHocOffers" : [ ], "billingPlans" : [ { "billingPlanType" : "BILLED_UPFRONT", "commitmentDisplayPrice" : "1.99", "displayPrice" : "1.99", "internalID" : "21C9C75B", "isEnabled" : true } ], "codeOffers" : [ ], "displayPrice" : "1.99", "familyShareable" : false, "groupNumber" : 1, "internalID" : "D1A384C1", "introductoryOffer" : { "billingPlanType" : "BILLED_UPFRONT", "displayPrice" : "0.99", "internalID" : "F0651A66", "numberOfPeriods" : 1, "paymentMode" : "payUpFront", "subscriptionPeriod" : "P1M" }, "introductoryOffers" : [ { "billingPlanType" : "BILLED_UPFRONT", "displayPrice" : "0.99", "internalID" : "F0651A66", "numberOfPeriods" : 1, "paymentMode" : "payUpFront", "subscriptionPeriod" : "P1M" } ], "localizations" : [ { "description" : "", "displayName" : "", "locale" : "en_US" } ], "productID" : "premium_monthly", "recurringSubscriptionPeriod" : "P1M", "referenceName" : "premiume monthly", "subscriptionGroupID" : "84E94B59", "type" : "RecurringSubscription", "winbackOffers" : [ ] } ] }, { "id" : "39607B86", "localizations" : [ ], "name" : "basic_group", "subscriptions" : [ { "adHocOffers" : [ ], "billingPlans" : [ { "billingPlanType" : "BILLED_UPFRONT", "commitmentDisplayPrice" : "0.99", "displayPrice" : "0.99", "internalID" : "0FAC3C7D", "isEnabled" : true } ], "codeOffers" : [ ], "displayPrice" : "0.99", "familyShareable" : false, "groupNumber" : 1, "internalID" : "01ABB5D2", "introductoryOffers" : [ ], "localizations" : [ { "description" : "", "displayName" : "", "locale" : "en_US" } ], "productID" : "basic_monthly", "recurringSubscriptionPeriod" : "P1M", "referenceName" : "basic monthly", "subscriptionGroupID" : "39607B86", "type" : "RecurringSubscription", "winbackOffers" : [ ] } ] } ], "subscriptionSuiteGroups" : [ ], "version" : { "major" : 6, "minor" : 3 } }
Replies
0
Boosts
0
Views
409
Activity
Jul ’26
"Sandbox Apple Account" Developer Setting Does Not Work
I am trying to test a sandbox account for an in-app subscription. It will not work. When I try to check out in my app, I'm told... 2026-07-08 14:41:59.282977-0700 PlainSite[1364:48033] [Default] [StoreKit] Purchase did not return a transaction: Error Domain=ASDErrorDomain Code=500 "Unhandled exception" UserInfo={NSUnderlyingError=0x2835d21f0 {Error Domain=AMSErrorDomain Code=100 "Authentication Failed" UserInfo={NSMultipleUnderlyingErrorsKey=( "Error Domain=AMSErrorDomain Code=2 \"An unknown error occurred. Please try again.\" UserInfo={NSLocalizedDescription=An unknown error occurred. Please try again.}", "Error Domain=AMSServerErrorDomain Code=-5000 \"(null)\" UserInfo={failureType=-5000, m-allowed=false, pings=(\n), cancel-purchase-batch=true, customerMessage=Check the account information you entered and try again.}" ), NSLocalizedDescription=Authentication Failed, NSLocalizedFailureReason=The authentication failed.}}, NSLocalizedFailureReason=An unknown error occurred, NSLocalizedDescription=Unhandled exception} [CreateAccountView] purchaseForSignup threw: userCancelled This is false. The user (me) did not cancel. This is with me manually typing in the sandbox credentials as the Apple ID and password at the point of completing the transaction on both iOS 15 and iOS 26. So I try to make sure that my sandbox account is properly set in iOS 26's Settings -> Developer -> Sandbox Apple Account screen. It says Sign In. Then it says "Apple Account Sign in Requested". What does this actually mean? Who knows. It could mean my App Store Connect credentials are what it wants so that it can query which sandbox accounts are available to use—after all, that is where they are set up. It could also mean that you should type in the sandbox account's credentials directly because a sandbox account is basically a fake Apple ID. I try both. Neither works. No matter what I do, it just goes back to the Developer view and says "Sign In". Have I signed in? I don't know. Maybe, but probably not, given that nothing works. Is the problem that I didn't confirm the sandbox account's e-mail address? No. It doesn't work before or after I've confirmed the e-mail. Is the problem that I don't have two-factor authentication on for the sandbox account? No. It doesn't work whether or not two-factor authentication is enabled. I am not the only one having this problem. People on a certain Reddit thread I'm for some reason not allowed to link to here (sandbox_accounts_simulator_help) have been having it for the past year it looks like, except they got it to work on a real device, and I'm using an iPhone 17, which is a real device, and it doesn't work. This is the third bug in Apple's code I've found in the past couple of weeks that is preventing me from getting my app published and it's getting frustrating. Any assistance would be appreciated. Fix your code, Apple.
Replies
2
Boosts
0
Views
544
Activity
Jul ’26
Our sandbox accounts don't work now.
Our sandbox accounts don't work now. We are testing our IAP product now, so we need our sandbox accounts to be logged in, for purchaise test. Settings -> Developer -> Sandbox Apple Account screen - > log in : Not working Logged out status -> test app -> purchasing IAP product : Not working our 4 members of dev team have same problem now.
Replies
0
Boosts
0
Views
306
Activity
Jul ’26
Our sandbox accounts don't work now.
Our sandbox accounts don't work now. We are testing our IAP product now, so we needed our sandbox accounts to be logged in, for purchaise test. Settings -> Developer -> Sandbox Apple Account screen - > log in : Not working Logged out status -> test app -> purchasing IAP product : Not working our 4 members of dev team have same problem now.
Replies
0
Boosts
0
Views
412
Activity
Jul ’26
Non-Consumable IAP stuck in ‘Developer Action Required’ – cannot link to version page
My Non-Consumable IAP was rejected with Guideline 3.1.1 and now has status ‘Developer Action Required’. The problem: On the version page in App Store Connect, the ‘In-App Purchases and Subscriptions’ section does not appear at the bottom. I cannot link the IAP to a new version submission. Every time I submit a new binary, Apple approves the app version but rejects the IAP afterward — even though I have no way to attach it to the version in the first place. This seems to be a circular issue: the IAP doesn’t appear on the version page because of its current status, but the only way to fix the status is to submit it with a new version. Has anyone experienced this and found a solution? Any help appreciated!​​​​​​​​​​​​​​​​
Replies
4
Boosts
0
Views
589
Activity
Jul ’26
SKTestSession configurations broken?
SKTestSession configurations seem to have been broken starting in Xcode 26.3. The release notes for iOS 26.5 indicate that it was supposed to be fixed there, but I still haven't been able to get it to work. Is there something that has changed recently about how SKTestSession configurations need to be used?
Replies
4
Boosts
2
Views
554
Activity
Jul ’26
Referrer System at Subscriptions
Hi, I want to develop a referral system for my subscribers. If someone suggests my app and his/her friend buy a subscription I want to give the referrer a one-month free subscription or extend the existing subscription to one month for free. Is it possible to do this with offer codes?
Replies
3
Boosts
0
Views
1.1k
Activity
Jul ’26
Cannot load products in Sandbox
Hi, I'm trying to hook up some test in app purchases to test purchase code between our app and our app's backend. When I try to load products (requestProductData) with my Sandbox account, my product identifiers come back in the invalid product identifiers member of the response. My product says it's in "waiting for review" status in app store connect, and I'm logged in to the app store with my sandbox account on my device. We just accepted the paid apps agreement as well--is there some propagation time to that? The product ID I'm using (both in app store connect and in-app) is test_durable. Do I need to append the package name to that or something? I've dug through the docs and through the forums here and come up empty. I tried using the Xcode storekit test harness and the issue there is that because that doesn't actually talk to the store apis, I can't use that to test my backend correctly validating/processing the transactions. Thanks!
Replies
0
Boosts
0
Views
425
Activity
Jul ’26
How to manage TestFlight subscriptions on macOS?
I purchased a subscription within my TestFlight macOS build. I would like to access a screen to manage subscriptions and cancel it. How can I do that? I can't find this screen. In the App Store app I can only see my personal purchases.
Replies
1
Boosts
0
Views
904
Activity
Jul ’26
StoreKit 2 returns no products for auto-renewable subscriptions in TestFlight
Hi everyone, I’m having an issue where my TestFlight build cannot load auto-renewable subscription products from App Store Connect. The app is built with Flutter and uses StoreKit 2 through an in-app purchase implementation. The same subscription system works correctly on Google Play Billing and returns product details/prices there, but on iOS StoreKit returns no subscription products. I tested this on a real iPhone installed from TestFlight, not from Xcode debug and not using a local StoreKit configuration. The app requests four auto-renewable subscription product IDs. The IDs in code exactly match the product IDs in App Store Connect. The app diagnostics show: Platform: iOS StoreKit mode: StoreKit 2 Store available: true Requested IDs: 4 subscription product IDs Returned IDs: none Missing IDs: all requested product IDs Error source: app_store Error code: storekit_no_response Error message: StoreKit: Failed to get response from platform. Store note: The store accepted the query, but did not return details for these product IDs. Things I have already checked: Product IDs match exactly between Flutter code and App Store Connect Bundle ID matches the App Store Connect app record In-App Purchase capability is enabled Subscriptions are in one subscription group Subscription availability is set for all countries/regions The TestFlight build is installed on a real device Local StoreKit configuration was removed StoreKit reports store availability as true App Store Connect / In-App Purchase keys are configured for backend verification The same product-loading flow works on Google Play The current App Store Connect status for the subscriptions is: Subscriptions: Ready to Submit / Ready for Review Localizations: Prepare for Submission Also, the bank information is not submitted yet. My question is: can StoreKit in TestFlight return subscription product details while the first auto-renewable subscriptions are still only “Ready to Submit” and have not yet been submitted with an app version for review? Or will StoreKit return no products until: The first subscriptions are attached to an app version and submitted for review Subscription localizations are fully prepared/submitted Paid agreements, tax, and banking are fully completed Since StoreKit is available and accepts the product query, but returns zero products, I’m trying to understand whether this is expected App Store Connect behavior or if there is another configuration issue I should check. Thanks.
Replies
1
Boosts
0
Views
825
Activity
Jun ’26
Your first subscription must be submitted with a new app version.
I have seen this problem arise from multiple sources. I am trying to submit my app but a new app version must be bundled with the subscription. The guide consistently says (copy pasted from the "Submit an In-App Purchase" guide) _"On the right, scroll down to the In-App Purchases and Subscriptions section. Click Select In-App Purchases or Subscriptions, or if you’ve already started selecting In-App Purchases or subscriptions, click Edit."_ The problem is there IS NO In-App Purchases or subscription section in the the app section. I have submitted again but at this point I'm loosing hope. I am hoping that adding a StoreKit config file this time on the Xcode side will help however again reading "submission (1)" does not give much hope. Please help as this has delayed launch by quite a lot.
Replies
0
Boosts
0
Views
340
Activity
Jun ’26
Can Product.products / SKProductsRequest be used only for display metadata when EU storefront uses ExternalPurchaseCustomLink only?
This is a StoreKit / ExternalPurchaseCustomLink clarification. Apple DTS asked me to post the follow-up question here. We are designing an SDK for apps that support EU external purchase. In EU storefronts, the app will use ExternalPurchaseCustomLink only: No App Store In-App Purchase will be offered to users. No Product.purchase() will be called. No SKPaymentQueue.add(_:) will be called. The actual purchase will happen only on our external website through the ExternalPurchaseCustomLink flow. Question: In this EU ExternalPurchaseCustomLink-only setup, is it acceptable and supported to call Product.products(for:) / SKProductsRequest only to fetch product display metadata from App Store Connect? The metadata would only be used to display the product list UI, for example: product title / display name localized price currency / priceLocale formatting information The returned Product / SKProduct would not be used to start an App Store purchase. Or should apps avoid Product.products(for:) / SKProductsRequest entirely in EU storefronts where only ExternalPurchaseCustomLink is offered, and use their own product catalog instead?
Replies
1
Boosts
0
Views
518
Activity
Jun ’26
IAP products not loading in sandbox after activating Paid Apps Agreement
I activated the Paid Apps Agreement today along with banking and tax information. My app uses react-native-purchases (RevenueCat) with StoreKit 2. When tapping purchase buttons in TestFlight I still get "Product not available - Could not load this product." Products show "Waiting for Review" in App Store Connect. Sandbox tester is configured. Is there a delay after activating the Paid Apps Agreement before sandbox purchases work? How long should I expect to wait?
Replies
0
Boosts
0
Views
336
Activity
Jun ’26
New auto-renewable subscription not appearing in sandbox (getOfferings/StoreKit returns 0) after re-creating the product — new app, not yet approved
I have a new app (first version, not yet approved) with one auto-renewable subscription. Earlier in development, the subscription loaded and I could complete a sandbox purchase (the StoreKit sheet showed "Sandbox", the price, and my sandbox account). To resolve an App Store Connect submission deadlock, I deleted that subscription and created a new one with a new Product ID. Since then, the new subscription does NOT appear in the sandbox: StoreKit returns no products, so getOfferings (via RevenueCat) returns 0 packages — both during App Review and on my own development build signed into a sandbox account. Configuration (all verified): Subscription is "Ready to Submit" / "Waiting for Review" Available in all territories Paid Apps Agreement active; banking and tax complete Bundle ID and shared secret unchanged from when it worked App Review keeps rejecting under Guideline 2.1(b) ("プレミアムをはじめる" / purchase button unresponsive) because the product never loads. Questions: For a newly created IAP on a not-yet-approved app, how long does it take to become available in the sandbox? Is there a known propagation delay (24h+)? Does re-creating the product with a new Product ID reset or delay sandbox availability? Is anything required for a new product to be served in the sandbox before the app's first version is approved? Any guidance appreciated. Thanks!
Replies
1
Boosts
0
Views
521
Activity
Jun ’26
Help with Subscriptions and Localization
Let me start by saying i found 1000s of posts for similar topic and nothing so far worked for me so im here now. This is the first im i developed an app with subscriptions now the problem im facing it is showing missing metadata on all subscriptions i created. inside there is no error just on localization section it shows "Prepare for Submission" and hovering it says i have to submit localization seperately. Now the question is there is no way to submit localization and no way to select subscription when im submitting app for review which i believe is for above reason. I have followed almost everything available online since yesterday from business to screenshots to notes nothing so far worked for me. Need your support to resolve this issue asap Thank you
Replies
1
Boosts
0
Views
558
Activity
Jun ’26
initConnection() from react-native-iap throws "undefined is not a function" in TestFlight build — StoreKit not connecting
Platform & Versions React Native: 0.85.3 Expo SDK: 56 react-native-iap: 15.3.3 iOS: 18.7.8 Device: iPhone 16 Pro Distribution: TestFlight (distribution: "store" via EAS Build) Problem In a TestFlight build (App Store distribution, not ad-hoc), calling initConnection() from react-native-iap throws a TypeError: "undefined is not a function" on iOS. This happens on every app launch. The error is caught in a try/catch around initConnection() and we never reach getSubscriptions() or purchaseUpdatedListener(). The app never connects to StoreKit. All IAP attempts fail immediately with "Store unavailable." What we've confirmed Sandbox tester account is configured in Settings → App Store → Sandbox Account "Allow Purchases & Renewals" is ON in the Sandbox Testing screen An active sandbox subscription exists (visible in Settings → App Store → Sandbox Account → Subscriptions), meaning StoreKit was reachable at some earlier point react-native-iap is listed in the Expo config plugins in app.json — EAS should be linking StoreKit.framework and adding the com.apple.developer.in-app-payments entitlement Built with --clear-cache to force a clean native project generation All 5 IAP product IDs (2 subscriptions, 3 consumables) are linked to the app version in App Store Connect and are in "Ready to Submit" state ITSAppUsesNonExemptEncryption is set to false in Info.plist Code try { await initConnection(); // throws "undefined is not a function" // never reaches here await getSubscriptions({ skus: ['com.smartailearning.iem.pro.yearly', 'com.smartailearning.iem.pro.monthly'] }); } catch (e) { console.error(e.message); // "undefined is not a function" } Question Is react-native-iap v15 incompatible with React Native 0.85 / Expo SDK 56 on iOS? Is there a known issue with the StoreKit native module not loading in EAS-managed builds? Should we be using StoreKit directly via a custom native module instead?
Replies
0
Boosts
0
Views
276
Activity
Jun ’26
First app release rejected because IAPs didn’t appear, and now the In-App Purchases section is missing from the app version page
I’m trying to submit the first release of my iOS app together with the app’s first consumable in-app purchases, and I’m stuck in what looks like an App Store Connect state issue. My app was already rejected by App Review because the in-app purchases did not appear inside the app when the reviewer opened the paywall. Current setup: First app release Current app version page: iOS App Version 1.0.2 Current attached build: 5 App has never been released before 4 consumable IAPs: com.glowup.credits.100 com.glowup.credits.500 com.glowup.credits.1000 com.glowup.credits.2500 What I see in App Store Connect: All 4 IAPs show Waiting for Review On the iOS App Version 1.0.2 page, the In-App Purchases and Subscriptions section does not appear at all Because of that, I cannot explicitly select or attach the IAPs from the version page What I’ve already done: Uploaded a new build and attached build 5 to version 1.0.2 Removed my local StoreKit configuration file so the app now uses live App Store / StoreKit only Confirmed RevenueCat is configured correctly and sees the offering/packages RevenueCat logs show the products exist remotely, but StoreKit cannot fetch any live products and returns an “offerings empty / none of the products could be fetched” type error RevenueCat also reports the products are still in WAITING_FOR_REVIEW My questions: If the IAPs already show Waiting for Review, are they automatically linked to the current app submission? Is it expected that the In-App Purchases and Subscriptions section can disappear from the app version page in this state? For a first-release app that was already rejected, is attaching a new build and clicking Update Review enough, or is there another step required to associate the IAPs with the resubmission? Has anyone seen App Review reject an app for missing IAPs while the IAPs were still pending review and not yet fetchable from StoreKit? Any guidance from someone who has dealt with this exact first-release + first-IAP submission flow would help a lot.
Replies
2
Boosts
0
Views
745
Activity
Jun ’26
StoreKit returns 0 subscriptions on TestFlight — Apple IAP payment sheet never opens (Capacitor + RevenueCat)
Hello, I'm developing a Capacitor/Next.js iOS app with RevenueCat for auto-renewable subscriptions. On a real iPhone via TestFlight, StoreKit never returns my subscription products, so the Apple payment sheet never appears. App TestFlight builds tested: 110, 111, 112 (iOS 1.1.0) In-App Purchase capability enabled on App ID Paid Applications Agreement: active Banking/tax: active Subscription product IDs (auto-renewable, same subscription group) vytalai_premium_monthly vytalai_premium_yearly vytalai_premium_yearly_intro (exit offer) What happens Install app from TestFlight on physical iPhone Navigate to paywall App calls RevenueCat → Purchases.getProducts() with the 3 product IDs above StoreKit returns 0 products (or configure/getProducts times out) UI shows: "Apple Store: 0 subscriptions on this device — Sandbox popup cannot open" Tapping subscribe does not open the Apple payment sheet Fallback prices appear (3.49 / 29.99) instead of live App Store prices (3,49 € / 29,99 €), which suggests StoreKit is not returning products. What we already verified Correct bundle ID in build metadata NEXT_PUBLIC_REVENUECAT_API_KEY_IOS (appl_*) embedded in EAS production build Provisioning profile regenerated and active Subscription metadata corrected (was Rejected, now Waiting for Review) All 3 subscriptions attached to app version submission RevenueCat offering "default" with monthly, annual, and annual_intro packages App Store Server Notifications URL configured to RevenueCat Legal pages open in-app (no external cookie banner on native) Testing on TestFlight only (not Safari/web) App Review context We received Guideline 2.1(b) rejections because: Error on purchase page Exit offer (50% OFF / €1.91 per month equivalent) referenced product vytalai_premium_yearly_intro which was not submitted for review initially — now added and submitted with the app version. Question Even with subscriptions in "Waiting for Review" state and metadata completed, should StoreKit Sandbox/TestFlight return these products on device so we can test the payment sheet before approval? If not, what exact App Store Connect state is required for StoreKit to return products on TestFlight? Any guidance on why getProducts would return 0 for valid product IDs on a TestFlight build would be greatly appreciated. Thank you.
Replies
2
Boosts
0
Views
702
Activity
Jun ’26
StoreKit purchase cancelled after app backgrounding during bank authentication (3D Secure)
Hello, We are experiencing an issue with StoreKit purchases on iOS. Some users are required by their bank to complete an additional authentication step (3D Secure / banking app validation) during an in-app purchase subscription flow. The purchase starts correctly and StoreKit displays the purchase sheet. When the user temporarily leaves the app to validate the payment in their banking application and then returns, StoreKit eventually reports the purchase as cancelled. No transaction is delivered to StoreKit observers, no entitlement becomes active, and restoring purchases does not find any completed transaction. Steps to reproduce: Open the app. Start an auto-renewable subscription purchase using StoreKit. Authenticate with Apple ID if requested. When the bank authentication screen appears, leave the app and open the banking application. Approve the payment in the banking application. Return to the original app. Observed result: StoreKit reports the purchase as cancelled and no transaction is received. Expected result: The transaction should continue processing after bank authentication and eventually complete successfully. Environment: Xcode 26.3 (17C529) macOS Tahoe 26.3 iOS 26.2.1 Physical iPhone device Question: Is this expected StoreKit behavior when a user leaves the app for external banking authentication, or is there a recommended StoreKit integration pattern that should allow the purchase flow to continue successfully? Thank you.
Replies
12
Boosts
0
Views
938
Activity
Jun ’26
Apple Age Restriction API -
https://developer.apple.com/documentation/declaredagerange/ https://developer.apple.com/documentation/declaredagerange/agerangeservice/requiredregulatoryfeatures For these API, (1) How is Apple determining the user is in Texas? IP or Address on the account? (2) How do we know if an API is active. Testing today (6/18) we are seeing both false in a region/state where the law is now in effect. (3) How will we know when Apple adds more regions to the API enablement? Is there a communication channel for this?
Replies
0
Boosts
0
Views
266
Activity
Jun ’26