Hi, I'm building an iOS app using RevenueCat + Capacitor and encountered an issue when purchasing a non-consumable product (lifetime) via RevenueCat Paywall.
I have three products configured in App Store Connect and RevenueCat:
-
com.ddtapp.premium.weekly
(weekly subscription) -
com.ddtapp.premium.monthly
(monthly subscription) -
com.ddtapp.premium.lifetime
(non-consumable)
When I use the Paywall to purchase weekly
and monthly
, everything works as expected — the payment sheet appears and the purchase succeeds.
However, when I try to purchase lifetime
, the payment sheet does not appear, and I get the following error repeatedly:
DEBUG: Will execute purchase logic provided by RevenueCat.
INFO: 💰 Purchasing Product 'com.ddtapp.premium.lifetime' from package in Offering 'default'
DEBUG: ℹ️ Found 0 unsynced attributes for App User ID: $RCAnonymousID:5d717e11cc7a….
DEBUG: ℹ️ TransactionPoster: handling transaction '20000009...' for product 'com.ddtapp.premium.lifetime' (date: 2025-05-01 13:38:33 +0000) in Offering 'default' with paywall session '4B2EB66A-B5A2-432….'
DEBUG: ℹ️ Skipping products request for these products because they were already cached: ["com.ddtapp.premium.lifetime"]
DEBUG: ℹ️ PostReceiptDataOperation: Started
DEBUG: ℹ️ PostReceiptDataOperation: Posting JWS token (source: 'purchase'):
eyJhbGciOiJFUzI1NiIsIng1YyI6WyJNS….l…….
DEBUG: ℹ️ There are no requests currently running, starting request POST /v1/receipts
DEBUG: ℹ️ API request started: POST '/v1/receipts'
ERROR: 😿‼️ The receipt is not valid. The purchased product was missing in the receipt. This is typically due to a bug in StoreKit.
DEBUG: ℹ️ API request failed: POST '/v1/receipts' (422): The receipt is not valid. The purchased product was missing in the receipt. This is typically due to a bug in StoreKit.
Request-ID: '287519e0-4bcf-4d2a….'; Amzn-Trace-ID: 'Root=1-688010d7-4a5d86fb796d15c26ff548f5'
DEBUG: ℹ️ PostReceiptDataOperation: Finished
INFO: 💰 Finishing transaction '200000091...' for product 'com.ddtapp.premium.lifetime'
DEBUG: ℹ️ Serial request done: POST /v1/receipts, 0 requests left in the queue
ERROR: 😿‼️ The receipt is not valid. The purchased product was missing in the receipt. This is typically due to a bug in StoreKit.
ERROR: 💰 Product purchase for 'com.ddtapp.premium.lifetime' failed with error: PurchasesError(error: The receipt is not valid., userInfo: ["NSLocalizedDescription": "The receipt is not valid. The purchased product was missing in the receipt. This is typically due to a bug in StoreKit.", "source_file": "RevenueCat/HTTPClient.swift:945", "rc_backend_error_code": 7712, "rc_response_status_code": 422, "NSUnderlyingError": Error Domain=RevenueCat.BackendErrorCode Code=7712 "The purchased product was missing in the receipt. This is typically due to a bug in StoreKit." UserInfo={rc_backend_error_code=7712, NSLocalizedDescription=The purchased product was missing in the receipt. This is typically due to a bug in StoreKit.}, "source_function": "parseUnsuccessfulResponse()", "readable_error_code": "INVALID_RECEIPT"])
-
The product
com.ddtapp.premium.lifetime
is correctly created in App Store Connect. -
The product is of type Non-consumable, and it has been imported into RevenueCat successfully.
-
I triple-checked the product ID spelling — no typos.
-
I'm testing on a real device using a Sandbox account.
-
I also tried deleting the app and the anonymous user from RevenueCat, but the issue persists.
It seems that only this lifetime product is failing to trigger the purchase sheet.
Any idea what could cause this? Does RevenueCat Paywall have limitations or known issues with non-consumable products?
Thanks!
