StoreKit Test Receipts report the wrong timezone for expires

Originator:andy
Number:rdar://FB9085712 Date Originated:April 22, 2021
Status:Potential fix identified - In iOS 14.5 Resolved:
Product:StoreKit Testing in Xcode Product Version:
Classification:Incorrect/Unexpected Behavior Reproducible:Yes
 
There’s some discussion about it here:
https://github.com/RevenueCat/purchases-ios/issues/491

The receipt generated by StoreKit Test has an incorrect value for timezone for expires_date. The date and time are correct, but they’re reported as UTC, and instead their values correspond to the user’s local time zone. 
So if you parse them to grant access to an IAP, if the user is in a timezone after UTC (i.e.: UTC +3), they’ll get 3 more hours of entitlement than they should, and if they’re in a timezone before UTC (i.e.: UTC -3), their purchases will have expired 3 hours before the real expiry date.

Here’s a sample: 

Receipt token: 

'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'

When parsed, it produces: 

{
  "bundle_id": "com.revenuecat.sampleapp",
  "application_version": "4",
  "receipt_creation_date": "2021-04-22T15:59:49+0800",
  "expiration_date": "4001-01-01T08:00:00+0800",
  "in_app": [
    {
      "quantity": 1,
      "product_id": "com.revenuecat.annual_39.99.2_week_intro",
      "transaction_id": "0",
      "purchase_date": "2021-04-22T15:59:49Z",
      "expires_date": "2022-04-22T15:59:49Z",
      "is_in_intro_offer_period": 1
    }
  ],
}

Note that the timezone for the expires_date and purchase_date there is reported as UTC, but the value of the date itself is in the user’s timezone.

Comments


Please note: Reports posted here will not necessarily be seen by Apple. All problems should be submitted at bugreport.apple.com before they are posted here. Please only post information for Radars that you have filed yourself, and please do not include Apple confidential information in your posts. Thank you!