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

StoreKit External Purchases or Offers entitlement missing from macOS provisioning profile
Hey We are implementing EU external purchases for both our iOS and native macOS apps as it's written here: https://developer.apple.com/br/support/payment-options-on-the-app-store-in-the-eu For our App ID, we enabled StoreKit External Purchases or Offers, whose entitlement key is: com.apple.developer.storekit.custom-purchase-link.allowed-regions The capability works for iOS, but newly generated macOS provisioning profiles do not contain this entitlement. In Certificates, Identifiers & Profiles, the capability itself shows Platform Support: iOS, tvOS, watchOS, visionOS - macOS is not listed. However, the StoreKit documentation for ExternalPurchaseCustomLink and the EU alternative-payment documentation appear to describe external-purchase support more generally. Could you please clarify: Is com.apple.developer.storekit.custom-purchase-link.allowed-regions currently supported for native macOS apps distributed through the Mac App Store? If not, what entitlement and API should a native macOS app use for EU external purchases and external-purchase token reporting? Is macOS support for the StoreKit External Purchases or Offers entitlement planned or available through a separate entitlement request? At the moment, our macOS provisioning profiles cannot contain this entitlement because macOS is not listed as a supported platform for this capability. Thank you!
0
0
511
1w
StoreKit returns 0 products for 6 valid subscriptions in TestFlight
I am troubleshooting a reproducible StoreKit product discovery issue in a TestFlight build of my iOS application. App: Bundle ID: com.aileguvende.app Version: 2.9.59 Build: 97 On a physical iPhone using the TestFlight build, opening the subscription/paywall screen reproduces the issue. StoreKit availability is true and canMakePayments is true, but Product.products(for:) requests six auto-renewable subscription identifiers and returns: Requested products: 6 Returned products: 0 Not found products: 6 The query reports product_query_error with the plugin error code storekit_no_response. No purchase or Restore operation is required to reproduce the issue. The applicable TN3186 checks completed successfully: the App ID is explicit, In-App Purchase capability is enabled, the bundle ID and signing profile match, all six product identifiers match App Store Connect, all six products are available in Türkiye, pricing is configured, Turkish and English localizations are present, and the Paid Apps Agreement, banking, and tax information are active. The Apple Account and storefront are Türkiye. During the same runtime window, storekitd and appstored activity was observed and AMSErrorDomain activity was present, but no reliable native numeric error code or native product counts were exposed. CLIENT_PLUGIN_DEFECT_PROVEN=NO OFFICIAL_APPLE_INCIDENT_CONFIRMED=NO Feedback Assistant report: FB24793792. Could Apple engineers please verify: Whether the six subscriptions are present in the TestFlight/Sandbox commerce catalog for com.aileguvende.app. Whether the app-to-subscription catalog association is healthy on Apple’s backend. Whether there is a current StoreKit/App Store Commerce product-discovery issue where Product.products(for:) returns an empty result despite TN3186 checks passing. Whether any additional diagnostic is needed for FB24793792. This issue is reproducible without a transaction. I am not requesting a source-code change or a new build.
1
0
116
1w
StoreKit says purchase succeeded but didn't, AppStore.sync() throws error Unable to Complete Request
One user of my app reached out reporting an interesting in-app purchase issue. Has anyone encountered this or have an idea what's going on here? Proceed to purchase the non-consumable IAP in the app downloaded from the App Store iOS shows the price sheet as expected Confirm with the side button iOS shows an alert "You've already purchased this. Would you like to get it again for free?" Tap OK iOS shows an alert "You're all set. Your purchase was successful." Tap OK The app's content remains locked Tap Restore Purchases iOS shows an alert to sign (with the same account shown in step 2) Input the password and tap OK iOS shows an alert "Unable to Complete Request" (which is the error.localizedDescription thrown from AppStore.sync())
3
0
260
1w
StoreKit Sandbox refund sheet consistently shows “Cannot Connect” — FB24527792
We are seeing a consistently reproducible StoreKit Sandbox issue involving Apple’s refund request sheet. Our app uses: Transaction.beginRefundRequest(for:) The refund sheet is successfully presented, but instead of loading the refund reason form, the Apple-provided sheet consistently displays: “Cannot Connect” This prevents the Sandbox refund request from being submitted. Environment: App: BTY Norebang Admin iOS: 26.6.1 Physical iPhone StoreKit environment: Sandbox Product type: Consumable Product: BTY Room – 1 Hour Development-signed build We have confirmed: Normal consumable purchase succeeds Transaction retrieval succeeds beginRefundRequest successfully presents Apple’s refund sheet App Store Server API calls succeed App Store Server Notifications V2 TEST delivery succeeds Get Test Notification Status reports sendAttemptResult = SUCCESS The problem persists after rebooting the device The problem persists after signing out and back into the Sandbox Apple Account Different network conditions have been tested The issue reproduces in an isolated Xcode/StoreKit test project with no BTY backend, authentication, or app networking dependency Expected behavior: The Sandbox refund request sheet should load the refund reason selection and allow the refund request to be submitted. Actual behavior: The Apple-provided refund sheet opens but displays “Cannot Connect.” No refund is submitted and no App Store Server Notification V2 REFUND event is generated. Feedback Assistant report: FB24527792 The Feedback Assistant report includes sysdiagnose and relevant diagnostic logs. This is currently the only remaining external blocker preventing us from completing full and prorated Sandbox refund end-to-end validation before enabling Production App Store Server Notifications. Could an Apple StoreKit / App Store Commerce engineer confirm whether this is a known Sandbox issue or advise whether any additional configuration or diagnostic information is required? We can provide a focused reproduction Xcode project, additional sysdiagnose logs, and Sandbox transaction details if needed.
0
0
130
1w
StoreKit 2 currentEntitlements persists after Sandbox Purchase History reset in TestFlight
I am testing a StoreKit 2 non-consumable IAP through TestFlight. Product ID: com.metabolla.plus.lifetime Type: Non-Consumable Environment: TestFlight / Sandbox Transaction.currentEntitlements keeps returning an active entitlement for this product even after: configuring a Sandbox Apple Account clearing Sandbox Purchase History reinstalling the app rebooting the device Important detail: the first TestFlight purchase was completed before configuring the Sandbox Apple Account on the device. If I temporarily change the Product ID in code, the entitlement disappears, so the issue seems tied to the original Product ID/account/receipt. Question: Can a non-consumable TestFlight purchase made before Sandbox Apple Account configuration remain associated with the original TestFlight/Apple ID identity? Is there any supported way to clear this entitlement for testing?
5
1
1.3k
1w
AppStore.sync throws StoreKitError.unknown in TestFlight on iOS 26.6.2 (FB24795995)
I am investigating a repeatable StoreKit 2 restore failure in SommPal, TestFlight 1.0.0 (20), on a physical iPhone running iOS 26.6.2. Feedback report FB24795995 has been submitted with attachments. An explicit user tap calls try await AppStore.sync(). Apple presents an Apple Account password prompt. The tester enters the password for the displayed account and presses OK; no visible authentication error appears. The call then throws typed StoreKitError.unknown, bridged as NSError domain StoreKit.StoreKitError, code 2. Traversal through NSUnderlyingErrorKey exposes no nested cause. This is not SKErrorDomain code 2, and we are not interpreting it as user cancellation. The tester reports Media & Purchases signed out and a dedicated Sandbox Apple Account configured under Developer settings. The prompt displays the personal Apple Account rather than the dedicated sandbox account. Sandbox subscription management loads successfully. Controlled tests on September 15, 2026: Isolated refresh on Wi-Fi: same unknown error. Normal Restore: available purchases are independently verified by our server and annual access remains active, but explicit Apple sync fails. Isolated refresh on cellular: same error. Full iPhone restart, then isolated refresh on cellular: same error. The isolated test serializes app-initiated StoreKit operations and waits for previous operations to finish. It skips local transaction recovery and acknowledgement before calling sync. Native Transaction.updates observation remains active; we have not isolated Apple internal work. Our native probe imports only Foundation and StoreKit and directly calls AppStore.sync(). It catches StoreKitError.userCancelled separately, then classifies other typed StoreKitError cases and records safe NSError domain/code values. The application uses React Native/Expo with our own Swift bridge. The isolated action performs a server permission check before entering the native restore method. Native entitlements are enumerated only if sync succeeds; the isolated action does not acknowledge or finish transactions. The failure occurs at sync, before that enumeration. We retain signature, ownership and expiration verification. Valid access is not removed solely because sync fails. A previous application-account ownership conflict was separately identified; using the rightful application account restores access but does not resolve this sync failure. We have prepared a dependency-free SwiftUI/Xcode sample containing the same probe, but it has not yet been compiled or tested as a standalone app. We have not reproduced on a second physical device. Automated error-mapping tests pass but do not establish that real Apple authentication works. We are not claiming a confirmed iOS defect. What supported diagnostic step, logging profile, call context, or integration change would help distinguish an integration problem from an account/device/service issue? Is the personal-account prompt expected in this TestFlight configuration? Additional private diagnostics can be supplied through FB24795995. The attached screenshot shows the isolated failure after restarting the iPhone.
0
0
137
1w
TestFlight sandbox: iTunes account creation not allowed during app sign-in / purchase testing
We are testing version 1.0 Build 29 through TestFlight after a Guideline 2.1(b) rejection: Purchase did not respond on iPad Air 11-inch (M3). Paid Apps Agreement is Active, and subscription price, availability, localization and review screenshot are present. Restores worked, but a fresh purchase is not yet verified. On iPhone 13, Build 29 is installed, Developer Mode is on, and Media & Purchases was signed out. The tester reports signing into Developer > Sandbox Apple Account, then trying to sign into the app. During this sequence an email verification prompt was followed by: "iTunes account creation not allowed. This Apple account cannot be used with iTunes Store at this time. Please try again later." The app uses Sign in with Apple separately from StoreKit. We have not isolated which system authentication flow produced the error. What is the supported sequence for regular iCloud/Sign in with Apple alongside a Sandbox Apple Account for TestFlight purchases? Which diagnostics distinguish account setup failure from app authentication or StoreKit failure? Should we escalate through Feedback Assistant or Developer Support, and which logs should accompany the report? We want to verify a fresh purchase on an 11-inch iPad before resubmission.
0
0
123
1w
In-App Purchase product not returned by StoreKit despite complete, correct configuration
App name: Hold My Bouquet Bundle ID: com.holdmybouquet.app App Store Connect App ID: 6807080553 In-App Purchase Product ID: com.holdmybouquet.app.page_unlock (Non-Consumable, £3.99) Our app was rejected on Guideline 2.1 because the reviewer could not complete this in-app purchase. Since the rejection, we have verified and corrected every configuration item we can control, but the purchase still fails identically in sandbox testing on a physical device. Confirmed correct: Paid Applications Agreement: Active com.holdmybouquet.app.page_unlock: status "Ready to Submit," Cleared for Sale, pricing and availability set Bundle ID matches exactly across Xcode, App Store Connect, and our purchase provider (RevenueCat) Product ID matches exactly, no typos or case mismatches Sandbox tester account verified and signed in on-device (Settings → Developer → Sandbox Account) No local StoreKit Configuration file overriding real data (confirmed "None" in the Xcode scheme) To rule out our purchase provider entirely, we bypassed it and called Apple's native StoreKit 2 API directly from the app: let products = try await Product.products(for: ["com.holdmybouquet.app.page_unlock"]) This also returns zero products, with no error — confirming the issue is not a third-party SDK integration problem. Has anyone seen this before, or can anyone from Apple advise what else to check? We are otherwise ready to resubmit for review.
2
0
283
1w
Approved in-app purchase not available in production — StoreKit returns no product (live app, all TN3188 checks pass)
Live App Store app; approved non-consumable in-app purchase is not returned by production StoreKit, so customers cannot buy it. Product.products(for:) returns nothing; the paywall shows "purchases aren't available." ~15 days since first release (2026-07-06). Reproduced on two devices with two different Apple IDs. A redeemed promo code also did not deliver it. Important: my IAP status is APPROVED (not "Waiting for Review"), so this differs from some recent threads — yet the product still isn't served in production. Verified per TN3188 (all pass): product ID matches App Store Connect exactly; status Approved; Availability = all 175 regions; priced (base USD); listed on the public App Store product page; Paid Apps Agreement, banking, and tax forms all Active; no local .storekit config in the build; the product returns correctly from our provider's (RevenueCat) servers, so the empty result is specifically the on-device production StoreKit fetch. This coincides with the recent App Store Connect incident affecting in-app-purchase submission, and there's a cluster of similar reports this week (threads 838171, 838435, 835770, and "In-App Subscriptions stuck in 'Waiting for Review' after App Store Connect maintenance"). It looks like a server-side issue where the product never propagated to production StoreKit despite showing Approved. Environment: Expo/EAS, React Native 0.81, StoreKit 2 via react-native-purchases 10.3.0. Devices: iPhone 15 Pro Max (iOS 27.0), iPhone 16 Pro Max (iOS 26.5). Open Developer Support case: 102936978821. Is there any developer-side step remaining, or does this require Apple to re-process / re-propagate the product server-side? Any guidance appreciated.
1
2
521
2w
Introductory Offer Start Timing
Hi everyone, I set up an auto-renewable subscription introductory offer in App Store Connect with a scheduled start date of September 7 for the Philippines storefront. According to the documentation App Store pricing and availability start times by country or region, scheduled pricing and offer updates are expected to go live based on local regional times. However, the offer did not show up in the Current Introductory Offers in app store connect portal at the documented start time (14:00 Sep 6th UTC). Instead, it stayed in the Upcoming Offers until 7:00 Sep 7th UTC which is 17 hours after the time in the doc. We met a similar situation a few days later when we launch another introductory offer in Thailand. I would appreciate clarification on the following points: What is the underlying reason for the discrepancy between the documented start time behavior and the actual start time observed in production? Can Apple update the App Store pricing and availability start times by country or region reference documentation so that it accurately reflects the practical start time and propagation window for each region? Any insights or shared experiences with offer scheduling in the APAC region would be greatly appreciated.
0
0
207
2w
Advanced Commerce API support for native macOS apps
Hello, We are considering using the Advanced Commerce API for a native macOS app distributed through the Mac App Store. Our use case is a base auto-renewable subscription with optional subscription add-ons (e.g. Effects and Templates). The Advanced Commerce API eligibility page lists Mac Catalyst, but does not explicitly list native macOS. However, the macOS 15.4 release notes mention support for Advanced Commerce API purchases in StoreKit. Could someone please clarify: Is Advanced Commerce API supported for native macOS App Store apps (not Mac Catalyst), including subscriptions with optional add-ons? Does it support introductory free trials, e.g. a 3-day free trial for the base subscription? Can existing auto-renewable subscription subscribers be migrated to Advanced Commerce API and then purchase optional add-ons as part of the same subscription? Many thanks!
0
0
89
2w
Is receiving the same transaction multiple times from Transaction.updates expected behavior?
I'm seeing behavior similar to what was reported in this thread: https://developer.apple.com/forums/thread/816344 I read the discussion in the related thread (816320) as well, but I couldn't determine whether receiving the same transaction multiple times from Transaction.updates is considered expected behavior. In my case, I'm testing an auto-renewable subscription in the Sandbox environment. After successfully processing and calling finish() on a transaction, Transaction.updates sometimes provides another transaction with the same transactionId. I've also observed the same transactionId being delivered multiple times through Transaction.updates itself. I compared the JWS representations of these transactions. They are not byte-for-byte identical, but the transaction information appears to be the same. The only differences I've identified are: signedDate deviceVerificationNonce deviceVerification This looks as though the same transaction is being signed again at a different time. I'd like to clarify the intended way to handle this: Is it expected behavior for Transaction.updates to deliver the same transactionId multiple times in this way? If so, after an app has successfully processed and finished a transaction, is it safe to recognize subsequent transactions with the same transactionId as already processed, skip entitlement-related processing, and simply call finish() on them? In other words, can an app use transactionId to prevent duplicate processing of transactions that it has already successfully handled? I'm specifically interested in whether doing so could cause the app to miss any meaningful update that StoreKit might later deliver using the same transactionId.
2
0
556
2w
How to cancel Auto-renewable subscription bought in TestFlight?
I've read several topics on cancelling subscriptions in sandbox environment, but it seems to me that it could not be applied to TestFlight. I can cancel sandbox subscriptions through Settings > App Store > Sandbox account But since TestFlight does not use sandbox account I cannot cancel a sub from there. Also, TF purchase does not appear in the list of regular subscriptions (Settings > Profile > Media & Purchases). So my question is: is there any way to manually cancel auto-renewable subscription bought in TestFlight build of the app?
11
7
9.6k
2w
Sandbox allows free trial again on resubscribe to the same subscription
Title: Sandbox allows free trial again on resubscribe to the same subscription Hi everyone, I'm testing an auto-renewable subscription using App Store Connect with a Sandbox tester (not a local StoreKit configuration file). My subscription has an introductory free trial configured. Scenario: Purchase the subscription for the first time using a Sandbox Apple ID. The user receives the introductory free trial as expected. Let the subscription expire. Purchase the same subscription product again using the same Sandbox Apple ID. I receive an App Store Server Notification with Notification Type = RESUBSCRIBE, and the transaction appears to have a price of 0, making it look like the user received another free trial. From Apple's documentation, my understanding is that an introductory offer can only be redeemed once per subscription group per Apple ID. Based on that, I expected the second purchase to be charged immediately rather than receive another free trial. My questions are: Is this expected behavior in the Sandbox environment? Does Sandbox sometimes allow introductory offers to be redeemed multiple times for testing? Or am I misinterpreting the RESUBSCRIBE notification and the $0 transaction? I did not intentionally reset the Sandbox tester's introductory offer eligibility, and I'm purchasing the same product in the same subscription group with the same Sandbox Apple ID. Has anyone observed this behavior or can clarify whether this is expected in Sandbox versus production? Thanks!
1
0
478
3w
TestFlight 沙盒中 StoreKit 2 的 `Product.products(for:)` 对两个非消耗型内购持续返回空数组
大家好,我正在排查一个 TestFlight 沙盒环境中的 StoreKit 2 商品加载问题,希望获得建议。 一、现象 iOS App 通过 TestFlight 安装(Build 4)后,使用 Product.products(for:) 请求两个非消耗型内购项目。调用不会抛出错误,但始终返回空数组,因此购买页没有任何可购买商品。 products = try await Product.products(for: [ "com.shidan.qieting.plus.trial.7day", "com.shidan.qieting.plus.lifetime" ]).sorted { $0.id < $1.id } 两个 Product ID 分别为: Product ID 类型 价格 App Store Connect 状态 com.shidan.qieting.plus.trial.7day 非消耗型 Tier 0 / US$0.00 可供审核 com.shidan.qieting.plus.lifetime 非消耗型 US$5.99 可供审核 二、日志 在 TestFlight App 冷启动后,诊断日志记录: 2026-09-03T08:12:08Z [settings] plus products loaded: trialAvailable=false, lifetimeAvailable=false 打开购买页时再次调用,结果仍然为空。没有捕获到 StoreKit 异常,也没有购买流程报错。 三、系统级沙盒验证结果 为排除 App UI 和 StoreKit 商品加载代码的影响,我们还使用同一开发团队创建的 Sandbox Apple Account,在 iOS 的“设置 > 开发者 > Sandbox Apple Account > 管理 > Test Transactions”中直接测试: Bundle ID:com.shidan.qieting Product ID:com.shidan.qieting.plus.lifetime 系统提示:“提供的产品 ID 或套装 ID 无效”。该工具不经过 App 内的购买页或 Product.products(for:) 结果,仍无法识别这组 Bundle ID 与 Product ID。 四、已完成核验 代码中的 Product ID 与 App Store Connect 中的 Product ID 完全一致。 Release Bundle ID 与 App Store Connect App Record 一致,均为 com.shidan.qieting。 App ID 为显式 ID,不是 wildcard App ID。 Certificates, Identifiers & Profiles 中已启用 In-App Purchase capability;Xcode Target 也已启用,Xcode Cloud 使用自动签名。 TestFlight 使用 Archive 构建;共享 Scheme 的 ArchiveAction 没有 StoreKit Configuration 文件。本地 .storekit 文件只用于 Xcode Run/Test,本身不影响 Archive/TestFlight。 两个项目均已设置价格、175 个 App Store 地区可售,以及简体中文、繁体中文、英语本地化。 最后一次修改 IAP 元数据已经超过 48 小时。 Paid Apps Agreement、税务信息和银行信息均为有效/正在使用中。 尚未提交 App 或 IAP 审核;理解为 TestFlight 沙盒测试不应以提交审核为前提。 欧盟《数字服务法》(DSA)交易商合规信息仍在审核中;但该要求针对欧盟 App Store 产品页的交易商信息。Apple 官方说明中,单独通过 TestFlight 分发不属于在欧盟 App Store 以交易商身份分发,因此这不应影响 TestFlight 沙盒或 Test Transactions。 五、想请教 在上述条件已确认、Product.products(for:) 不报错却返回 [] 的情况下,是否还有容易遗漏的 App Store Connect、沙盒、签名或 TestFlight 配置? 是否有人遇到过“所有 Product ID 均正确、商品完整且全球可售,但 TestFlight 沙盒始终返回空数组”的情况?如果这是 Apple 沙盒端的已知延迟或异常,有什么进一步的排查或反馈渠道? 我可以按需要补充已打码的 App Store Connect 配置截图和完整诊断日志。谢谢。
3
0
598
3w
In-App Purchase key returns 401 (4010000) on Advanced Commerce API but 200/404 on App Store Server API
Environment: Sandbox Bundle ID: com.fosssocial.app Key ID: L7DZYHGM62 Issuer ID: cf1f7bc7-452f-4bb8-a925-31ca29175fac Summary Our In-App Purchase key is accepted by the App Store Server API but rejected by the Advanced Commerce API, using the exact same bearer token. This appears to be an authorization grant that was never applied to the key, rather than a signing or request-format problem on our side. Reproduction — one token, two API families GET /inApps/v1/subscriptions/1 -> 404, errorCode 4040010 (token ACCEPTED, resource simply not found) POST /advancedCommerce/v1/subscription/changeMetadata/1 -> 401, errorCode 4010000 (token REJECTED) Same JWT, same key, issued seconds apart. A 401 on one family and a 404 on the other isolates this to key authorization. On-device symptom A signed SubscriptionCreateRequest passed to StoreKit as advancedCommerceData fails with StoreKitError.unknown / "Unable to Complete Request". No payment sheet appears and no InvalidRequestError is returned, so there is no field-level error to act on. What we have already verified JWS header: alg ES256, kid, typ JWT Claims: iss, iat, aud "advanced-commerce-api", bid, nonce, request No exp claim (per Apple's documentation) The request claim uses standard padded base64, not base64url Key ID and .p8 file confirmed to be a matching pair Key regenerated after receiving the Advanced Commerce access-granted email; the 401 is unchanged AdvancedCommerceProduct(id:) resolves successfully on device, which confirms the PRODUCT has Advanced Commerce access Question Does the In-App Purchase key require a separate authorization for the Advanced Commerce API beyond the product-level access we were granted? If so, how is that applied to an existing key?
0
0
212
3w
Build behaving differently in testflight compared to simulator
Hi all I have an app I’m pretty much done with, and on the Xcode simulator it works perfectly and the IAP shows us when the purchase buttons are clicked but for some reason when it goes to testflight none of the buttons respond, is there any reason that would cause it to behave differently in testflight when its coded correctly and works in the simulator. thanks
0
0
282
3w
Trials entering billing retry instead of converting
We have a monthly subscription and an annual subscription with a 3-day free trial. The monthly converts fine. On the annual, trials tend to enter billing retry rather than convert — users don't cancel, the charge just fails. We've audited our implementation and found nothing on our side that participates in the renewal charge. What can a developer actually do about this? Does trial length, price point, or using a paid introductory offer instead of a free trial make a difference?
0
0
116
3w
Does sandbox testing require consumable IAPs to be fully approved, or just attached to a pending submission?
We have 5 consumable in-app purchase products (Product IDs: localshadows_support_099, _499, _999, _2499, _4999) currently in "Prepare for Submission" status. Our app's first version (1.0) has also not yet been submitted for App Review. Question: Does sandbox testing of these consumable IAPs require the app to be fully approved through App Review first, or is it sufficient for the products to be attached to a version that has been submitted (even if still pending review)? What we've tried: We're using react-native-iap v16.4.1 for a real native StoreKit 2 purchase flow (not RevenueCat, which was masking this issue via its Test Store simulation mode). Calling fetchProducts() for these SKUs returns an empty array, and calling requestPurchase() for them results in an indefinite hang with no error. We want to complete sandbox testing before deciding on our actual App Review submission timeline.
2
0
354
3w
StoreKit Sandbox returns 0 products after TN3186 checks — catalog association issue?
We are testing two auto-renewable subscriptions for a new iOS app. In Apple Sandbox, StoreKit 2 Product.products(for:) always returns an empty array. Legacy SKProductsRequest independently reports both identifiers as invalid. Environment: Physical iPhone, iOS 26.5 Xcode development build with automatic signing Storefront.current = USA (143441) canMakePayments = true No StoreKit Configuration file in the Run scheme Direct native StoreKit 2 diagnostics, without a third-party purchase SDK TN3186 checks completed: Explicit Bundle ID matches the App Store Connect app, installed app, and provisioning profile In-App Purchase is enabled for the App ID Developer membership, Paid Apps Agreement, banking, and tax are active One subscription group with monthly and yearly subscriptions is visible Pricing, localizations, and availability are configured Neither subscription is Rejected or Developer Action Needed The scheme is using real Sandbox data, not local StoreKit testing Results: StoreKit 2 batch query: rawCount = 0 SKProductsRequest: valid = []; both identifiers are invalid StoreKit 2 individual monthly query: 0 StoreKit 2 individual yearly query: 0 No exception; failure occurs during product discovery Related reports: https://developer.apple.com/forums/thread/839313 — TN3186 verified and USA storefront valid, but still 0 products; no replies https://developer.apple.com/forums/thread/841722 — Apple Commerce mentioned Rejected or Developer Action Needed states; ours have neither https://developer.apple.com/forums/thread/820656 — Apple DTS confirmed first subscriptions do not require review before Sandbox testing Apple Developer Support referred us to TN3186, and we verified every applicable item. The individual subscription detail route in App Store Connect also intermittently remains on a loading indicator although the group and both records are visible. Could an App Store Commerce or StoreKit engineer check whether the app-to-IAP catalog association is populated correctly on Apple's side, or advise an official escalation path to have the Sandbox catalog reprocessed? Exact account, app, product, device, email, and support-case identifiers are omitted from this public post and can be supplied privately through Apple Support or Feedback Assistant.
0
0
295
3w
StoreKit External Purchases or Offers entitlement missing from macOS provisioning profile
Hey We are implementing EU external purchases for both our iOS and native macOS apps as it's written here: https://developer.apple.com/br/support/payment-options-on-the-app-store-in-the-eu For our App ID, we enabled StoreKit External Purchases or Offers, whose entitlement key is: com.apple.developer.storekit.custom-purchase-link.allowed-regions The capability works for iOS, but newly generated macOS provisioning profiles do not contain this entitlement. In Certificates, Identifiers & Profiles, the capability itself shows Platform Support: iOS, tvOS, watchOS, visionOS - macOS is not listed. However, the StoreKit documentation for ExternalPurchaseCustomLink and the EU alternative-payment documentation appear to describe external-purchase support more generally. Could you please clarify: Is com.apple.developer.storekit.custom-purchase-link.allowed-regions currently supported for native macOS apps distributed through the Mac App Store? If not, what entitlement and API should a native macOS app use for EU external purchases and external-purchase token reporting? Is macOS support for the StoreKit External Purchases or Offers entitlement planned or available through a separate entitlement request? At the moment, our macOS provisioning profiles cannot contain this entitlement because macOS is not listed as a supported platform for this capability. Thank you!
Replies
0
Boosts
0
Views
511
Activity
1w
StoreKit returns 0 products for 6 valid subscriptions in TestFlight
I am troubleshooting a reproducible StoreKit product discovery issue in a TestFlight build of my iOS application. App: Bundle ID: com.aileguvende.app Version: 2.9.59 Build: 97 On a physical iPhone using the TestFlight build, opening the subscription/paywall screen reproduces the issue. StoreKit availability is true and canMakePayments is true, but Product.products(for:) requests six auto-renewable subscription identifiers and returns: Requested products: 6 Returned products: 0 Not found products: 6 The query reports product_query_error with the plugin error code storekit_no_response. No purchase or Restore operation is required to reproduce the issue. The applicable TN3186 checks completed successfully: the App ID is explicit, In-App Purchase capability is enabled, the bundle ID and signing profile match, all six product identifiers match App Store Connect, all six products are available in Türkiye, pricing is configured, Turkish and English localizations are present, and the Paid Apps Agreement, banking, and tax information are active. The Apple Account and storefront are Türkiye. During the same runtime window, storekitd and appstored activity was observed and AMSErrorDomain activity was present, but no reliable native numeric error code or native product counts were exposed. CLIENT_PLUGIN_DEFECT_PROVEN=NO OFFICIAL_APPLE_INCIDENT_CONFIRMED=NO Feedback Assistant report: FB24793792. Could Apple engineers please verify: Whether the six subscriptions are present in the TestFlight/Sandbox commerce catalog for com.aileguvende.app. Whether the app-to-subscription catalog association is healthy on Apple’s backend. Whether there is a current StoreKit/App Store Commerce product-discovery issue where Product.products(for:) returns an empty result despite TN3186 checks passing. Whether any additional diagnostic is needed for FB24793792. This issue is reproducible without a transaction. I am not requesting a source-code change or a new build.
Replies
1
Boosts
0
Views
116
Activity
1w
StoreKit says purchase succeeded but didn't, AppStore.sync() throws error Unable to Complete Request
One user of my app reached out reporting an interesting in-app purchase issue. Has anyone encountered this or have an idea what's going on here? Proceed to purchase the non-consumable IAP in the app downloaded from the App Store iOS shows the price sheet as expected Confirm with the side button iOS shows an alert "You've already purchased this. Would you like to get it again for free?" Tap OK iOS shows an alert "You're all set. Your purchase was successful." Tap OK The app's content remains locked Tap Restore Purchases iOS shows an alert to sign (with the same account shown in step 2) Input the password and tap OK iOS shows an alert "Unable to Complete Request" (which is the error.localizedDescription thrown from AppStore.sync())
Replies
3
Boosts
0
Views
260
Activity
1w
StoreKit Sandbox refund sheet consistently shows “Cannot Connect” — FB24527792
We are seeing a consistently reproducible StoreKit Sandbox issue involving Apple’s refund request sheet. Our app uses: Transaction.beginRefundRequest(for:) The refund sheet is successfully presented, but instead of loading the refund reason form, the Apple-provided sheet consistently displays: “Cannot Connect” This prevents the Sandbox refund request from being submitted. Environment: App: BTY Norebang Admin iOS: 26.6.1 Physical iPhone StoreKit environment: Sandbox Product type: Consumable Product: BTY Room – 1 Hour Development-signed build We have confirmed: Normal consumable purchase succeeds Transaction retrieval succeeds beginRefundRequest successfully presents Apple’s refund sheet App Store Server API calls succeed App Store Server Notifications V2 TEST delivery succeeds Get Test Notification Status reports sendAttemptResult = SUCCESS The problem persists after rebooting the device The problem persists after signing out and back into the Sandbox Apple Account Different network conditions have been tested The issue reproduces in an isolated Xcode/StoreKit test project with no BTY backend, authentication, or app networking dependency Expected behavior: The Sandbox refund request sheet should load the refund reason selection and allow the refund request to be submitted. Actual behavior: The Apple-provided refund sheet opens but displays “Cannot Connect.” No refund is submitted and no App Store Server Notification V2 REFUND event is generated. Feedback Assistant report: FB24527792 The Feedback Assistant report includes sysdiagnose and relevant diagnostic logs. This is currently the only remaining external blocker preventing us from completing full and prorated Sandbox refund end-to-end validation before enabling Production App Store Server Notifications. Could an Apple StoreKit / App Store Commerce engineer confirm whether this is a known Sandbox issue or advise whether any additional configuration or diagnostic information is required? We can provide a focused reproduction Xcode project, additional sysdiagnose logs, and Sandbox transaction details if needed.
Replies
0
Boosts
0
Views
130
Activity
1w
StoreKit 2 currentEntitlements persists after Sandbox Purchase History reset in TestFlight
I am testing a StoreKit 2 non-consumable IAP through TestFlight. Product ID: com.metabolla.plus.lifetime Type: Non-Consumable Environment: TestFlight / Sandbox Transaction.currentEntitlements keeps returning an active entitlement for this product even after: configuring a Sandbox Apple Account clearing Sandbox Purchase History reinstalling the app rebooting the device Important detail: the first TestFlight purchase was completed before configuring the Sandbox Apple Account on the device. If I temporarily change the Product ID in code, the entitlement disappears, so the issue seems tied to the original Product ID/account/receipt. Question: Can a non-consumable TestFlight purchase made before Sandbox Apple Account configuration remain associated with the original TestFlight/Apple ID identity? Is there any supported way to clear this entitlement for testing?
Replies
5
Boosts
1
Views
1.3k
Activity
1w
AppStore.sync throws StoreKitError.unknown in TestFlight on iOS 26.6.2 (FB24795995)
I am investigating a repeatable StoreKit 2 restore failure in SommPal, TestFlight 1.0.0 (20), on a physical iPhone running iOS 26.6.2. Feedback report FB24795995 has been submitted with attachments. An explicit user tap calls try await AppStore.sync(). Apple presents an Apple Account password prompt. The tester enters the password for the displayed account and presses OK; no visible authentication error appears. The call then throws typed StoreKitError.unknown, bridged as NSError domain StoreKit.StoreKitError, code 2. Traversal through NSUnderlyingErrorKey exposes no nested cause. This is not SKErrorDomain code 2, and we are not interpreting it as user cancellation. The tester reports Media & Purchases signed out and a dedicated Sandbox Apple Account configured under Developer settings. The prompt displays the personal Apple Account rather than the dedicated sandbox account. Sandbox subscription management loads successfully. Controlled tests on September 15, 2026: Isolated refresh on Wi-Fi: same unknown error. Normal Restore: available purchases are independently verified by our server and annual access remains active, but explicit Apple sync fails. Isolated refresh on cellular: same error. Full iPhone restart, then isolated refresh on cellular: same error. The isolated test serializes app-initiated StoreKit operations and waits for previous operations to finish. It skips local transaction recovery and acknowledgement before calling sync. Native Transaction.updates observation remains active; we have not isolated Apple internal work. Our native probe imports only Foundation and StoreKit and directly calls AppStore.sync(). It catches StoreKitError.userCancelled separately, then classifies other typed StoreKitError cases and records safe NSError domain/code values. The application uses React Native/Expo with our own Swift bridge. The isolated action performs a server permission check before entering the native restore method. Native entitlements are enumerated only if sync succeeds; the isolated action does not acknowledge or finish transactions. The failure occurs at sync, before that enumeration. We retain signature, ownership and expiration verification. Valid access is not removed solely because sync fails. A previous application-account ownership conflict was separately identified; using the rightful application account restores access but does not resolve this sync failure. We have prepared a dependency-free SwiftUI/Xcode sample containing the same probe, but it has not yet been compiled or tested as a standalone app. We have not reproduced on a second physical device. Automated error-mapping tests pass but do not establish that real Apple authentication works. We are not claiming a confirmed iOS defect. What supported diagnostic step, logging profile, call context, or integration change would help distinguish an integration problem from an account/device/service issue? Is the personal-account prompt expected in this TestFlight configuration? Additional private diagnostics can be supplied through FB24795995. The attached screenshot shows the isolated failure after restarting the iPhone.
Replies
0
Boosts
0
Views
137
Activity
1w
TestFlight sandbox: iTunes account creation not allowed during app sign-in / purchase testing
We are testing version 1.0 Build 29 through TestFlight after a Guideline 2.1(b) rejection: Purchase did not respond on iPad Air 11-inch (M3). Paid Apps Agreement is Active, and subscription price, availability, localization and review screenshot are present. Restores worked, but a fresh purchase is not yet verified. On iPhone 13, Build 29 is installed, Developer Mode is on, and Media & Purchases was signed out. The tester reports signing into Developer > Sandbox Apple Account, then trying to sign into the app. During this sequence an email verification prompt was followed by: "iTunes account creation not allowed. This Apple account cannot be used with iTunes Store at this time. Please try again later." The app uses Sign in with Apple separately from StoreKit. We have not isolated which system authentication flow produced the error. What is the supported sequence for regular iCloud/Sign in with Apple alongside a Sandbox Apple Account for TestFlight purchases? Which diagnostics distinguish account setup failure from app authentication or StoreKit failure? Should we escalate through Feedback Assistant or Developer Support, and which logs should accompany the report? We want to verify a fresh purchase on an 11-inch iPad before resubmission.
Replies
0
Boosts
0
Views
123
Activity
1w
In-App Purchase product not returned by StoreKit despite complete, correct configuration
App name: Hold My Bouquet Bundle ID: com.holdmybouquet.app App Store Connect App ID: 6807080553 In-App Purchase Product ID: com.holdmybouquet.app.page_unlock (Non-Consumable, £3.99) Our app was rejected on Guideline 2.1 because the reviewer could not complete this in-app purchase. Since the rejection, we have verified and corrected every configuration item we can control, but the purchase still fails identically in sandbox testing on a physical device. Confirmed correct: Paid Applications Agreement: Active com.holdmybouquet.app.page_unlock: status "Ready to Submit," Cleared for Sale, pricing and availability set Bundle ID matches exactly across Xcode, App Store Connect, and our purchase provider (RevenueCat) Product ID matches exactly, no typos or case mismatches Sandbox tester account verified and signed in on-device (Settings → Developer → Sandbox Account) No local StoreKit Configuration file overriding real data (confirmed "None" in the Xcode scheme) To rule out our purchase provider entirely, we bypassed it and called Apple's native StoreKit 2 API directly from the app: let products = try await Product.products(for: ["com.holdmybouquet.app.page_unlock"]) This also returns zero products, with no error — confirming the issue is not a third-party SDK integration problem. Has anyone seen this before, or can anyone from Apple advise what else to check? We are otherwise ready to resubmit for review.
Replies
2
Boosts
0
Views
283
Activity
1w
Approved in-app purchase not available in production — StoreKit returns no product (live app, all TN3188 checks pass)
Live App Store app; approved non-consumable in-app purchase is not returned by production StoreKit, so customers cannot buy it. Product.products(for:) returns nothing; the paywall shows "purchases aren't available." ~15 days since first release (2026-07-06). Reproduced on two devices with two different Apple IDs. A redeemed promo code also did not deliver it. Important: my IAP status is APPROVED (not "Waiting for Review"), so this differs from some recent threads — yet the product still isn't served in production. Verified per TN3188 (all pass): product ID matches App Store Connect exactly; status Approved; Availability = all 175 regions; priced (base USD); listed on the public App Store product page; Paid Apps Agreement, banking, and tax forms all Active; no local .storekit config in the build; the product returns correctly from our provider's (RevenueCat) servers, so the empty result is specifically the on-device production StoreKit fetch. This coincides with the recent App Store Connect incident affecting in-app-purchase submission, and there's a cluster of similar reports this week (threads 838171, 838435, 835770, and "In-App Subscriptions stuck in 'Waiting for Review' after App Store Connect maintenance"). It looks like a server-side issue where the product never propagated to production StoreKit despite showing Approved. Environment: Expo/EAS, React Native 0.81, StoreKit 2 via react-native-purchases 10.3.0. Devices: iPhone 15 Pro Max (iOS 27.0), iPhone 16 Pro Max (iOS 26.5). Open Developer Support case: 102936978821. Is there any developer-side step remaining, or does this require Apple to re-process / re-propagate the product server-side? Any guidance appreciated.
Replies
1
Boosts
2
Views
521
Activity
2w
Introductory Offer Start Timing
Hi everyone, I set up an auto-renewable subscription introductory offer in App Store Connect with a scheduled start date of September 7 for the Philippines storefront. According to the documentation App Store pricing and availability start times by country or region, scheduled pricing and offer updates are expected to go live based on local regional times. However, the offer did not show up in the Current Introductory Offers in app store connect portal at the documented start time (14:00 Sep 6th UTC). Instead, it stayed in the Upcoming Offers until 7:00 Sep 7th UTC which is 17 hours after the time in the doc. We met a similar situation a few days later when we launch another introductory offer in Thailand. I would appreciate clarification on the following points: What is the underlying reason for the discrepancy between the documented start time behavior and the actual start time observed in production? Can Apple update the App Store pricing and availability start times by country or region reference documentation so that it accurately reflects the practical start time and propagation window for each region? Any insights or shared experiences with offer scheduling in the APAC region would be greatly appreciated.
Replies
0
Boosts
0
Views
207
Activity
2w
Advanced Commerce API support for native macOS apps
Hello, We are considering using the Advanced Commerce API for a native macOS app distributed through the Mac App Store. Our use case is a base auto-renewable subscription with optional subscription add-ons (e.g. Effects and Templates). The Advanced Commerce API eligibility page lists Mac Catalyst, but does not explicitly list native macOS. However, the macOS 15.4 release notes mention support for Advanced Commerce API purchases in StoreKit. Could someone please clarify: Is Advanced Commerce API supported for native macOS App Store apps (not Mac Catalyst), including subscriptions with optional add-ons? Does it support introductory free trials, e.g. a 3-day free trial for the base subscription? Can existing auto-renewable subscription subscribers be migrated to Advanced Commerce API and then purchase optional add-ons as part of the same subscription? Many thanks!
Replies
0
Boosts
0
Views
89
Activity
2w
Is receiving the same transaction multiple times from Transaction.updates expected behavior?
I'm seeing behavior similar to what was reported in this thread: https://developer.apple.com/forums/thread/816344 I read the discussion in the related thread (816320) as well, but I couldn't determine whether receiving the same transaction multiple times from Transaction.updates is considered expected behavior. In my case, I'm testing an auto-renewable subscription in the Sandbox environment. After successfully processing and calling finish() on a transaction, Transaction.updates sometimes provides another transaction with the same transactionId. I've also observed the same transactionId being delivered multiple times through Transaction.updates itself. I compared the JWS representations of these transactions. They are not byte-for-byte identical, but the transaction information appears to be the same. The only differences I've identified are: signedDate deviceVerificationNonce deviceVerification This looks as though the same transaction is being signed again at a different time. I'd like to clarify the intended way to handle this: Is it expected behavior for Transaction.updates to deliver the same transactionId multiple times in this way? If so, after an app has successfully processed and finished a transaction, is it safe to recognize subsequent transactions with the same transactionId as already processed, skip entitlement-related processing, and simply call finish() on them? In other words, can an app use transactionId to prevent duplicate processing of transactions that it has already successfully handled? I'm specifically interested in whether doing so could cause the app to miss any meaningful update that StoreKit might later deliver using the same transactionId.
Replies
2
Boosts
0
Views
556
Activity
2w
How to cancel Auto-renewable subscription bought in TestFlight?
I've read several topics on cancelling subscriptions in sandbox environment, but it seems to me that it could not be applied to TestFlight. I can cancel sandbox subscriptions through Settings > App Store > Sandbox account But since TestFlight does not use sandbox account I cannot cancel a sub from there. Also, TF purchase does not appear in the list of regular subscriptions (Settings > Profile > Media & Purchases). So my question is: is there any way to manually cancel auto-renewable subscription bought in TestFlight build of the app?
Replies
11
Boosts
7
Views
9.6k
Activity
2w
Sandbox allows free trial again on resubscribe to the same subscription
Title: Sandbox allows free trial again on resubscribe to the same subscription Hi everyone, I'm testing an auto-renewable subscription using App Store Connect with a Sandbox tester (not a local StoreKit configuration file). My subscription has an introductory free trial configured. Scenario: Purchase the subscription for the first time using a Sandbox Apple ID. The user receives the introductory free trial as expected. Let the subscription expire. Purchase the same subscription product again using the same Sandbox Apple ID. I receive an App Store Server Notification with Notification Type = RESUBSCRIBE, and the transaction appears to have a price of 0, making it look like the user received another free trial. From Apple's documentation, my understanding is that an introductory offer can only be redeemed once per subscription group per Apple ID. Based on that, I expected the second purchase to be charged immediately rather than receive another free trial. My questions are: Is this expected behavior in the Sandbox environment? Does Sandbox sometimes allow introductory offers to be redeemed multiple times for testing? Or am I misinterpreting the RESUBSCRIBE notification and the $0 transaction? I did not intentionally reset the Sandbox tester's introductory offer eligibility, and I'm purchasing the same product in the same subscription group with the same Sandbox Apple ID. Has anyone observed this behavior or can clarify whether this is expected in Sandbox versus production? Thanks!
Replies
1
Boosts
0
Views
478
Activity
3w
TestFlight 沙盒中 StoreKit 2 的 `Product.products(for:)` 对两个非消耗型内购持续返回空数组
大家好,我正在排查一个 TestFlight 沙盒环境中的 StoreKit 2 商品加载问题,希望获得建议。 一、现象 iOS App 通过 TestFlight 安装(Build 4)后,使用 Product.products(for:) 请求两个非消耗型内购项目。调用不会抛出错误,但始终返回空数组,因此购买页没有任何可购买商品。 products = try await Product.products(for: [ "com.shidan.qieting.plus.trial.7day", "com.shidan.qieting.plus.lifetime" ]).sorted { $0.id < $1.id } 两个 Product ID 分别为: Product ID 类型 价格 App Store Connect 状态 com.shidan.qieting.plus.trial.7day 非消耗型 Tier 0 / US$0.00 可供审核 com.shidan.qieting.plus.lifetime 非消耗型 US$5.99 可供审核 二、日志 在 TestFlight App 冷启动后,诊断日志记录: 2026-09-03T08:12:08Z [settings] plus products loaded: trialAvailable=false, lifetimeAvailable=false 打开购买页时再次调用,结果仍然为空。没有捕获到 StoreKit 异常,也没有购买流程报错。 三、系统级沙盒验证结果 为排除 App UI 和 StoreKit 商品加载代码的影响,我们还使用同一开发团队创建的 Sandbox Apple Account,在 iOS 的“设置 > 开发者 > Sandbox Apple Account > 管理 > Test Transactions”中直接测试: Bundle ID:com.shidan.qieting Product ID:com.shidan.qieting.plus.lifetime 系统提示:“提供的产品 ID 或套装 ID 无效”。该工具不经过 App 内的购买页或 Product.products(for:) 结果,仍无法识别这组 Bundle ID 与 Product ID。 四、已完成核验 代码中的 Product ID 与 App Store Connect 中的 Product ID 完全一致。 Release Bundle ID 与 App Store Connect App Record 一致,均为 com.shidan.qieting。 App ID 为显式 ID,不是 wildcard App ID。 Certificates, Identifiers & Profiles 中已启用 In-App Purchase capability;Xcode Target 也已启用,Xcode Cloud 使用自动签名。 TestFlight 使用 Archive 构建;共享 Scheme 的 ArchiveAction 没有 StoreKit Configuration 文件。本地 .storekit 文件只用于 Xcode Run/Test,本身不影响 Archive/TestFlight。 两个项目均已设置价格、175 个 App Store 地区可售,以及简体中文、繁体中文、英语本地化。 最后一次修改 IAP 元数据已经超过 48 小时。 Paid Apps Agreement、税务信息和银行信息均为有效/正在使用中。 尚未提交 App 或 IAP 审核;理解为 TestFlight 沙盒测试不应以提交审核为前提。 欧盟《数字服务法》(DSA)交易商合规信息仍在审核中;但该要求针对欧盟 App Store 产品页的交易商信息。Apple 官方说明中,单独通过 TestFlight 分发不属于在欧盟 App Store 以交易商身份分发,因此这不应影响 TestFlight 沙盒或 Test Transactions。 五、想请教 在上述条件已确认、Product.products(for:) 不报错却返回 [] 的情况下,是否还有容易遗漏的 App Store Connect、沙盒、签名或 TestFlight 配置? 是否有人遇到过“所有 Product ID 均正确、商品完整且全球可售,但 TestFlight 沙盒始终返回空数组”的情况?如果这是 Apple 沙盒端的已知延迟或异常,有什么进一步的排查或反馈渠道? 我可以按需要补充已打码的 App Store Connect 配置截图和完整诊断日志。谢谢。
Replies
3
Boosts
0
Views
598
Activity
3w
In-App Purchase key returns 401 (4010000) on Advanced Commerce API but 200/404 on App Store Server API
Environment: Sandbox Bundle ID: com.fosssocial.app Key ID: L7DZYHGM62 Issuer ID: cf1f7bc7-452f-4bb8-a925-31ca29175fac Summary Our In-App Purchase key is accepted by the App Store Server API but rejected by the Advanced Commerce API, using the exact same bearer token. This appears to be an authorization grant that was never applied to the key, rather than a signing or request-format problem on our side. Reproduction — one token, two API families GET /inApps/v1/subscriptions/1 -> 404, errorCode 4040010 (token ACCEPTED, resource simply not found) POST /advancedCommerce/v1/subscription/changeMetadata/1 -> 401, errorCode 4010000 (token REJECTED) Same JWT, same key, issued seconds apart. A 401 on one family and a 404 on the other isolates this to key authorization. On-device symptom A signed SubscriptionCreateRequest passed to StoreKit as advancedCommerceData fails with StoreKitError.unknown / "Unable to Complete Request". No payment sheet appears and no InvalidRequestError is returned, so there is no field-level error to act on. What we have already verified JWS header: alg ES256, kid, typ JWT Claims: iss, iat, aud "advanced-commerce-api", bid, nonce, request No exp claim (per Apple's documentation) The request claim uses standard padded base64, not base64url Key ID and .p8 file confirmed to be a matching pair Key regenerated after receiving the Advanced Commerce access-granted email; the 401 is unchanged AdvancedCommerceProduct(id:) resolves successfully on device, which confirms the PRODUCT has Advanced Commerce access Question Does the In-App Purchase key require a separate authorization for the Advanced Commerce API beyond the product-level access we were granted? If so, how is that applied to an existing key?
Replies
0
Boosts
0
Views
212
Activity
3w
Build behaving differently in testflight compared to simulator
Hi all I have an app I’m pretty much done with, and on the Xcode simulator it works perfectly and the IAP shows us when the purchase buttons are clicked but for some reason when it goes to testflight none of the buttons respond, is there any reason that would cause it to behave differently in testflight when its coded correctly and works in the simulator. thanks
Replies
0
Boosts
0
Views
282
Activity
3w
Trials entering billing retry instead of converting
We have a monthly subscription and an annual subscription with a 3-day free trial. The monthly converts fine. On the annual, trials tend to enter billing retry rather than convert — users don't cancel, the charge just fails. We've audited our implementation and found nothing on our side that participates in the renewal charge. What can a developer actually do about this? Does trial length, price point, or using a paid introductory offer instead of a free trial make a difference?
Replies
0
Boosts
0
Views
116
Activity
3w
Does sandbox testing require consumable IAPs to be fully approved, or just attached to a pending submission?
We have 5 consumable in-app purchase products (Product IDs: localshadows_support_099, _499, _999, _2499, _4999) currently in "Prepare for Submission" status. Our app's first version (1.0) has also not yet been submitted for App Review. Question: Does sandbox testing of these consumable IAPs require the app to be fully approved through App Review first, or is it sufficient for the products to be attached to a version that has been submitted (even if still pending review)? What we've tried: We're using react-native-iap v16.4.1 for a real native StoreKit 2 purchase flow (not RevenueCat, which was masking this issue via its Test Store simulation mode). Calling fetchProducts() for these SKUs returns an empty array, and calling requestPurchase() for them results in an indefinite hang with no error. We want to complete sandbox testing before deciding on our actual App Review submission timeline.
Replies
2
Boosts
0
Views
354
Activity
3w
StoreKit Sandbox returns 0 products after TN3186 checks — catalog association issue?
We are testing two auto-renewable subscriptions for a new iOS app. In Apple Sandbox, StoreKit 2 Product.products(for:) always returns an empty array. Legacy SKProductsRequest independently reports both identifiers as invalid. Environment: Physical iPhone, iOS 26.5 Xcode development build with automatic signing Storefront.current = USA (143441) canMakePayments = true No StoreKit Configuration file in the Run scheme Direct native StoreKit 2 diagnostics, without a third-party purchase SDK TN3186 checks completed: Explicit Bundle ID matches the App Store Connect app, installed app, and provisioning profile In-App Purchase is enabled for the App ID Developer membership, Paid Apps Agreement, banking, and tax are active One subscription group with monthly and yearly subscriptions is visible Pricing, localizations, and availability are configured Neither subscription is Rejected or Developer Action Needed The scheme is using real Sandbox data, not local StoreKit testing Results: StoreKit 2 batch query: rawCount = 0 SKProductsRequest: valid = []; both identifiers are invalid StoreKit 2 individual monthly query: 0 StoreKit 2 individual yearly query: 0 No exception; failure occurs during product discovery Related reports: https://developer.apple.com/forums/thread/839313 — TN3186 verified and USA storefront valid, but still 0 products; no replies https://developer.apple.com/forums/thread/841722 — Apple Commerce mentioned Rejected or Developer Action Needed states; ours have neither https://developer.apple.com/forums/thread/820656 — Apple DTS confirmed first subscriptions do not require review before Sandbox testing Apple Developer Support referred us to TN3186, and we verified every applicable item. The individual subscription detail route in App Store Connect also intermittently remains on a loading indicator although the group and both records are visible. Could an App Store Commerce or StoreKit engineer check whether the app-to-IAP catalog association is populated correctly on Apple's side, or advise an official escalation path to have the Sandbox catalog reprocessed? Exact account, app, product, device, email, and support-case identifiers are omitted from this public post and can be supplied privately through Apple Support or Feedback Assistant.
Replies
0
Boosts
0
Views
295
Activity
3w