StoreKit1: finishTransaction fails to work as expected in iOS 26.4

Our game application is developed based on StoreKit 1, and an exception occurs on iOS 26.4: after players complete a payment, the finishTransaction method fails to properly remove the transaction from the SKPaymentQueue; as a result, when players restart the app, the system still triggers the retry process for this transaction (reconciliation of unpaid orders).

Has anyone encountered this issue? If there is a solution, we would appreciate it if you could share it with us.

We started experiencing a similar issue on the day iOS 26.4 Beta 1 was released (2026/02/18).

Firebase Analytics is reporting a large number of duplicate in_app_purchase events for some users starting from that day. A few things we've observed:

  • All of the affected transactions are non-consumable items.
  • The duplicated events are triggered right after the process starts.
  • All affected users are on iOS 26.4

So far we haven’t been able to reproduce it locally. It might be because our tests are using the sandbox or because our debug builds are compiled with Xcode 26.

So I can't say for sure if it's exactly the same issue as yours, but it looks quite similar.

Update: We were able to reproduce this with a minimal reproducible project and can confirm it's the same issue as yours.

the finishTransaction method fails to properly remove the transaction from the SKPaymentQueue

As per our investigations, calling SKPaymentQueue.default().restoreCompletedTransactions() triggers paymentQueue(_:updatedTransactions:), but the transactionState of that previously finished transaction is .purchased instead of .restored.

When running the same test on devices below iOS 26.4, the transactionState correctly returns .restored.

StoreKit1: finishTransaction fails to work as expected in iOS 26.4
 
 
Q