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."

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