After completing a purchase using the StoreKit 2 APIs and receiving a successful and verified Product.PurchaseResult
, the local receipt is still empty. Ideally I would not need this anymore, but our server-side implementation currently requires the encoded receipt data so for my current use-case I need to access it still.
My purchase flow looks like so:
let purchaseResult = try await product.purchase(options: purchaseOptions)
switch purchaseResult {
case .success(let verification):
let transaction = try checkVerified(verification)
...
guard let receiptPath = Bundle.main.appStoreReceiptURL?.path else {
throw Error.missingReceipt
}
let receiptData = NSData(contentsOfFile: receiptPath) // Receipt data is nil here
let receiptString = receiptData?.base64EncodedString(options: .endLineWithLineFeed) ?? ""
...
// Handle server logic
...
await transaction.finish()
case ...
...
}
My understanding was receipt data should still be generated when using StoreKit 2 APIs - is there a way to guarantee it is populated after successfully completing a purchase and during transaction handling?