Best current approach to detecting legacy paid app download (without relying on deprecated APIs)?

I’m trying to determine the most appropriate modern method for detecting whether a user originally downloaded a paid app (prior to transitioning the app to freemium/IAP-based access).

Historically, this was done by checking for a valid App Store receipt and using SKReceiptRefreshRequest to ensure a fresh one was available. However, SKReceiptRefreshRequest and many related aspects of StoreKit receipt handling are now deprecated in iOS 17+.

The current Apple documentation on receipt validation still refers to SKReceiptRefreshRequest, which makes things unclear. With so many deprecations and the push toward StoreKit 2, what’s the recommended path to:

  • Check for a valid App Store receipt
  • Confirm that the app was originally purchased (as a paid app, not via IAP)
  • Persist this info to exempt the user from paywalling the app in the future

I don’t need to validate purchases of IAPs — just to detect a legacy paid app download.

Any guidance on best practice for this use case, preferably using non-deprecated APIs (StoreKit 2 or otherwise), would be appreciated.

Best current approach to detecting legacy paid app download (without relying on deprecated APIs)?
 
 
Q