Post

Replies

Boosts

Views

Activity

Reply to Transaction.unfinished not getting unfinished transactions
Hello, I can confirm that there is a bug in iOS 26.4.2 when testing local StoreKit 2 in Xcode. The Transaction.unfinished loop has nothing inside, although the transaction manager clearly shows there are unfinished transactions. If testing it on iOS 18.6 (only on simulator), it will loop through unfinished and successfully clear any unfinished transactions. Also it might be possible that the local storekit daemon is out of sync, I have filed a bug report for that under: Transaction.currentEntitlements sometimes does not emit a result until device is reboot (FB22349195)
Topic: App & System Services SubTopic: StoreKit Tags:
5d
Reply to StoreKit Sandbox – Unfinished Consumable Transaction Across Devices
As far as I know, the active listener task should finish the transaction. Otherwise you have to setup a listener for Transaction.unfinished, found below: https://developer.apple.com/documentation/storekit/transaction/unfinished A transaction is unfinished until you call finish(). Use the unfinished sequence to find the transactions your app needs to process to deliver purchased content or enable service.
Mar ’26
Reply to Why doesn’t Transaction.updates emit reliably?
I have run some tests on my copy of StoreKit testing project. When the app is not active, and a renewal comes through, it will be unfinished. The listener task you have in Transaction.updates might not catch it. Question: Does your app handle unfinished transactions? You need to listen for Transaction.unfinished, and finish any verified transactions. Either call it on the next launch, or create another Task to listen for unfinished. func processUnfinishedTransactions() async { for await result in Transaction.unfinished { switch result { case .verified(let verified): // Always finish verified transactions await verified.finish() case .unverified(let unverified, _): // Handle unverified } } } If you check the Understanding StoreKit Workflows sample from WWDC25, notice they have 3 things going on in the Store.swift file: Task(priority: .background) { // Finish any unfinished transactions -- for example, if the app was terminated before finishing a transaction. for await verificationResult in Transaction.unfinished { await handle(updatedTransaction: verificationResult) } // Fetch current entitlements for all product types except consumables. for await verificationResult in Transaction.currentEntitlements { await handle(updatedTransaction: verificationResult) } } Task(priority: .background) { for await verificationResult in Transaction.updates { await handle(updatedTransaction: verificationResult) } } Although it uses @Observable, your shared singleton should be able to keep these tasks alive. The same principles apply.
Topic: App & System Services SubTopic: StoreKit Tags:
Feb ’26
Reply to Why doesn’t Transaction.updates emit reliably?
Your listenerTask will update the purchasedProducts/purchasedSubscriptions. If there is any change in the Transaction.updates, you can update the array. With Observable, your views will update accordingly to this change. Take a look at the WWDC25 sample on Understanding StoreKit workflows. https://developer.apple.com/documentation/StoreKit/understanding-storekit-workflows
Topic: App & System Services SubTopic: StoreKit Tags:
Feb ’26
Reply to Why doesn’t Transaction.updates emit reliably?
Update the customer product status using for await result in Transaction.currentEntitlements { // Verify transaction and append to the product items/subscription items. } Also its better to use @Observable class on your InAppPurchaseManager instead of a shared singleton, especially if your project is iOS 17+. You would have: var purchasedProducts: [Product] = [] var purchasedSubscriptions: [Product] = [] Check out tutorials online on how to create Observable StoreKit 2 manager.
Topic: App & System Services SubTopic: StoreKit Tags:
Feb ’26
Reply to Transaction.unfinished not getting unfinished transactions
Hello, I can confirm that there is a bug in iOS 26.4.2 when testing local StoreKit 2 in Xcode. The Transaction.unfinished loop has nothing inside, although the transaction manager clearly shows there are unfinished transactions. If testing it on iOS 18.6 (only on simulator), it will loop through unfinished and successfully clear any unfinished transactions. Also it might be possible that the local storekit daemon is out of sync, I have filed a bug report for that under: Transaction.currentEntitlements sometimes does not emit a result until device is reboot (FB22349195)
Topic: App & System Services SubTopic: StoreKit Tags:
Replies
Boosts
Views
Activity
5d
Reply to iCloud Sync not working with iPhone, works fine for Mac.
I have tested my apps, the sync issues have been fixed in iOS 26.4.1. Cross syncing between 26.4.1 and 26.5 beta works fine too.
Replies
Boosts
Views
Activity
3w
Reply to iCloud Sync not working with iPhone, works fine for Mac.
Tested my app which uses CloudKit automatic configuration. The data will sync correctly on iOS 26.5 beta 1 now. Hope Apple will push an update for 26.4.1 soon.
Replies
Boosts
Views
Activity
Apr ’26
Reply to how to disable streamline purchasing
Have you included listening for purchase intents using the PurchaseIntent API (https://developer.apple.com/documentation/storekit/purchaseintent)
Topic: App & System Services SubTopic: StoreKit Tags:
Replies
Boosts
Views
Activity
Mar ’26
Reply to StoreKit Sandbox – Unfinished Consumable Transaction Across Devices
As far as I know, the active listener task should finish the transaction. Otherwise you have to setup a listener for Transaction.unfinished, found below: https://developer.apple.com/documentation/storekit/transaction/unfinished A transaction is unfinished until you call finish(). Use the unfinished sequence to find the transactions your app needs to process to deliver purchased content or enable service.
Replies
Boosts
Views
Activity
Mar ’26
Reply to Why doesn’t Transaction.updates emit reliably?
What if you check Transaction.currentEntitlements on every NSApplication.willBecomeActiveNotification or NSApplication.didBecomeActiveNotification, does the renewal transaction get reflected?
Topic: App & System Services SubTopic: StoreKit Tags:
Replies
Boosts
Views
Activity
Feb ’26
Reply to StoreKit2 Coexistence Issues with Original StoreKit
StoreKit 2 has a Transaction.unfinished. A sequence that emits unfinished transactions for the customer. Use the unfinished sequence to find the transactions your app needs to process to deliver purchased content or enable service.
Topic: App & System Services SubTopic: StoreKit Tags:
Replies
Boosts
Views
Activity
Feb ’26
Reply to Why doesn’t Transaction.updates emit reliably?
I have run some tests on my copy of StoreKit testing project. When the app is not active, and a renewal comes through, it will be unfinished. The listener task you have in Transaction.updates might not catch it. Question: Does your app handle unfinished transactions? You need to listen for Transaction.unfinished, and finish any verified transactions. Either call it on the next launch, or create another Task to listen for unfinished. func processUnfinishedTransactions() async { for await result in Transaction.unfinished { switch result { case .verified(let verified): // Always finish verified transactions await verified.finish() case .unverified(let unverified, _): // Handle unverified } } } If you check the Understanding StoreKit Workflows sample from WWDC25, notice they have 3 things going on in the Store.swift file: Task(priority: .background) { // Finish any unfinished transactions -- for example, if the app was terminated before finishing a transaction. for await verificationResult in Transaction.unfinished { await handle(updatedTransaction: verificationResult) } // Fetch current entitlements for all product types except consumables. for await verificationResult in Transaction.currentEntitlements { await handle(updatedTransaction: verificationResult) } } Task(priority: .background) { for await verificationResult in Transaction.updates { await handle(updatedTransaction: verificationResult) } } Although it uses @Observable, your shared singleton should be able to keep these tasks alive. The same principles apply.
Topic: App & System Services SubTopic: StoreKit Tags:
Replies
Boosts
Views
Activity
Feb ’26
Reply to App Review cannot complete auto-renewable subscription purchase (Guideline 2.1) although sandbox & TestFlight work
Did you check for unfinished transactions? In certain conditions, e.g. network issues, there might be unfinished transactions which will block purchasing the same subscription product.
Topic: App & System Services SubTopic: StoreKit Tags:
Replies
Boosts
Views
Activity
Feb ’26
Reply to StoreKit Sandbox – Unfinished Consumable Transaction Across Devices
When you call the purchase method, verify the transaction, then call finish. If Device A completes the purchasing flow, the transaction is finished.
Replies
Boosts
Views
Activity
Feb ’26
Reply to Why doesn’t Transaction.updates emit reliably?
Your listenerTask will update the purchasedProducts/purchasedSubscriptions. If there is any change in the Transaction.updates, you can update the array. With Observable, your views will update accordingly to this change. Take a look at the WWDC25 sample on Understanding StoreKit workflows. https://developer.apple.com/documentation/StoreKit/understanding-storekit-workflows
Topic: App & System Services SubTopic: StoreKit Tags:
Replies
Boosts
Views
Activity
Feb ’26
Reply to TestFlight In-App Purchase (Consumable) gets stuck when using real Apple ID – cannot repurchase even after finishTransaction
Do you have check for unfinished transactions? Loop through Transaction.unfinished() and finish any verified ones. I had this error back in December because I realized I had unfinished transactions and it will block any purchases.
Topic: App & System Services SubTopic: StoreKit Tags:
Replies
Boosts
Views
Activity
Feb ’26
Reply to Why doesn’t Transaction.updates emit reliably?
Update the customer product status using for await result in Transaction.currentEntitlements { // Verify transaction and append to the product items/subscription items. } Also its better to use @Observable class on your InAppPurchaseManager instead of a shared singleton, especially if your project is iOS 17+. You would have: var purchasedProducts: [Product] = [] var purchasedSubscriptions: [Product] = [] Check out tutorials online on how to create Observable StoreKit 2 manager.
Topic: App & System Services SubTopic: StoreKit Tags:
Replies
Boosts
Views
Activity
Feb ’26
Reply to Purchase Intent does not work when app has been launched
Filed a feedback report under FB21767675 (Purchase Intent API does not tigger confirmation dialog to complete the purchase on iOS 26)
Topic: App & System Services SubTopic: StoreKit Tags:
Replies
Boosts
Views
Activity
Jan ’26
Reply to Purchase Intent does not work when app has been launched
I double checked the PurchaseIntent methods, it is only working on iOS 18+. Tested on simulator iOS 18.6 and the Purchase Intent will trigger the system purchase confirmation dialog when the Purchase Intent is delivered.
Topic: App & System Services SubTopic: StoreKit Tags:
Replies
Boosts
Views
Activity
Jan ’26