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 sandboxTransaction.all works correctly there. Appears specific to production for a small subset of users.

Has anyone else seen this?

We were even able to reproduce it on an iPad with iOS 17.5.1 and on iPhone with iOS 18.7.8 with one of these two affected apps.

With StoreKit 2, AppStore.sync() does not synchronize previously purchased in-app purchases. When attempting to purchase the product again, the message appears that the purchase has already been made, and then the error is thrown at:

let result = try await product.purchase()

and the purchase cannot be restored.

Printing description of nsError:
Error Domain=SKErrorDomain Code=0 "Ein unbekannter Fehler ist aufgetreten" 
UserInfo={NSLocalizedDescription=Ein unbekannter Fehler ist aufgetreten, 
NSUnderlyingError=0x12cef54a0 
{Error Domain=ASDServerErrorDomain Code=2047 "Du hast diesen Artikel nicht gekauft." 
UserInfo={NSLocalizedFailureReason=Du hast diesen Artikel nicht gekauft.}}}
 

Translation:

"Ein unbekannter Fehler ist aufgetreten" -> "An unknown error has occurred."

"Du hast diesen Artikel nicht gekauft." -> "You did not purchase this item."

iOS 26.5 didn't bring any improvement either. Restoring the in-app purchases when attempting to purchase again with StoreKit 1 does not work and with StoreKit 2 restoring the in-app purchases does not work at all.

How can we contact Apple Support for urgent help? It is a very serious problem.

It's a 9 year old app with an average of 600 downloads daily.

We’ve now conducted additional tests. We have a 10-year-old app with around 800 downloads per day that has already been migrated to StoreKit 2 for quite some time. With real users in the live app, there are no issues — purchases can be made and restored successfully. However, with a sandbox test user while launching the app from Xcode, neither purchasing nor restoring works.

In another 13-year-old app with around 1,800 downloads per day, StoreKit 2 works perfectly both live and with the sandbox test user without any issues.

All apps use the exact same code for the StoreKit 2 logic and are tested with the same users.

Today we will take the risk and submit the app we were originally talking about for review after switching to StoreKit 2, and test whether it works live without any problems.

We have updated the app to StoreKit 2 and submitted it to the App Store. It's already been approved, and everything is working perfectly with real users.

Regarding the other app, the user who experienced problems reported that restarting their iPhone resolved the issue and restored all in-app purchases.

It seems the problem is solved for us.

StoreKit 2: Transaction.all and Transaction.currentEntitlements return empty for valid non-consumable purchases in production
 
 
Q