Same issue, sandbox environment. All goes well up until restoring purchases, after that all non-consumables are wiped out from the receipt, although I get them in paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) observer method when restoring. I was hoping to rely on receipt as the source of truth but it turns out sadly I can't do that