StoreKit Test

RSS for tag

Create and automate tests in Xcode for your app's submission and in-app purchase transactions.

Posts under StoreKit Test tag

200 Posts

Post

Replies

Boosts

Views

Activity

In-App Purchase Resources
General: Forums topic: StoreKit Forums tag: In-App Purchase App Store Pathway Simple and safe In-App Purchases Auto-renewable subscriptions In-App Purchase documentation Getting started with In-App Purchase using StoreKit views documentation Supporting business model changes by using the app transaction documentation Testing at all stages of development with Xcode and the sandbox documentation App Store Server Notifications documentation App Store Server API documentation Simplifying your implementation by using the App Store Server Library documentation TN3185: Troubleshooting In-App Purchases availability in Xcode technote TN3186: Troubleshooting In-App Purchases availability in the sandbox technote TN3188: Troubleshooting In-App Purchases availability in the App Store technote Understanding StoreKit workflows sample code Implementing a store in your app using the StoreKit API sample code What’s new in StoreKit and In-App Purchase video
0
0
491
Jun ’26
xcodebuild test (CLI) does not sync .storekit to storekitd on iOS 26.5 — SKTestSession unusable in CI
On iOS 26.5 simulator runtime, running UI tests via xcodebuild test from the command line does not push the scheme's StoreKitConfigurationFileReference to the destination simulator's storekitd AppGroup Octane container. As a consequence, SKTestSession(configurationFileNamed:) either silently falls through to the production App Store (surfacing a "Sign in to Apple Account" SpringBoard alert during paywall tests), or throws SKInternalErrorDomain Code=3 "Error saving configuration file" if you call any SKTestSession instance method. The same project, same scheme, same .storekit file works correctly when launched via Xcode IDE (Cmd+R / Cmd+U) — which uses DVTDevice.handleStoreKitConfigurationSyncForBundleID:configurationFilePath: via an internal IDELaunchSession XPC path that the public xcodebuild CLI does not invoke. This regression makes StoreKit Test unusable in CI for any project using xcodebuild test or xcodebuild test-without-building against an iOS 26.5 simulator. Environment macOS: 26.x Xcode: 26.4.1 (25E253) iOS Simulator runtime affected: 26.5 iOS Simulator runtime that does not exhibit the bug: 26.1 Test target: XCTest UI tests Test plan: *.xctestplan with "storeKitConfiguration": "MyApp.storekit" in defaultOptions Affected scheme actions: Test (CLI) Not affected: Run, Test (Xcode IDE) Steps to Reproduce Create a SwiftUI iOS app com.example.MyApp. Add a MyApp.storekit with one auto-renewable subscription. Add a UI test target. In the xctestplan: defaultOptions.storeKitConfiguration = "MyApp.storekit". In the UI test base case: private var storeKitSession: SKTestSession? override func setUpWithError() throws { storeKitSession = try SKTestSession(configurationFileNamed: "MyApp") app.launch() } Boot a fresh iOS 26.5 simulator. Run via CLI: xcodebuild test \ -project MyApp.xcodeproj \ -scheme MyApp \ -testPlan MyAppUITests \ -destination "platform=iOS Simulator,name=iPhone 17 Pro" In the test, trigger paywall and call Product.purchase(). Expected Product.purchase() presents the StoreKit Test sheet labeled "[Environment] Xcode". Same behavior as Xcode IDE Cmd+U. Actual Production App Store flow triggers. SpringBoard alert "Sign in to Apple Account" appears. Tests waiting on the "Xcode"-labeled sheet fail with Element does not exist. Evidence The simulator's ~/Library/Developer/CoreSimulator/Devices/<UDID>/data/Containers/Shared/AppGroup/<storekit-AGID>/Documents/Persistence/Octane/com.example.MyApp/Configuration.storekit: Present (≈100 KB) when launched via Xcode IDE. Missing when launched via xcodebuild test CLI on the same simulator UDID. Workarounds Attempted (all fail on iOS 26.5) No-op XCTestCase "warmup" that calls XCUIApplication.launch() + sleep — does not trigger the sync because XCUIApplication.launch() routes through XCTRunner, not IDELaunchSession. Multi-destination xcodebuild test with -parallelize-tests-among-destinations. Manually cp-ing the .storekit file into the AppGroup Octane container — storekitd only loads via the XPC channel. launchctl kickstart -k system/com.apple.storekitd — wipes in-memory state, does not pick up disk file. Only working workaround: open project in Xcode IDE, Cmd+R, wait ~20–30 sec, Cmd+., then Cmd+U. Not viable for CI. Related Open Feedback FB22237318 — SKTestSession instance methods (clearTransactions(), failTransactionsEnabled = true) throw SKInternalErrorDomain Code=3 "Error saving configuration file". Discussion thread: https://developer.apple.com/forums/thread/808030 The iOS 26.5 Release Notes (https://developer.apple.com/documentation/ios-ipados-release-notes/ios-ipados-26_5-release-notes) under StoreKit Test list this issue as resolved in 26.5: "Fixed: SKTestSession may fail to save its configuration file when invoked outside of an Xcode debug session." However, on the public iOS 26.5 simulator runtime the behavior is unchanged — SKTestSession still hits Code=3 on any mutation, and xcodebuild test from CLI still does not sync the .storekit configuration. The 26.5 fix either did not actually ship, or this report describes a distinct but related issue that the fix did not cover. Impact Any CI/CD pipeline running UI tests for apps with StoreKit subscriptions is broken when targeting an iOS 26.5 simulator. Workarounds are either: Pin CI simulator runtime to iOS 26.1. Manually run the project in Xcode IDE before each test run (impossible headless). Has anyone found a CLI-friendly workaround? Or is there an undocumented xcodebuild flag / simctl command that can trigger the same DVTDevice sync from outside the IDE?
7
3
844
3h
SKTestSession.buyProduct(identifier: options:) throws error
Hi, Overview I am trying to write a unit test case to buy a storekit product. SKTestSession.buyProduct(identifier: options:) throws the error StoreKit.StoreKitError.notEntitled Testcase Code @Test func example() async throws { let session = try SKTestSession(configurationFileNamed: "VehicleStore") session.disableDialogs = true session.clearTransactions() do { let transaction = try await session.buyProduct(identifier: "nonconsumable.car", options: []) print(transaction) } catch { // Throws StoreKit.StoreKitError.notEntitled print("Error: \(error)") } } Storekit configuration file Note In-App purchases capability is added StoreKit configuration file is used in testcase Environment: macOS 26.5.2 (25F84) Xcode 26.6 (17F113)
5
0
346
3d
App approved and released, but auto-renewable subscriptions remain "Waiting for Review" and StoreKit returns no products
M y app was approved and is now live on the App Store, but all four auto-renewable subscriptions are still Waiting for Review in App Store Connect. Because of this, the production app's StoreKit 2 call to Product.products(for:) returns 0 products, and users see: "No subscription products were returned by the App Store." There are no metadata errors or warnings—only Waiting for Review. My questions are: Is it normal for an app to be released before its subscriptions are approved? While subscriptions are in Waiting for Review, is it expected that Product.products(for:) returns an empty array? Has anyone experienced this, and how long did it take for the subscriptions to be approved after the app was already live? I've attached: App Store Connect screenshot showing all four subscriptions in Waiting for Review. App screenshot showing the "No subscription products were returned by the App Store." message. Any insight would be greatly appreciated. Thanks!
0
0
79
5d
IAP Products Not Loading During App Review - Sandbox Environment Issue (Guideline 2.1b)
Hello, We are experiencing an issue where our In-App Purchase products fail to load during App Review, but work correctly in TestFlight using the exact same build. App Details: Framework: React Native (Expo) with RevenueCat SDK Products: 4 auto-renewable subscriptions Important context: Our app has been through multiple review cycles. In earlier submissions (builds 3 and 4), the IAP products loaded correctly and the reviewer was able to see the prices on the same review device (iPad Air 11-inch M3). However, in our most recent submissions, the exact same implementation is no longer loading products during review, despite working correctly in TestFlight. What works on our side: StoreKit successfully returns all subscription products RevenueCat offerings load correctly Localized pricing is displayed properly Purchases complete successfully Restore purchases work as expected Tested on multiple physical devices with sandbox accounts What happens during App Review: The paywall shows "—" instead of prices Products appear to not load from StoreKit Same binary works perfectly in TestFlight We have verified: All 4 IAP products are attached to the submitted app version Product identifiers match exactly between App Store Connect and code Paid Apps Agreement is Active (Jun 7, 2026 - Jun 5, 2027) Banking and tax information are Active Products are marked as available for sale Bundle ID is registered and In-App Purchase capability is enabled We noticed a similar thread here: https://developer.apple.com/forums/thread/827016 https://developer.apple.com/forums/thread/829441 We suspect this may be an intermittent StoreKit product retrieval issue specific to the App Review sandbox environment, as the behavior changed between review cycles without any changes to our IAP implementation. Any guidance would be appreciated. Thank you.
0
0
90
1w
关于申请一次性兑换码的请教
"关于一次性兑换码我有一些疑问,希望大家能帮我解答,谢谢 我的构建版本目前的状态是【等待开发者发布】,现在的状态是不可以申请一次性兑换码的,需要是可分发状态,我想问一下这个可分发状态是属于那个阶段? 是我点了发布之后就是可分发吗,可分发是否就是上线了?如果我点定时发布是不是也是进入到可分发阶段?如果我设定预下载是不是就可以申请一次性兑换码了? 还是说我进行一些其他操作就可以申请正式的一次性兑换码了"
0
0
106
1w
StoreKit testing not working on iOS26.5 simulator
Hi, I'm trying to run our StoreKit unit tests with Xcode26.5 on an iOS26.5 simulator. Host computer has macOS26.5. All tests are failing and in the console I see logs such as [SKTestSession] Error saving configuration file: Error Domain=SKInternalErrorDomain Code=3 "(null)" [SKTestSession] Error deleting all transactions: Error Domain=SKInternalErrorDomain Code=3 "(null)" [SKTestSession] Error clearing overrides: Error Domain=SKInternalErrorDomain Code=3 "(null)" [SKTestSession] Error setting value to 1 for identifier 2 for jp.unext.mediaplayer: Error Domain=SKInternalErrorDomain Code=3 "(null)" And the simulator asks me to provide my AppleID. Tests have been broken since at least 26.4 The release notes claims that it has been fixed but not for me. https://developer.apple.com/documentation/ios-ipados-release-notes/ios-ipados-26_5-release-notes#StoreKit-Testing-in-Xcode Does anyone else have the same issue? Reported FB22774836 just in case.
7
10
762
3w
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
338
3w
RevenueCat offerings returning empty (current: null, allKeys: []) despite correct setup — first-time auto-renewable subscription submission
Hi all, I'm launching my first iOS app (Capacitor/Next.js WebView wrapper) with two auto-renewable subscriptions via RevenueCat, and I'm stuck on a persistent issue across multiple App Store Review rejections. Setup: Bundle ID: no.skaren.app Two auto-renewable subscriptions: no.skaren.app.premium.monthly and no.skaren.app.premium.yearly, both in a single subscription group RevenueCat integrated via @revenuecat/purchases-capacitor App-Specific Shared Secret added to RevenueCat App Store Connect API key (with correct Key ID/Issuer ID) added to RevenueCat Paid Apps Agreement: Active Bundle ID in RevenueCat matches exactly RevenueCat API key in app code matches dashboard exactly The problem: On a physical device (TestFlight build, signed into Sandbox Apple ID), calling Purchases.getOfferings() always returns: {"current":null,"allKeys":[]} No errors are thrown — the offerings object is just empty. This happens consistently across multiple builds, after removing a conflicting limitsNavigationsToAppBoundDomains WebView restriction (which was separately causing a blank-screen bug, now fixed and confirmed working on-device). App Store Connect status: This is our first subscription submission ever. Both subscription products currently show "Developer Action Needed" status in App Store Connect (their localizations were rejected once for vague wording, fixed and resaved, but the products remain in this state). App Review's rejection message explicitly states: "Apple reviews In-App Purchase products in the sandbox and the In-App Purchase products do not need prior approval to function in review." However, our experience suggests otherwise — RevenueCat returns zero offerings, and App Review's own testers also report an "error message displayed on the subscription page" when attempting to test the IAP flow. Question: Is it actually true that subscriptions in "Developer Action Needed" / not-yet-approved status can still be fetched via StoreKit/RevenueCat during sandbox testing? Or does the first-ever subscription submission genuinely need to be approved (i.e., go through the review cycle once) before getOfferings() will return populated data? Has anyone encountered this exact "chicken-and-egg" situation, where the first IAP submission can't be tested until reviewed, but review fails because it can't be tested? Any insight into whether this is expected sandbox behavior for first-time subscription submissions, or whether there's a configuration issue I'm missing, would be hugely appreciated. Thanks!
0
0
80
Jun ’26
Transaction.currentEntitlements sometimes does not emit a result until device is reboot
I have the typical StoreKit 2 manager class, where I check currentEntitlements for subscription. I have filed a feedback (FB22349195), I hope someone can take a look at it. func updateCustomerProductStatus() async { var activeSubscription: String? = nil // BUG: In some cases the currentEntitlements does not emit a transaction until the device is reboot for await result in Transaction.currentEntitlements { print("Found transaction: \(result)") // This print does not appear until a restart! do { let transaction = try checkVerified(result) // Skip revoked transactions if transaction.revocationDate != nil { print("Skipping revoked transaction for \(transaction.productID)") continue } // Skip expired subscriptions if let expirationDate = transaction.expirationDate, expirationDate < Date() { print("Skipping expired subscription for \(transaction.productID)") continue } // Check product type switch transaction.productType { case .autoRenewable: activeSubscription = transaction.productID default: break } } catch { print("Unable to verify transaction: \(error)") } } // Update state once after processing all entitlements self.activeSubscription = activeSubscription print("updateCustomerProductStatus() activeSubscription: \(activeSubscription ?? "nil")") } There is some unexpected behavior where the currentEntitlements does not emit a result until the iPhone device is reboot. This bug appeared in iOS 26.4 (and in the betas).
2
2
670
Jun ’26
Is SKTestSession available for Swift Package tests?
I'm trying to test my StoreKit package using local "Consumable.storekit" configuration added to test target as a .copy() resource. I receive various errors. On purchase attempts I receive StoreKitError.unknown. In the console I see this diagnostic messages: [SKTestSession] Error saving configuration file: Error Domain=SKInternalErrorDomain Code=3 "(null)" [SKTestSession] Error setting value to 1 for identifier 2 for com.apple.dt.xctest.tool: Error Domain=SKInternalErrorDomain Code=3 "(null)" I these last two cases product loading failed. It feels like session require mutable .storekit file? Also, some people mention that Host Application must be selected, but it's related to Xcode projects. What is the correct way to test StoreKit within a Swift Package?
1
0
140
Jun ’26
Sandbox testing - Clear Purchase History
Hi, Overview I have an app for which I have created a sandbox account. When I try to clear purchase history it doesn't work, it still shows the in-app purchase items (non-consumable in-app purchases) as purchased. I have tied tried the following ways, but none of them work. Any help on this would be much appreciated! Attempt 1: Go to https://appstoreconnect.apple.com/ Users and Access > Sandbox Check sandbox account > Tap Clear Purchase History button Attempt 2: Go to the iPhone > Settings > Developer > Sandbox Apple Account Tap on account > Manage > Clear Purchase History Attempt 3: Sign out of Sandbox account and sign back in Attempt 4: Delete app and re-run app from Xcode
2
2
419
Jun ’26
IAP and Subscriptions
I would like to explain the current situation regarding our subscriptions and ask a few clarification questions to ensure that our implementation fully complies with App Store requirements. Current Status We have successfully configured our subscriptions in App Store Connect. All subscription products currently appear as “Waiting for Review.” Paid Apps Agreement has been accepted and is active. Banking and tax information are completed and active. RevenueCat integration is working correctly. In TestFlight, the app is now able to: Fetch products successfully Display localized Turkish pricing Open the native Apple purchase sheet Start sandbox purchase flow successfully We can now see Apple’s native TestFlight subscription purchase popup with the correct products and prices, which indicates that StoreKit communication is functioning correctly. However, we are still confused about the review/submission relationship between: The app version submission The first subscription review Existing “Waiting for Review” subscription states Questions Since the subscriptions already show “Waiting for Review,” does this mean they are correctly attached to the currently reviewed app version? Or do we still need to create an entirely new app version submission and manually re-add all subscriptions from the “In-App Purchases and Subscriptions” section before review can continue? The subscriptions are already accessible in TestFlight sandbox purchase flow. Does this confirm that our StoreKit configuration is now technically valid for review? If there is still a configuration issue on our side, could you please clarify exactly which step is missing: attaching subscriptions to a specific binary, submitting the first subscription with a new app version, or another App Store Connect configuration requirement? Our goal is to fully comply with App Store policies and avoid submitting another incorrect review build.
1
0
289
Jun ’26
StoreKit Product Retrieval Issue During App Review
Hello, We are experiencing the exact same behavior described in the following Apple Developer Forum thread: https://developer.apple.com/forums/thread/827016 The issue appears to be isolated to the App Review environment and matches our current rejection under Guideline 2.1 - Performance. On our side, the subscription system is functioning correctly and consistently in TestFlight using the exact same build that was reviewed. We tested on multiple physical devices using Sandbox tester accounts and confirmed that: StoreKit successfully returns all subscription products RevenueCat offerings load correctly Localized pricing is displayed properly Purchases complete successfully Restore purchases also work as expected However, during App Review, the review notes indicate that the product list is empty, which causes the paywall to fail loading. We would like to emphasize that: The In-App Purchases are attached to the submitted app version Product identifiers exactly match between App Store Connect and the application code Agreements, tax, and banking information are active The products are marked as available for sale The same binary works correctly in TestFlight Because the issue cannot be reproduced outside the review environment, we currently have no reliable way to diagnose or validate a permanent fix. At this point, we suspect there may be an intermittent StoreKit product retrieval issue affecting the App Review environment specifically. If possible, could you please: Verify whether StoreKit product retrieval is functioning correctly in the review sandbox environment Share any diagnostic logs related to the failed product request Confirm whether the review device successfully connects to App Store sandbox services Provide any additional guidance for reproducing the App Review behavior locally We are fully committed to resolving the issue and ensuring compliance with App Store requirements, but currently the behavior appears environment-specific and non-reproducible from our side. Thank you very much for your assistance and support. Best regards, Mert Akgün
0
0
123
Jun ’26
React Native IAP: getProducts returns empty array in TestFlight despite complete configuration
Hi everyone, I’m currently developing an iOS app using React Native and implementing consumable In-App Purchases (IAP). I'm facing an issue where getProducts returns an empty array without any error messages when testing on a TestFlight build. I have already completed the following setup: Agreements, Tax, and Banking: All forms are signed and the status is "Active" in App Store Connect. Product Configuration: The Consumable product is created in App Store Connect with the status "Ready to Submit". App Store Connect Integration: The product is correctly linked under the "In-App Purchases and Subscriptions" section of the App version. Xcode Capability: The "In-App Purchase" capability has been added to the project. Implementation: The Product ID in my React Native code (using react-native-iap) matches the ID in App Store Connect exactly. Despite these steps, the product list remains empty. Are there any hidden requirements or specific configurations for TestFlight that I might have missed? Any guidance would be greatly appreciated. Thanks!
1
0
455
Jun ’26
IAP rejected under 2.1(b) "failed to load" — products work in Sandbox/TestFlight but fail in App Review
I'm getting repeatedly rejected under Guideline 2.1(b) - App Completeness, with the message that the in-app purchase products "failed to load." This has happened on multiple submissions now, and I'm stuck because everything works fine on my end. My setup: 2 auto-renewable subscriptions + 1 in-app purchase, all in "Waiting for Review" status and attached to the current version (1.0.0). All three products load and purchase successfully when I test via TestFlight with a Sandbox account. No errors at all. Paid Apps Agreement, banking, and tax forms are all Active. I have another app on the same account where IAPs are live and working, so I don't think it's an account/agreement issue. Review device was iPad Air 11-inch (M3), iPadOS 26.5. One detail that might be relevant: this account was migrated from an individual to an organization account a while back, and there were some app transfers involved on the account (though not for this specific app). What I've already tried/confirmed: Product IDs in code match App Store Connect exactly. Products are attached to the build (there's no separate section to re-attach them on resubmit, which I understand means they're already linked). Resubmitted multiple times with the same result. My questions: Has anyone seen IAPs load fine in Sandbox/TestFlight but consistently fail in App Review specifically? What was the root cause? Could the individual-to-organization migration or prior app transfers cause IAPs to fail loading only in the review environment, even when agreements show Active? Is there anything region/storefront-specific that would make SKProductsRequest / Product.products(for:) return an empty list for the reviewer but not for me? Any pointers would be hugely appreciated. Thanks!
0
1
135
Jun ’26
App rejected under 3.1.1: Reviewer mistook native iOS StoreKit prompt for a custom password field
Hello everyone, I'm facing a very frustrating situation with App Review for my indie app, CoffeePomodoro, and I'm hoping someone here or an Apple engineer can help shed some light on how to escalate and resolve this. My recent update (Version 1.3.1, Submission ID: 59763b52-7c14-4b27-a2cf-2799d2bafe35) was rejected under Guideline 3.1.1 - In-App Purchase. The rejection message states: "We found that the app includes a feature to restore previously purchased In-App Purchase products by entering the user's Apple Account and password. However, In-App Purchases cannot be restored in this manner." The Reality: There is absolutely zero custom UI, form, or TextField in my app that asks for an Apple ID or password. When a user taps "Restore Purchases", the app simply calls Purchases.shared.restorePurchases() via the RevenueCat SDK, which directly wraps Apple's native SKPaymentQueue.restoreCompletedTransactions(). The credential prompt the reviewer saw is the native iOS system-level authentication dialog that appears automatically in the sandbox/TestFlight environment. This usually happens if the device or simulator being used for the review doesn't have an active Sandbox Apple ID already logged in. I have explained this in the App Store Connect Resolution Center. I provided screen recordings showing it's the system dialog, and I attached code snippets proving the app only calls native APIs. Unfortunately, my explanations seem to be ignored, and I keep facing the same roadblock. It feels like the reviewers are mistaking their own OS's native prompt for a custom credential-harvesting screen. Meanwhile, my users are waiting for this update to resolve their subscription issues, and I am stuck in a rejection loop for using Apple's own native API exactly as intended. Has anyone else experienced this specific misunderstanding by the review team? How can I escalate this so someone actually reviews the screen recording and code snippets I provided? Thank you for your time.
3
0
249
May ’26
In-App Purchase Resources
General: Forums topic: StoreKit Forums tag: In-App Purchase App Store Pathway Simple and safe In-App Purchases Auto-renewable subscriptions In-App Purchase documentation Getting started with In-App Purchase using StoreKit views documentation Supporting business model changes by using the app transaction documentation Testing at all stages of development with Xcode and the sandbox documentation App Store Server Notifications documentation App Store Server API documentation Simplifying your implementation by using the App Store Server Library documentation TN3185: Troubleshooting In-App Purchases availability in Xcode technote TN3186: Troubleshooting In-App Purchases availability in the sandbox technote TN3188: Troubleshooting In-App Purchases availability in the App Store technote Understanding StoreKit workflows sample code Implementing a store in your app using the StoreKit API sample code What’s new in StoreKit and In-App Purchase video
Replies
0
Boosts
0
Views
491
Activity
Jun ’26
xcodebuild test (CLI) does not sync .storekit to storekitd on iOS 26.5 — SKTestSession unusable in CI
On iOS 26.5 simulator runtime, running UI tests via xcodebuild test from the command line does not push the scheme's StoreKitConfigurationFileReference to the destination simulator's storekitd AppGroup Octane container. As a consequence, SKTestSession(configurationFileNamed:) either silently falls through to the production App Store (surfacing a "Sign in to Apple Account" SpringBoard alert during paywall tests), or throws SKInternalErrorDomain Code=3 "Error saving configuration file" if you call any SKTestSession instance method. The same project, same scheme, same .storekit file works correctly when launched via Xcode IDE (Cmd+R / Cmd+U) — which uses DVTDevice.handleStoreKitConfigurationSyncForBundleID:configurationFilePath: via an internal IDELaunchSession XPC path that the public xcodebuild CLI does not invoke. This regression makes StoreKit Test unusable in CI for any project using xcodebuild test or xcodebuild test-without-building against an iOS 26.5 simulator. Environment macOS: 26.x Xcode: 26.4.1 (25E253) iOS Simulator runtime affected: 26.5 iOS Simulator runtime that does not exhibit the bug: 26.1 Test target: XCTest UI tests Test plan: *.xctestplan with "storeKitConfiguration": "MyApp.storekit" in defaultOptions Affected scheme actions: Test (CLI) Not affected: Run, Test (Xcode IDE) Steps to Reproduce Create a SwiftUI iOS app com.example.MyApp. Add a MyApp.storekit with one auto-renewable subscription. Add a UI test target. In the xctestplan: defaultOptions.storeKitConfiguration = "MyApp.storekit". In the UI test base case: private var storeKitSession: SKTestSession? override func setUpWithError() throws { storeKitSession = try SKTestSession(configurationFileNamed: "MyApp") app.launch() } Boot a fresh iOS 26.5 simulator. Run via CLI: xcodebuild test \ -project MyApp.xcodeproj \ -scheme MyApp \ -testPlan MyAppUITests \ -destination "platform=iOS Simulator,name=iPhone 17 Pro" In the test, trigger paywall and call Product.purchase(). Expected Product.purchase() presents the StoreKit Test sheet labeled "[Environment] Xcode". Same behavior as Xcode IDE Cmd+U. Actual Production App Store flow triggers. SpringBoard alert "Sign in to Apple Account" appears. Tests waiting on the "Xcode"-labeled sheet fail with Element does not exist. Evidence The simulator's ~/Library/Developer/CoreSimulator/Devices/<UDID>/data/Containers/Shared/AppGroup/<storekit-AGID>/Documents/Persistence/Octane/com.example.MyApp/Configuration.storekit: Present (≈100 KB) when launched via Xcode IDE. Missing when launched via xcodebuild test CLI on the same simulator UDID. Workarounds Attempted (all fail on iOS 26.5) No-op XCTestCase "warmup" that calls XCUIApplication.launch() + sleep — does not trigger the sync because XCUIApplication.launch() routes through XCTRunner, not IDELaunchSession. Multi-destination xcodebuild test with -parallelize-tests-among-destinations. Manually cp-ing the .storekit file into the AppGroup Octane container — storekitd only loads via the XPC channel. launchctl kickstart -k system/com.apple.storekitd — wipes in-memory state, does not pick up disk file. Only working workaround: open project in Xcode IDE, Cmd+R, wait ~20–30 sec, Cmd+., then Cmd+U. Not viable for CI. Related Open Feedback FB22237318 — SKTestSession instance methods (clearTransactions(), failTransactionsEnabled = true) throw SKInternalErrorDomain Code=3 "Error saving configuration file". Discussion thread: https://developer.apple.com/forums/thread/808030 The iOS 26.5 Release Notes (https://developer.apple.com/documentation/ios-ipados-release-notes/ios-ipados-26_5-release-notes) under StoreKit Test list this issue as resolved in 26.5: "Fixed: SKTestSession may fail to save its configuration file when invoked outside of an Xcode debug session." However, on the public iOS 26.5 simulator runtime the behavior is unchanged — SKTestSession still hits Code=3 on any mutation, and xcodebuild test from CLI still does not sync the .storekit configuration. The 26.5 fix either did not actually ship, or this report describes a distinct but related issue that the fix did not cover. Impact Any CI/CD pipeline running UI tests for apps with StoreKit subscriptions is broken when targeting an iOS 26.5 simulator. Workarounds are either: Pin CI simulator runtime to iOS 26.1. Manually run the project in Xcode IDE before each test run (impossible headless). Has anyone found a CLI-friendly workaround? Or is there an undocumented xcodebuild flag / simctl command that can trigger the same DVTDevice sync from outside the IDE?
Replies
7
Boosts
3
Views
844
Activity
3h
iOS 26.5 simulator failed process in-app purchases from Storekit configuration
When using iOS 26.5 simulator to test my in-app purchase module, the products were loaded from my configuration file correctly, but calling purchase on the product would always return userCancellled outcome. Changing to iPhone15 + iOS 18 simulator resolved this issue.
Replies
3
Boosts
1
Views
223
Activity
3d
SKTestSession.buyProduct(identifier: options:) throws error
Hi, Overview I am trying to write a unit test case to buy a storekit product. SKTestSession.buyProduct(identifier: options:) throws the error StoreKit.StoreKitError.notEntitled Testcase Code @Test func example() async throws { let session = try SKTestSession(configurationFileNamed: "VehicleStore") session.disableDialogs = true session.clearTransactions() do { let transaction = try await session.buyProduct(identifier: "nonconsumable.car", options: []) print(transaction) } catch { // Throws StoreKit.StoreKitError.notEntitled print("Error: \(error)") } } Storekit configuration file Note In-App purchases capability is added StoreKit configuration file is used in testcase Environment: macOS 26.5.2 (25F84) Xcode 26.6 (17F113)
Replies
5
Boosts
0
Views
346
Activity
3d
StoreKit problem
StoreKit getProducts returns 0 subscriptions on TestFlight for product IDs vytalai_premium_monthly, vytalai_premium_yearly, vytalai_premium_yearly_intro (bundle com.ciborgu.vytalai, build 112+). All metadata submitted, Paid Apps Agreement active. Please check why Sandbox catalog is empty for this app.
Replies
1
Boosts
0
Views
290
Activity
4d
App approved and released, but auto-renewable subscriptions remain "Waiting for Review" and StoreKit returns no products
M y app was approved and is now live on the App Store, but all four auto-renewable subscriptions are still Waiting for Review in App Store Connect. Because of this, the production app's StoreKit 2 call to Product.products(for:) returns 0 products, and users see: "No subscription products were returned by the App Store." There are no metadata errors or warnings—only Waiting for Review. My questions are: Is it normal for an app to be released before its subscriptions are approved? While subscriptions are in Waiting for Review, is it expected that Product.products(for:) returns an empty array? Has anyone experienced this, and how long did it take for the subscriptions to be approved after the app was already live? I've attached: App Store Connect screenshot showing all four subscriptions in Waiting for Review. App screenshot showing the "No subscription products were returned by the App Store." message. Any insight would be greatly appreciated. Thanks!
Replies
0
Boosts
0
Views
79
Activity
5d
IAP Products Not Loading During App Review - Sandbox Environment Issue (Guideline 2.1b)
Hello, We are experiencing an issue where our In-App Purchase products fail to load during App Review, but work correctly in TestFlight using the exact same build. App Details: Framework: React Native (Expo) with RevenueCat SDK Products: 4 auto-renewable subscriptions Important context: Our app has been through multiple review cycles. In earlier submissions (builds 3 and 4), the IAP products loaded correctly and the reviewer was able to see the prices on the same review device (iPad Air 11-inch M3). However, in our most recent submissions, the exact same implementation is no longer loading products during review, despite working correctly in TestFlight. What works on our side: StoreKit successfully returns all subscription products RevenueCat offerings load correctly Localized pricing is displayed properly Purchases complete successfully Restore purchases work as expected Tested on multiple physical devices with sandbox accounts What happens during App Review: The paywall shows "—" instead of prices Products appear to not load from StoreKit Same binary works perfectly in TestFlight We have verified: All 4 IAP products are attached to the submitted app version Product identifiers match exactly between App Store Connect and code Paid Apps Agreement is Active (Jun 7, 2026 - Jun 5, 2027) Banking and tax information are Active Products are marked as available for sale Bundle ID is registered and In-App Purchase capability is enabled We noticed a similar thread here: https://developer.apple.com/forums/thread/827016 https://developer.apple.com/forums/thread/829441 We suspect this may be an intermittent StoreKit product retrieval issue specific to the App Review sandbox environment, as the behavior changed between review cycles without any changes to our IAP implementation. Any guidance would be appreciated. Thank you.
Replies
0
Boosts
0
Views
90
Activity
1w
关于申请一次性兑换码的请教
"关于一次性兑换码我有一些疑问,希望大家能帮我解答,谢谢 我的构建版本目前的状态是【等待开发者发布】,现在的状态是不可以申请一次性兑换码的,需要是可分发状态,我想问一下这个可分发状态是属于那个阶段? 是我点了发布之后就是可分发吗,可分发是否就是上线了?如果我点定时发布是不是也是进入到可分发阶段?如果我设定预下载是不是就可以申请一次性兑换码了? 还是说我进行一些其他操作就可以申请正式的一次性兑换码了"
Replies
0
Boosts
0
Views
106
Activity
1w
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
185
Activity
1w
StoreKit testing not working on iOS26.5 simulator
Hi, I'm trying to run our StoreKit unit tests with Xcode26.5 on an iOS26.5 simulator. Host computer has macOS26.5. All tests are failing and in the console I see logs such as [SKTestSession] Error saving configuration file: Error Domain=SKInternalErrorDomain Code=3 "(null)" [SKTestSession] Error deleting all transactions: Error Domain=SKInternalErrorDomain Code=3 "(null)" [SKTestSession] Error clearing overrides: Error Domain=SKInternalErrorDomain Code=3 "(null)" [SKTestSession] Error setting value to 1 for identifier 2 for jp.unext.mediaplayer: Error Domain=SKInternalErrorDomain Code=3 "(null)" And the simulator asks me to provide my AppleID. Tests have been broken since at least 26.4 The release notes claims that it has been fixed but not for me. https://developer.apple.com/documentation/ios-ipados-release-notes/ios-ipados-26_5-release-notes#StoreKit-Testing-in-Xcode Does anyone else have the same issue? Reported FB22774836 just in case.
Replies
7
Boosts
10
Views
762
Activity
3w
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
338
Activity
3w
RevenueCat offerings returning empty (current: null, allKeys: []) despite correct setup — first-time auto-renewable subscription submission
Hi all, I'm launching my first iOS app (Capacitor/Next.js WebView wrapper) with two auto-renewable subscriptions via RevenueCat, and I'm stuck on a persistent issue across multiple App Store Review rejections. Setup: Bundle ID: no.skaren.app Two auto-renewable subscriptions: no.skaren.app.premium.monthly and no.skaren.app.premium.yearly, both in a single subscription group RevenueCat integrated via @revenuecat/purchases-capacitor App-Specific Shared Secret added to RevenueCat App Store Connect API key (with correct Key ID/Issuer ID) added to RevenueCat Paid Apps Agreement: Active Bundle ID in RevenueCat matches exactly RevenueCat API key in app code matches dashboard exactly The problem: On a physical device (TestFlight build, signed into Sandbox Apple ID), calling Purchases.getOfferings() always returns: {"current":null,"allKeys":[]} No errors are thrown — the offerings object is just empty. This happens consistently across multiple builds, after removing a conflicting limitsNavigationsToAppBoundDomains WebView restriction (which was separately causing a blank-screen bug, now fixed and confirmed working on-device). App Store Connect status: This is our first subscription submission ever. Both subscription products currently show "Developer Action Needed" status in App Store Connect (their localizations were rejected once for vague wording, fixed and resaved, but the products remain in this state). App Review's rejection message explicitly states: "Apple reviews In-App Purchase products in the sandbox and the In-App Purchase products do not need prior approval to function in review." However, our experience suggests otherwise — RevenueCat returns zero offerings, and App Review's own testers also report an "error message displayed on the subscription page" when attempting to test the IAP flow. Question: Is it actually true that subscriptions in "Developer Action Needed" / not-yet-approved status can still be fetched via StoreKit/RevenueCat during sandbox testing? Or does the first-ever subscription submission genuinely need to be approved (i.e., go through the review cycle once) before getOfferings() will return populated data? Has anyone encountered this exact "chicken-and-egg" situation, where the first IAP submission can't be tested until reviewed, but review fails because it can't be tested? Any insight into whether this is expected sandbox behavior for first-time subscription submissions, or whether there's a configuration issue I'm missing, would be hugely appreciated. Thanks!
Replies
0
Boosts
0
Views
80
Activity
Jun ’26
Transaction.currentEntitlements sometimes does not emit a result until device is reboot
I have the typical StoreKit 2 manager class, where I check currentEntitlements for subscription. I have filed a feedback (FB22349195), I hope someone can take a look at it. func updateCustomerProductStatus() async { var activeSubscription: String? = nil // BUG: In some cases the currentEntitlements does not emit a transaction until the device is reboot for await result in Transaction.currentEntitlements { print("Found transaction: \(result)") // This print does not appear until a restart! do { let transaction = try checkVerified(result) // Skip revoked transactions if transaction.revocationDate != nil { print("Skipping revoked transaction for \(transaction.productID)") continue } // Skip expired subscriptions if let expirationDate = transaction.expirationDate, expirationDate < Date() { print("Skipping expired subscription for \(transaction.productID)") continue } // Check product type switch transaction.productType { case .autoRenewable: activeSubscription = transaction.productID default: break } } catch { print("Unable to verify transaction: \(error)") } } // Update state once after processing all entitlements self.activeSubscription = activeSubscription print("updateCustomerProductStatus() activeSubscription: \(activeSubscription ?? "nil")") } There is some unexpected behavior where the currentEntitlements does not emit a result until the iPhone device is reboot. This bug appeared in iOS 26.4 (and in the betas).
Replies
2
Boosts
2
Views
670
Activity
Jun ’26
Is SKTestSession available for Swift Package tests?
I'm trying to test my StoreKit package using local "Consumable.storekit" configuration added to test target as a .copy() resource. I receive various errors. On purchase attempts I receive StoreKitError.unknown. In the console I see this diagnostic messages: [SKTestSession] Error saving configuration file: Error Domain=SKInternalErrorDomain Code=3 "(null)" [SKTestSession] Error setting value to 1 for identifier 2 for com.apple.dt.xctest.tool: Error Domain=SKInternalErrorDomain Code=3 "(null)" I these last two cases product loading failed. It feels like session require mutable .storekit file? Also, some people mention that Host Application must be selected, but it's related to Xcode projects. What is the correct way to test StoreKit within a Swift Package?
Replies
1
Boosts
0
Views
140
Activity
Jun ’26
Sandbox testing - Clear Purchase History
Hi, Overview I have an app for which I have created a sandbox account. When I try to clear purchase history it doesn't work, it still shows the in-app purchase items (non-consumable in-app purchases) as purchased. I have tied tried the following ways, but none of them work. Any help on this would be much appreciated! Attempt 1: Go to https://appstoreconnect.apple.com/ Users and Access > Sandbox Check sandbox account > Tap Clear Purchase History button Attempt 2: Go to the iPhone > Settings > Developer > Sandbox Apple Account Tap on account > Manage > Clear Purchase History Attempt 3: Sign out of Sandbox account and sign back in Attempt 4: Delete app and re-run app from Xcode
Replies
2
Boosts
2
Views
419
Activity
Jun ’26
IAP and Subscriptions
I would like to explain the current situation regarding our subscriptions and ask a few clarification questions to ensure that our implementation fully complies with App Store requirements. Current Status We have successfully configured our subscriptions in App Store Connect. All subscription products currently appear as “Waiting for Review.” Paid Apps Agreement has been accepted and is active. Banking and tax information are completed and active. RevenueCat integration is working correctly. In TestFlight, the app is now able to: Fetch products successfully Display localized Turkish pricing Open the native Apple purchase sheet Start sandbox purchase flow successfully We can now see Apple’s native TestFlight subscription purchase popup with the correct products and prices, which indicates that StoreKit communication is functioning correctly. However, we are still confused about the review/submission relationship between: The app version submission The first subscription review Existing “Waiting for Review” subscription states Questions Since the subscriptions already show “Waiting for Review,” does this mean they are correctly attached to the currently reviewed app version? Or do we still need to create an entirely new app version submission and manually re-add all subscriptions from the “In-App Purchases and Subscriptions” section before review can continue? The subscriptions are already accessible in TestFlight sandbox purchase flow. Does this confirm that our StoreKit configuration is now technically valid for review? If there is still a configuration issue on our side, could you please clarify exactly which step is missing: attaching subscriptions to a specific binary, submitting the first subscription with a new app version, or another App Store Connect configuration requirement? Our goal is to fully comply with App Store policies and avoid submitting another incorrect review build.
Replies
1
Boosts
0
Views
289
Activity
Jun ’26
StoreKit Product Retrieval Issue During App Review
Hello, We are experiencing the exact same behavior described in the following Apple Developer Forum thread: https://developer.apple.com/forums/thread/827016 The issue appears to be isolated to the App Review environment and matches our current rejection under Guideline 2.1 - Performance. On our side, the subscription system is functioning correctly and consistently in TestFlight using the exact same build that was reviewed. We tested on multiple physical devices using Sandbox tester accounts and confirmed that: StoreKit successfully returns all subscription products RevenueCat offerings load correctly Localized pricing is displayed properly Purchases complete successfully Restore purchases also work as expected However, during App Review, the review notes indicate that the product list is empty, which causes the paywall to fail loading. We would like to emphasize that: The In-App Purchases are attached to the submitted app version Product identifiers exactly match between App Store Connect and the application code Agreements, tax, and banking information are active The products are marked as available for sale The same binary works correctly in TestFlight Because the issue cannot be reproduced outside the review environment, we currently have no reliable way to diagnose or validate a permanent fix. At this point, we suspect there may be an intermittent StoreKit product retrieval issue affecting the App Review environment specifically. If possible, could you please: Verify whether StoreKit product retrieval is functioning correctly in the review sandbox environment Share any diagnostic logs related to the failed product request Confirm whether the review device successfully connects to App Store sandbox services Provide any additional guidance for reproducing the App Review behavior locally We are fully committed to resolving the issue and ensuring compliance with App Store requirements, but currently the behavior appears environment-specific and non-reproducible from our side. Thank you very much for your assistance and support. Best regards, Mert Akgün
Replies
0
Boosts
0
Views
123
Activity
Jun ’26
React Native IAP: getProducts returns empty array in TestFlight despite complete configuration
Hi everyone, I’m currently developing an iOS app using React Native and implementing consumable In-App Purchases (IAP). I'm facing an issue where getProducts returns an empty array without any error messages when testing on a TestFlight build. I have already completed the following setup: Agreements, Tax, and Banking: All forms are signed and the status is "Active" in App Store Connect. Product Configuration: The Consumable product is created in App Store Connect with the status "Ready to Submit". App Store Connect Integration: The product is correctly linked under the "In-App Purchases and Subscriptions" section of the App version. Xcode Capability: The "In-App Purchase" capability has been added to the project. Implementation: The Product ID in my React Native code (using react-native-iap) matches the ID in App Store Connect exactly. Despite these steps, the product list remains empty. Are there any hidden requirements or specific configurations for TestFlight that I might have missed? Any guidance would be greatly appreciated. Thanks!
Replies
1
Boosts
0
Views
455
Activity
Jun ’26
IAP rejected under 2.1(b) "failed to load" — products work in Sandbox/TestFlight but fail in App Review
I'm getting repeatedly rejected under Guideline 2.1(b) - App Completeness, with the message that the in-app purchase products "failed to load." This has happened on multiple submissions now, and I'm stuck because everything works fine on my end. My setup: 2 auto-renewable subscriptions + 1 in-app purchase, all in "Waiting for Review" status and attached to the current version (1.0.0). All three products load and purchase successfully when I test via TestFlight with a Sandbox account. No errors at all. Paid Apps Agreement, banking, and tax forms are all Active. I have another app on the same account where IAPs are live and working, so I don't think it's an account/agreement issue. Review device was iPad Air 11-inch (M3), iPadOS 26.5. One detail that might be relevant: this account was migrated from an individual to an organization account a while back, and there were some app transfers involved on the account (though not for this specific app). What I've already tried/confirmed: Product IDs in code match App Store Connect exactly. Products are attached to the build (there's no separate section to re-attach them on resubmit, which I understand means they're already linked). Resubmitted multiple times with the same result. My questions: Has anyone seen IAPs load fine in Sandbox/TestFlight but consistently fail in App Review specifically? What was the root cause? Could the individual-to-organization migration or prior app transfers cause IAPs to fail loading only in the review environment, even when agreements show Active? Is there anything region/storefront-specific that would make SKProductsRequest / Product.products(for:) return an empty list for the reviewer but not for me? Any pointers would be hugely appreciated. Thanks!
Replies
0
Boosts
1
Views
135
Activity
Jun ’26
App rejected under 3.1.1: Reviewer mistook native iOS StoreKit prompt for a custom password field
Hello everyone, I'm facing a very frustrating situation with App Review for my indie app, CoffeePomodoro, and I'm hoping someone here or an Apple engineer can help shed some light on how to escalate and resolve this. My recent update (Version 1.3.1, Submission ID: 59763b52-7c14-4b27-a2cf-2799d2bafe35) was rejected under Guideline 3.1.1 - In-App Purchase. The rejection message states: "We found that the app includes a feature to restore previously purchased In-App Purchase products by entering the user's Apple Account and password. However, In-App Purchases cannot be restored in this manner." The Reality: There is absolutely zero custom UI, form, or TextField in my app that asks for an Apple ID or password. When a user taps "Restore Purchases", the app simply calls Purchases.shared.restorePurchases() via the RevenueCat SDK, which directly wraps Apple's native SKPaymentQueue.restoreCompletedTransactions(). The credential prompt the reviewer saw is the native iOS system-level authentication dialog that appears automatically in the sandbox/TestFlight environment. This usually happens if the device or simulator being used for the review doesn't have an active Sandbox Apple ID already logged in. I have explained this in the App Store Connect Resolution Center. I provided screen recordings showing it's the system dialog, and I attached code snippets proving the app only calls native APIs. Unfortunately, my explanations seem to be ignored, and I keep facing the same roadblock. It feels like the reviewers are mistaking their own OS's native prompt for a custom credential-harvesting screen. Meanwhile, my users are waiting for this update to resolve their subscription issues, and I am stuck in a rejection loop for using Apple's own native API exactly as intended. Has anyone else experienced this specific misunderstanding by the review team? How can I escalate this so someone actually reviews the screen recording and code snippets I provided? Thank you for your time.
Replies
3
Boosts
0
Views
249
Activity
May ’26