I'm wondering, is the defaultQueue guaranteed to be the same queue passed in paymentQueue:updatedTransactions:? If not, then perhaps the issue is with calling finishTransaction on a different SKPaymentQueue than the one the transaction originated from.