StoreKit

RSS for tag

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

Posts under StoreKit 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
95
1w
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
1
2
90
2h
AppTransaction.shared throws StoreKitError code=2 in macOS TestFlight while deviceVerificationID is available
I am implementing device authentication for a macOS app. Our iOS app uses App Attest, but App Attest is not available on macOS, so we are evaluating StoreKit's AppTransaction plus AppStore.deviceVerificationID as the macOS equivalent signal. The issue: in a macOS app installed through TestFlight, AppStore.deviceVerificationID is available, but AppTransaction.shared throws StoreKitError code=2. I reproduced this in a focused standalone macOS test app with no backend and no custom dependencies. Environment: Platform: macOS Distribution: TestFlight App Store Connect app ID: 6769568350 Bundle ID: com.soundcity.AppTransactionProbe App version: 1.0 Build: 1 Observed output from the TestFlight-installed app: Bundle ID: com.soundcity.AppTransactionProbe App version: 1.0 Build: 1 deviceVerificationID available: true deviceVerificationID prefix: CA91ED5D... AppTransaction.shared threw error: StoreKitError; domain=StoreKit.StoreKitError; code=2 The relevant code path is essentially: import StoreKit let deviceVerificationID = try? AppStore.deviceVerificationID let appTransaction = try await AppTransaction.shared In the TestFlight-installed build: AppStore.deviceVerificationID succeeds. AppTransaction.shared throws StoreKitError code=2. Questions: Is AppTransaction.shared expected to work for macOS apps distributed through TestFlight? If yes, what does StoreKitError code=2 indicate in this context, and what setup might be missing? If no, is there an Apple-supported way to obtain an AppTransaction JWS, or equivalent signed App Store/TestFlight app-install assertion, for macOS TestFlight builds? For macOS apps that need a device-bound trust signal comparable to iOS App Attest, is AppStore.deviceVerificationID intended to be used without AppTransaction.shared, or should these APIs be used together? I have a focused Xcode test project that demonstrates the issue and can share it if helpful.
2
0
256
1d
StoreKit 2: Transaction.all and Transaction.currentEntitlements return empty for valid non-consumable purchases in production
FB: https://feedbackassistant.apple.com/feedback/22556883 We're seeing a small number of production users where both Transaction.currentEntitlements and Transaction.all return zero transactions for a valid, active, non-refunded non-consumable IAP. This makes it impossible to restore the purchase via any StoreKit 2 API. Environment: Xcode 26.4 (Build 17E192) iOS 26.4.1 Direct call to SK2 Transactions.all & Flutter in_app_purchase package v3.2.3 (uses SK2 on iOS 15+) Non-consumable IAP (one-time purchase) What we observe: AppStore.sync() triggers but the purchase stream returns 0 transactions Transaction.all returns empty Transaction.currentEntitlements also returns empty User is confirmed on the correct Apple ID Issue reproduces on both iPhone and Mac for the same Apple ID Issue appears to have started recently for users who previously had no problems Debug log from affected production user: [2026-04-20T08:50:10.744115Z] init: iapAvailable=true [2026-04-20T08:50:10.744566Z] init: isPremium=false [2026-04-20T08:50:10.744567Z] init: triggering silent restorePurchases [2026-04-20T08:50:45.974566Z] restore: started [2026-04-20T08:50:45.986848Z] restore: sk2Transactions count=0 [2026-04-20T08:50:45.993004Z] restore: sk2Direct isVerified=false active=null [2026-04-20T08:50:45.993011Z] restore: sk2Direct inconclusive — falling back to standard restore [2026-04-20T08:51:16.000851Z] restore: timed out after 30s — fallback isPremium=false [2026-04-20T08:51:16.000910Z] restore: completed — succeeded=false foundPurchase=false Unable to reproduce in sandbox — Transaction.all works correctly there. Appears specific to production for a small subset of users. Has anyone else seen this?
20
3
1.6k
1d
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?
3
2
339
2d
"Unable to Manage Sandbox Test Account - Popup Closes on 'Manage' Click"
Issue: Sandbox test account stuck in a loop when trying to access account management Environment: iOS version: [iOS 26.4.2] Device: iPhone 12 Steps to Reproduce: Created sandbox test credentials on Apple Developer site (App Store Connect → Users and Access → Sandbox → Testers) On iPhone, navigated to Settings → Developer → Sandbox Apple Account Clicked "Sign In" and entered sandbox test email and password Successfully verified using verification codes (both email and phone number) Clicked on the signed-in sandbox account A popup appears with "Manage" option Clicked "Manage" Expected Behavior:- Should open sandbox account management interface Actual Behavior:- Popup immediately closes and the same popup reappears. Clicking "Manage" again produces the same result - an endless loop preventing access to account management. Has anyone encountered this issue with sandbox test accounts? Is there a known workaround or fix for this behavior?
2
1
203
2d
SKStoreReviewController requestReviewInScene: does not display review prompt in debug builds on iOS 26.5 beta (23F5043k)
[SKStoreReviewController requestReviewInScene:] no longer displays the review prompt in debug/development builds on iOS 26.5 beta (23F5043k and 23F5043g). According to Apple's documentation, the review prompt should always appear in debug builds to facilitate testing. This was working in previous iOS versions (iOS 26.4 and older). Steps to reproduce: Run app from Xcode in debug configuration on a device running iOS 26.5 beta (23F5043k or 23F5043g) Call [SKStoreReviewController requestReviewInScene:windowScene] with a valid, foreground-active UIWindowScene Observe that the method executes without error (scene is valid per NSLog) but no review prompt appears Expected: Review prompt should display in debug builds Actual: No prompt appears, despite the scene being valid and foreground-active This worked correctly on previous iOS versions (26.4) so looks like this bug was introduced in 26.5 Beta versions. I have already filed a bug report in Feedback Assistant with number: FB22445620
5
0
579
2d
App Review rejection: 3.1.2(c) missing EULA/Privacy links + 2.1(b) IAP error in sandbox; subscriptions show “Developer Action Needed” in App Store Connect
Hi everyone, I’m trying to fix an App Review rejection related to auto‑renewable subscriptions, and I’m also blocked because my subscriptions don’t work in the sandbox even though configuration looks correct. App Review details App version: 3.5.3 Review device: iPhone 17 Pro Max iOS: 26.4 Guidelines: 3.1.2(c) and 2.1(b) Reviewer message says: Missing required subscription metadata links: Terms of Use (EULA) link in App Description (or custom EULA set in App Store Connect) Privacy Policy link in the Privacy Policy field in App Store Connect IAP bug / error during purchase (sandbox testing during review) What I see in App Store Connect My subscription products show “Developer Action Needed”. Subscription group/products are created (monthly + yearly). I believe all required subscription info is filled out (pricing, localization, etc.), but sandbox purchases still fail. Sandbox behavior / issue In Sandbox on device, attempting to purchase or load products results in an error on IAP (reviewer didn’t provide the exact error text). I’m using StoreKit (happy to share whether it’s StoreKit 1 vs StoreKit 2 if that matters) and fetching products by product IDs. Additional blocker: Banking info stuck “Processing” In App Store Connect → Agreements, Tax, and Banking, my banking section shows: “Your banking updates are processing, and you should see the changes in 24 hours. You won't be able to make any additional updates until then.” But the banking status has stayed Processing for more than 2 weeks and never changes. I don’t know how to resolve this, and I suspect it might be related to why subscriptions are failing in sandbox / showing “Developer Action Needed”. Questions: What are the most common reasons subscriptions show “Developer Action Needed” and are rejected/blocked even when the setup seems complete? For Guideline 3.1.2(c): what is the correct place/best practice to provide the required links? Put Apple Standard EULA link in App Description? Add custom EULA in App Store Connect → App Information → EULA? Add Privacy Policy URL in App Store Connect Privacy Policy field (or the dedicated Privacy Policy URL field)? For the sandbox IAP error during review: Could this be caused by agreements / banking stuck in Processing or Paid Apps Agreement not active/accepted (even though the app is free but uses subscriptions)? Can “Developer Action Needed” prevent sandbox transactions from working for reviewers and my tests? Any recommended step-by-step checklist to validate subscriptions end-to-end (agreements, banking/tax, subscription metadata, product status, storefront, etc.)? Has anyone seen banking updates stuck in Processing for weeks? What is the best way to resolve it (waiting, re-submitting banking info, contacting Apple, specific support channel)?
1
0
313
3d
StoreKit purchase cancelled after app backgrounding during bank authentication (3D Secure)
Hello, We are experiencing an issue with StoreKit purchases on iOS. Some users are required by their bank to complete an additional authentication step (3D Secure / banking app validation) during an in-app purchase subscription flow. The purchase starts correctly and StoreKit displays the purchase sheet. When the user temporarily leaves the app to validate the payment in their banking application and then returns, StoreKit eventually reports the purchase as cancelled. No transaction is delivered to StoreKit observers, no entitlement becomes active, and restoring purchases does not find any completed transaction. Steps to reproduce: Open the app. Start an auto-renewable subscription purchase using StoreKit. Authenticate with Apple ID if requested. When the bank authentication screen appears, leave the app and open the banking application. Approve the payment in the banking application. Return to the original app. Observed result: StoreKit reports the purchase as cancelled and no transaction is received. Expected result: The transaction should continue processing after bank authentication and eventually complete successfully. Environment: Xcode 26.3 (17C529) macOS Tahoe 26.3 iOS 26.2.1 Physical iPhone device Question: Is this expected StoreKit behavior when a user leaves the app for external banking authentication, or is there a recommended StoreKit integration pattern that should allow the purchase flow to continue successfully? Thank you.
0
0
58
5d
Region-by-region App Store payment compliance: when is Apple IAP required vs external payments like Stripe?
Hi everyone, I’m based in Europe, and I’m trying to fully understand the current App Store payment rules for an iOS app that sells digital services or premium functionality used inside the app. My goal is not to bypass App Store rules, but to implement the correct, compliant payment flow depending on the user’s region and the App Store requirements that apply there. The app would offer things like premium features, credits, or access to digital functionality inside the iOS app. The payment flow I would ideally like to support, where allowed, is: iOS app -> Cloud ahndling -> Stripe Checkout page -> user pays -> Stripe handling -> my backend marks the user as premium What I’m trying to understand is whether this flow is allowed, restricted, or prohibited depending on the user’s App Store storefront / region. My questions are: For digital goods, subscriptions, credits, or premium features used inside an iOS app, is Apple In-App Purchase still required by default? In which regions, exactly, can an iOS app use or link to an external payment provider such as Stripe for digital services used inside the app? For users in the United States, after the Epic Games v. Apple changes, can an app show an external payment option such as “Subscribe on the web” or “Pay with Stripe”? If yes, what are the exact requirements, limitations, wording rules, Apple fees, or reporting obligations? For users in the European Union, under the DMA-related rules, does Apple allow external purchases through Stripe or a web checkout? If yes, do I need specific Apple entitlements, StoreKit External Purchase APIs, Apple approval, transaction reporting, or payment of Apple fees? For the rest of the world, should I assume that Apple IAP is mandatory for digital content, subscriptions, credits, and premium app functionality unless Apple has a specific regional program allowing external payments? What is the correct way to determine which payment flow a user should see? Should this be based on the user’s App Store storefront / StoreKit storefront, rather than IP address, device locale, billing address, or country selected manually by the user? Would a regional routing approach like this be compliant? if App Store storefront == US: show Apple-compliant external purchase link / Stripe option if allowed elif App Store storefront is in the EU and the app has the required Apple entitlement: show Apple-compliant external purchase flow else: show Apple In-App Purchase only If a user pays through Stripe or another external checkout in a region where external payments are allowed, can my backend unlock premium features inside the iOS app? Or are there restrictions on granting access inside the app when the purchase was not completed through Apple IAP? For a first App Store release, is the safest approach to launch with Apple IAP only, then later add external payment options only in regions where Apple explicitly allows them? For developers who have recently submitted apps with external payment links for digital services: Which countries or storefronts were accepted? Did App Review require special entitlements? Were there specific wording or UI requirements? Did Apple require transaction reporting or apply additional fees? Were there differences between the US, EU, and other regions? In short, I’m trying to understand the practical compliant architecture: iOS app = Apple IAP by default external Stripe / web checkout = only where regionally allowed by Apple backend = unlock premium access after valid payment, whether Apple IAP or approved external payment payment UI = adapted based on App Store storefront / region I would really appreciate answers from developers, App Review experiences, or anyone familiar with the current Apple rules after the Epic ruling, DMA changes, and Apple’s External Purchase Link / StoreKit External Purchase programs. Thanks!
5
0
241
5d
Subscriptions Stuck in review
Hello! My subscriptions have been stuck in review for a while. I have been chasing my tail trying to get the sandbox purchases to work but the subscriptions are not returning after "sale". Is this because the subscriptions are still in review? Will the purchase ever return a product in the sandbox environment if the products are still in review? How do we get the subscriptions approved? I have submitted them with the app multiple times. The app is rejected because I can't complete it without the subscriptions but the subscriptions are never reviewed. Help!
1
0
158
6d
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
266
6d
Show StoreKit errors as custom alert
Hi, I am planning to show the StoreKitError as alerts, I have corresponding custom Error so that I can show meaningful error messages. Reason I wanted to display error alert messages that describe the underlying error so that when in production and user faces this error I would be able to reason about the error and try to resolve the error in a app update or Appstore Connect change. If I display a generic error I wouldn't know the cause of the error, but is there is a security risk in display the following kind of messages? Proposed UI error messages: | Error | UI alert message | | ------------------------------------ | ----------------------------------------------- | | StoreKitError.notEntitled | App is not entitled to make this request. | | PurchaseError.invalidOfferSignature | Invalid offer signature. | Questions From a security / user perspective is it risky / wrong to show an error message like the ones pasted above? Or are there some errors I shouldn't explicitly state? Or is there a better / preferred approach?
0
1
79
1w
StoreKit 2 Product.displayPrice returns USD while purchase dialog shows EUR
Hi, I'm testing my first auto-renewable subscription using StoreKit 2 and TestFlight. When loading products via: let products = try await Product.products(for: ids) the product is returned successfully, but product.displayPrice shows: $4.99 even though: My App Store account is located in Germany. The app is only intended for the German market. The native Apple purchase sheet displays the correct price in EUR. The subscription pricing is configured correctly in App Store Connect. The subscription is still in "Ready to Submit / Prepare for Submission" state and has not yet been approved. Example: print(product.displayPrice) returns: $4.99 while the StoreKit purchase dialog shows: 5,99 € Has anyone seen this behavior before? Is this expected for new subscriptions in TestFlight/Sandbox before the first App Review approval, or could there be another reason why displayPrice differs from the actual purchase dialog? Thanks!
1
0
200
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?
2
0
306
1w
In-app purchase fails on Apple Silicon Mac
I'm testing IPhone and iPad Apps on Apple Silicon Macs. When I purchase In-app product in the app on Apple Silicon Mac, the payment receipt is not created, so the purchase fails. In console log, it says it doesn't have permission to write to the file. storekitagent [6913DE38_SK1] Error writing receipt (5095 bytes) to file:///Users/XXXX/Library/Containers/90FE2A60-9FDF-4ECF-848F-CE3D396322CA/Data/StoreKit/sandboxReceipt: Error Domain=NSCocoaErrorDomain Code=513 "You don’t have permission to save the file “sandboxReceipt” in the folder “StoreKit”" UserInfo={NSFilePath=/Users/XXXX/Library/Containers/90FE2A60-9FDF-4ECF-848F-CE3D396322CA/Data/StoreKit/sandboxReceipt, NSUnderlyingError=0x14202c920 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"}} The App is using Original API for In-App Purchase written in Objective-C. When I purchase in-app product, the app calls SKPaymentQueue::addPayment. And then it gets paymentQueue:updatedTransactions callback with SKPaymentTransactionStatePurchased. This means that the payment was successful. But the receipt is not created so I can't continue the after process. I'm testing with sandbox in-app purchase. I have tested several times and confirmed that on macOS Monterey 12.2 the receipt is created successfully, but on macOS Ventura 13.2 the receipt isn't created. I think there is something to do with macOS version. Does anyone have any solutions? Here is a very similar thread on apple developer forum. (And there too has no anwsers)  https://developer.apple.com/forums/thread/719505
8
0
1.8k
1w
"In-App Purchases and Subscriptions" section missing from version page — cannot submit subscriptions with binary
I have an iOS app with two auto-renewable subscriptions (monthly and annual) that are fully configured and ready for their first submission. Both products have complete metadata, pricing, localizations, review screenshots, and review notes. The problem: The "In-App Purchases and Subscriptions" section does not appear on the version preparation page. It should appear between "App Review Information" and "App Store Version Release," but it's missing entirely. This means I cannot link the subscriptions to my app version for a combined submission. How I got here: I initially submitted the subscriptions for review independently (via the "Submit for Review" button on the subscription product page), not realizing they needed to be submitted alongside a binary. This resulted in a Guideline 3.1.1 rejection. I then created a new app version with a build, but the "In-App Purchases and Subscriptions" section did not appear on the version page. Not realizing this section should exist, I submitted the app — it was approved and published without the subscriptions. I have since created another new version with a fresh build. The app version, monthly subscription, and yearly subscription are all in "Ready to Submit" state. The section still does not appear. What I've verified: All subscription metadata is complete (pricing, localizations, review screenshots, review notes) Subscription group has a localization A new app version is in "Prepare for Submission" with a build uploaded All business/agreements/tax/banking setup is complete The app has no consumable or non-consumable IAPs — only auto-renewable subscriptions All subscription testing appears to work I've reviewed other forum threads with the same issue (e.g., https://developer.apple.com/forums/thread/778258) and followed all suggestions Environment: App uses StoreKit 2 via Flutter in_app_purchase plugin Two products: monthly and annual auto-renewable subscriptions First-time IAP submission for this app App is currently live on the App Store I opened a Developer Support ticket 7 days ago and have not yet received a resolution. Has anyone encountered this issue and found a workaround? Is there a way to reset the subscription review state so they can be properly linked to a version?
1
0
310
1w
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
95
Activity
1w
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
1
Boosts
2
Views
90
Activity
2h
AppTransaction.shared throws StoreKitError code=2 in macOS TestFlight while deviceVerificationID is available
I am implementing device authentication for a macOS app. Our iOS app uses App Attest, but App Attest is not available on macOS, so we are evaluating StoreKit's AppTransaction plus AppStore.deviceVerificationID as the macOS equivalent signal. The issue: in a macOS app installed through TestFlight, AppStore.deviceVerificationID is available, but AppTransaction.shared throws StoreKitError code=2. I reproduced this in a focused standalone macOS test app with no backend and no custom dependencies. Environment: Platform: macOS Distribution: TestFlight App Store Connect app ID: 6769568350 Bundle ID: com.soundcity.AppTransactionProbe App version: 1.0 Build: 1 Observed output from the TestFlight-installed app: Bundle ID: com.soundcity.AppTransactionProbe App version: 1.0 Build: 1 deviceVerificationID available: true deviceVerificationID prefix: CA91ED5D... AppTransaction.shared threw error: StoreKitError; domain=StoreKit.StoreKitError; code=2 The relevant code path is essentially: import StoreKit let deviceVerificationID = try? AppStore.deviceVerificationID let appTransaction = try await AppTransaction.shared In the TestFlight-installed build: AppStore.deviceVerificationID succeeds. AppTransaction.shared throws StoreKitError code=2. Questions: Is AppTransaction.shared expected to work for macOS apps distributed through TestFlight? If yes, what does StoreKitError code=2 indicate in this context, and what setup might be missing? If no, is there an Apple-supported way to obtain an AppTransaction JWS, or equivalent signed App Store/TestFlight app-install assertion, for macOS TestFlight builds? For macOS apps that need a device-bound trust signal comparable to iOS App Attest, is AppStore.deviceVerificationID intended to be used without AppTransaction.shared, or should these APIs be used together? I have a focused Xcode test project that demonstrates the issue and can share it if helpful.
Replies
2
Boosts
0
Views
256
Activity
1d
StoreKit 2: Transaction.all and Transaction.currentEntitlements return empty for valid non-consumable purchases in production
FB: https://feedbackassistant.apple.com/feedback/22556883 We're seeing a small number of production users where both Transaction.currentEntitlements and Transaction.all return zero transactions for a valid, active, non-refunded non-consumable IAP. This makes it impossible to restore the purchase via any StoreKit 2 API. Environment: Xcode 26.4 (Build 17E192) iOS 26.4.1 Direct call to SK2 Transactions.all & Flutter in_app_purchase package v3.2.3 (uses SK2 on iOS 15+) Non-consumable IAP (one-time purchase) What we observe: AppStore.sync() triggers but the purchase stream returns 0 transactions Transaction.all returns empty Transaction.currentEntitlements also returns empty User is confirmed on the correct Apple ID Issue reproduces on both iPhone and Mac for the same Apple ID Issue appears to have started recently for users who previously had no problems Debug log from affected production user: [2026-04-20T08:50:10.744115Z] init: iapAvailable=true [2026-04-20T08:50:10.744566Z] init: isPremium=false [2026-04-20T08:50:10.744567Z] init: triggering silent restorePurchases [2026-04-20T08:50:45.974566Z] restore: started [2026-04-20T08:50:45.986848Z] restore: sk2Transactions count=0 [2026-04-20T08:50:45.993004Z] restore: sk2Direct isVerified=false active=null [2026-04-20T08:50:45.993011Z] restore: sk2Direct inconclusive — falling back to standard restore [2026-04-20T08:51:16.000851Z] restore: timed out after 30s — fallback isPremium=false [2026-04-20T08:51:16.000910Z] restore: completed — succeeded=false foundPurchase=false Unable to reproduce in sandbox — Transaction.all works correctly there. Appears specific to production for a small subset of users. Has anyone else seen this?
Replies
20
Boosts
3
Views
1.6k
Activity
1d
iOS 27 Annual Subscription with Monthly Billing
With the new annual subscription billed monthly in iOS 27 — what's the StoreKit 2 implementation pattern, and how does App Store Server Notifications handle the monthly charge events versus the annual renewal event?
Replies
0
Boosts
0
Views
30
Activity
2d
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
3
Boosts
2
Views
339
Activity
2d
"Unable to Manage Sandbox Test Account - Popup Closes on 'Manage' Click"
Issue: Sandbox test account stuck in a loop when trying to access account management Environment: iOS version: [iOS 26.4.2] Device: iPhone 12 Steps to Reproduce: Created sandbox test credentials on Apple Developer site (App Store Connect → Users and Access → Sandbox → Testers) On iPhone, navigated to Settings → Developer → Sandbox Apple Account Clicked "Sign In" and entered sandbox test email and password Successfully verified using verification codes (both email and phone number) Clicked on the signed-in sandbox account A popup appears with "Manage" option Clicked "Manage" Expected Behavior:- Should open sandbox account management interface Actual Behavior:- Popup immediately closes and the same popup reappears. Clicking "Manage" again produces the same result - an endless loop preventing access to account management. Has anyone encountered this issue with sandbox test accounts? Is there a known workaround or fix for this behavior?
Replies
2
Boosts
1
Views
203
Activity
2d
SKStoreReviewController requestReviewInScene: does not display review prompt in debug builds on iOS 26.5 beta (23F5043k)
[SKStoreReviewController requestReviewInScene:] no longer displays the review prompt in debug/development builds on iOS 26.5 beta (23F5043k and 23F5043g). According to Apple's documentation, the review prompt should always appear in debug builds to facilitate testing. This was working in previous iOS versions (iOS 26.4 and older). Steps to reproduce: Run app from Xcode in debug configuration on a device running iOS 26.5 beta (23F5043k or 23F5043g) Call [SKStoreReviewController requestReviewInScene:windowScene] with a valid, foreground-active UIWindowScene Observe that the method executes without error (scene is valid per NSLog) but no review prompt appears Expected: Review prompt should display in debug builds Actual: No prompt appears, despite the scene being valid and foreground-active This worked correctly on previous iOS versions (26.4) so looks like this bug was introduced in 26.5 Beta versions. I have already filed a bug report in Feedback Assistant with number: FB22445620
Replies
5
Boosts
0
Views
579
Activity
2d
How to receive External Purchase Entitlement for Russia?
Is there any way to activate Storekit External Purchase Entitlements in Russian region currently? External Purchase documentation's form link for this specific region is not working. Is there a workaround to register for it?
Replies
1
Boosts
0
Views
179
Activity
3d
App Review rejection: 3.1.2(c) missing EULA/Privacy links + 2.1(b) IAP error in sandbox; subscriptions show “Developer Action Needed” in App Store Connect
Hi everyone, I’m trying to fix an App Review rejection related to auto‑renewable subscriptions, and I’m also blocked because my subscriptions don’t work in the sandbox even though configuration looks correct. App Review details App version: 3.5.3 Review device: iPhone 17 Pro Max iOS: 26.4 Guidelines: 3.1.2(c) and 2.1(b) Reviewer message says: Missing required subscription metadata links: Terms of Use (EULA) link in App Description (or custom EULA set in App Store Connect) Privacy Policy link in the Privacy Policy field in App Store Connect IAP bug / error during purchase (sandbox testing during review) What I see in App Store Connect My subscription products show “Developer Action Needed”. Subscription group/products are created (monthly + yearly). I believe all required subscription info is filled out (pricing, localization, etc.), but sandbox purchases still fail. Sandbox behavior / issue In Sandbox on device, attempting to purchase or load products results in an error on IAP (reviewer didn’t provide the exact error text). I’m using StoreKit (happy to share whether it’s StoreKit 1 vs StoreKit 2 if that matters) and fetching products by product IDs. Additional blocker: Banking info stuck “Processing” In App Store Connect → Agreements, Tax, and Banking, my banking section shows: “Your banking updates are processing, and you should see the changes in 24 hours. You won't be able to make any additional updates until then.” But the banking status has stayed Processing for more than 2 weeks and never changes. I don’t know how to resolve this, and I suspect it might be related to why subscriptions are failing in sandbox / showing “Developer Action Needed”. Questions: What are the most common reasons subscriptions show “Developer Action Needed” and are rejected/blocked even when the setup seems complete? For Guideline 3.1.2(c): what is the correct place/best practice to provide the required links? Put Apple Standard EULA link in App Description? Add custom EULA in App Store Connect → App Information → EULA? Add Privacy Policy URL in App Store Connect Privacy Policy field (or the dedicated Privacy Policy URL field)? For the sandbox IAP error during review: Could this be caused by agreements / banking stuck in Processing or Paid Apps Agreement not active/accepted (even though the app is free but uses subscriptions)? Can “Developer Action Needed” prevent sandbox transactions from working for reviewers and my tests? Any recommended step-by-step checklist to validate subscriptions end-to-end (agreements, banking/tax, subscription metadata, product status, storefront, etc.)? Has anyone seen banking updates stuck in Processing for weeks? What is the best way to resolve it (waiting, re-submitting banking info, contacting Apple, specific support channel)?
Replies
1
Boosts
0
Views
313
Activity
3d
StoreKit purchase cancelled after app backgrounding during bank authentication (3D Secure)
Hello, We are experiencing an issue with StoreKit purchases on iOS. Some users are required by their bank to complete an additional authentication step (3D Secure / banking app validation) during an in-app purchase subscription flow. The purchase starts correctly and StoreKit displays the purchase sheet. When the user temporarily leaves the app to validate the payment in their banking application and then returns, StoreKit eventually reports the purchase as cancelled. No transaction is delivered to StoreKit observers, no entitlement becomes active, and restoring purchases does not find any completed transaction. Steps to reproduce: Open the app. Start an auto-renewable subscription purchase using StoreKit. Authenticate with Apple ID if requested. When the bank authentication screen appears, leave the app and open the banking application. Approve the payment in the banking application. Return to the original app. Observed result: StoreKit reports the purchase as cancelled and no transaction is received. Expected result: The transaction should continue processing after bank authentication and eventually complete successfully. Environment: Xcode 26.3 (17C529) macOS Tahoe 26.3 iOS 26.2.1 Physical iPhone device Question: Is this expected StoreKit behavior when a user leaves the app for external banking authentication, or is there a recommended StoreKit integration pattern that should allow the purchase flow to continue successfully? Thank you.
Replies
0
Boosts
0
Views
58
Activity
5d
Region-by-region App Store payment compliance: when is Apple IAP required vs external payments like Stripe?
Hi everyone, I’m based in Europe, and I’m trying to fully understand the current App Store payment rules for an iOS app that sells digital services or premium functionality used inside the app. My goal is not to bypass App Store rules, but to implement the correct, compliant payment flow depending on the user’s region and the App Store requirements that apply there. The app would offer things like premium features, credits, or access to digital functionality inside the iOS app. The payment flow I would ideally like to support, where allowed, is: iOS app -> Cloud ahndling -> Stripe Checkout page -> user pays -> Stripe handling -> my backend marks the user as premium What I’m trying to understand is whether this flow is allowed, restricted, or prohibited depending on the user’s App Store storefront / region. My questions are: For digital goods, subscriptions, credits, or premium features used inside an iOS app, is Apple In-App Purchase still required by default? In which regions, exactly, can an iOS app use or link to an external payment provider such as Stripe for digital services used inside the app? For users in the United States, after the Epic Games v. Apple changes, can an app show an external payment option such as “Subscribe on the web” or “Pay with Stripe”? If yes, what are the exact requirements, limitations, wording rules, Apple fees, or reporting obligations? For users in the European Union, under the DMA-related rules, does Apple allow external purchases through Stripe or a web checkout? If yes, do I need specific Apple entitlements, StoreKit External Purchase APIs, Apple approval, transaction reporting, or payment of Apple fees? For the rest of the world, should I assume that Apple IAP is mandatory for digital content, subscriptions, credits, and premium app functionality unless Apple has a specific regional program allowing external payments? What is the correct way to determine which payment flow a user should see? Should this be based on the user’s App Store storefront / StoreKit storefront, rather than IP address, device locale, billing address, or country selected manually by the user? Would a regional routing approach like this be compliant? if App Store storefront == US: show Apple-compliant external purchase link / Stripe option if allowed elif App Store storefront is in the EU and the app has the required Apple entitlement: show Apple-compliant external purchase flow else: show Apple In-App Purchase only If a user pays through Stripe or another external checkout in a region where external payments are allowed, can my backend unlock premium features inside the iOS app? Or are there restrictions on granting access inside the app when the purchase was not completed through Apple IAP? For a first App Store release, is the safest approach to launch with Apple IAP only, then later add external payment options only in regions where Apple explicitly allows them? For developers who have recently submitted apps with external payment links for digital services: Which countries or storefronts were accepted? Did App Review require special entitlements? Were there specific wording or UI requirements? Did Apple require transaction reporting or apply additional fees? Were there differences between the US, EU, and other regions? In short, I’m trying to understand the practical compliant architecture: iOS app = Apple IAP by default external Stripe / web checkout = only where regionally allowed by Apple backend = unlock premium access after valid payment, whether Apple IAP or approved external payment payment UI = adapted based on App Store storefront / region I would really appreciate answers from developers, App Review experiences, or anyone familiar with the current Apple rules after the Epic ruling, DMA changes, and Apple’s External Purchase Link / StoreKit External Purchase programs. Thanks!
Replies
5
Boosts
0
Views
241
Activity
5d
Subscriptions Stuck in review
Hello! My subscriptions have been stuck in review for a while. I have been chasing my tail trying to get the sandbox purchases to work but the subscriptions are not returning after "sale". Is this because the subscriptions are still in review? Will the purchase ever return a product in the sandbox environment if the products are still in review? How do we get the subscriptions approved? I have submitted them with the app multiple times. The app is rejected because I can't complete it without the subscriptions but the subscriptions are never reviewed. Help!
Replies
1
Boosts
0
Views
158
Activity
6d
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
266
Activity
6d
Show StoreKit errors as custom alert
Hi, I am planning to show the StoreKitError as alerts, I have corresponding custom Error so that I can show meaningful error messages. Reason I wanted to display error alert messages that describe the underlying error so that when in production and user faces this error I would be able to reason about the error and try to resolve the error in a app update or Appstore Connect change. If I display a generic error I wouldn't know the cause of the error, but is there is a security risk in display the following kind of messages? Proposed UI error messages: | Error | UI alert message | | ------------------------------------ | ----------------------------------------------- | | StoreKitError.notEntitled | App is not entitled to make this request. | | PurchaseError.invalidOfferSignature | Invalid offer signature. | Questions From a security / user perspective is it risky / wrong to show an error message like the ones pasted above? Or are there some errors I shouldn't explicitly state? Or is there a better / preferred approach?
Replies
0
Boosts
1
Views
79
Activity
1w
StoreKit 2 Product.displayPrice returns USD while purchase dialog shows EUR
Hi, I'm testing my first auto-renewable subscription using StoreKit 2 and TestFlight. When loading products via: let products = try await Product.products(for: ids) the product is returned successfully, but product.displayPrice shows: $4.99 even though: My App Store account is located in Germany. The app is only intended for the German market. The native Apple purchase sheet displays the correct price in EUR. The subscription pricing is configured correctly in App Store Connect. The subscription is still in "Ready to Submit / Prepare for Submission" state and has not yet been approved. Example: print(product.displayPrice) returns: $4.99 while the StoreKit purchase dialog shows: 5,99 € Has anyone seen this behavior before? Is this expected for new subscriptions in TestFlight/Sandbox before the first App Review approval, or could there be another reason why displayPrice differs from the actual purchase dialog? Thanks!
Replies
1
Boosts
0
Views
200
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
2
Boosts
0
Views
306
Activity
1w
Downgrade during a Free Trial period
Could you help clarify the expected behavior in downgrade scenarios during a Free Trial period? Does Apple trigger billing immediately for the downgraded plan, or does the change take effect only after the Free Trial window completes?
Replies
0
Boosts
0
Views
68
Activity
1w
In-app purchase fails on Apple Silicon Mac
I'm testing IPhone and iPad Apps on Apple Silicon Macs. When I purchase In-app product in the app on Apple Silicon Mac, the payment receipt is not created, so the purchase fails. In console log, it says it doesn't have permission to write to the file. storekitagent [6913DE38_SK1] Error writing receipt (5095 bytes) to file:///Users/XXXX/Library/Containers/90FE2A60-9FDF-4ECF-848F-CE3D396322CA/Data/StoreKit/sandboxReceipt: Error Domain=NSCocoaErrorDomain Code=513 "You don’t have permission to save the file “sandboxReceipt” in the folder “StoreKit”" UserInfo={NSFilePath=/Users/XXXX/Library/Containers/90FE2A60-9FDF-4ECF-848F-CE3D396322CA/Data/StoreKit/sandboxReceipt, NSUnderlyingError=0x14202c920 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"}} The App is using Original API for In-App Purchase written in Objective-C. When I purchase in-app product, the app calls SKPaymentQueue::addPayment. And then it gets paymentQueue:updatedTransactions callback with SKPaymentTransactionStatePurchased. This means that the payment was successful. But the receipt is not created so I can't continue the after process. I'm testing with sandbox in-app purchase. I have tested several times and confirmed that on macOS Monterey 12.2 the receipt is created successfully, but on macOS Ventura 13.2 the receipt isn't created. I think there is something to do with macOS version. Does anyone have any solutions? Here is a very similar thread on apple developer forum. (And there too has no anwsers)  https://developer.apple.com/forums/thread/719505
Replies
8
Boosts
0
Views
1.8k
Activity
1w
"In-App Purchases and Subscriptions" section missing from version page — cannot submit subscriptions with binary
I have an iOS app with two auto-renewable subscriptions (monthly and annual) that are fully configured and ready for their first submission. Both products have complete metadata, pricing, localizations, review screenshots, and review notes. The problem: The "In-App Purchases and Subscriptions" section does not appear on the version preparation page. It should appear between "App Review Information" and "App Store Version Release," but it's missing entirely. This means I cannot link the subscriptions to my app version for a combined submission. How I got here: I initially submitted the subscriptions for review independently (via the "Submit for Review" button on the subscription product page), not realizing they needed to be submitted alongside a binary. This resulted in a Guideline 3.1.1 rejection. I then created a new app version with a build, but the "In-App Purchases and Subscriptions" section did not appear on the version page. Not realizing this section should exist, I submitted the app — it was approved and published without the subscriptions. I have since created another new version with a fresh build. The app version, monthly subscription, and yearly subscription are all in "Ready to Submit" state. The section still does not appear. What I've verified: All subscription metadata is complete (pricing, localizations, review screenshots, review notes) Subscription group has a localization A new app version is in "Prepare for Submission" with a build uploaded All business/agreements/tax/banking setup is complete The app has no consumable or non-consumable IAPs — only auto-renewable subscriptions All subscription testing appears to work I've reviewed other forum threads with the same issue (e.g., https://developer.apple.com/forums/thread/778258) and followed all suggestions Environment: App uses StoreKit 2 via Flutter in_app_purchase plugin Two products: monthly and annual auto-renewable subscriptions First-time IAP submission for this app App is currently live on the App Store I opened a Developer Support ticket 7 days ago and have not yet received a resolution. Has anyone encountered this issue and found a workaround? Is there a way to reset the subscription review state so they can be properly linked to a version?
Replies
1
Boosts
0
Views
310
Activity
1w