Skip to content

Offline Entitlements: store ProductEntitlementMapping in cache#2355

Merged
NachoSoto merged 7 commits into
mainfrom
nacho/sdk-2985-store-entitlements-products-mapping
Mar 23, 2023
Merged

Offline Entitlements: store ProductEntitlementMapping in cache#2355
NachoSoto merged 7 commits into
mainfrom
nacho/sdk-2985-store-entitlements-products-mapping

Conversation

@NachoSoto

@NachoSoto NachoSoto commented Mar 18, 2023

Copy link
Copy Markdown
Contributor

Changes:

  • DeviceCache support for caching ProductsEntitlementsResponse as well as "last updated" date
  • Added JSONEncoder.encode helper matching JSONDecoder.decode version, with an optional logErrors parameter
  • OfferingsManager. updateProductsEntitlementsCacheIfStale
  • Purchases.updateAllCaches also updates this new cache
  • Added OfferingsManager / DeviceCache / Purchases tests
  • Integration test for fetching mapping

@NachoSoto NachoSoto requested a review from a team March 18, 2023 00:13

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Integration test cause why not 💪🏻

@NachoSoto NachoSoto changed the title [WIP] Store ProductsEntitlementsResponse in cache [WIP] Offline Entitlements: store ProductsEntitlementsResponse in cache Mar 18, 2023
@NachoSoto NachoSoto force-pushed the nacho/sdk-2981-use-new-endpoint-to-get-entitlements-2 branch 2 times, most recently from 7ac0854 to 28cb030 Compare March 21, 2023 16:48
@NachoSoto NachoSoto force-pushed the nacho/sdk-2985-store-entitlements-products-mapping branch from 3564834 to 971c2a9 Compare March 21, 2023 16:54
@NachoSoto NachoSoto force-pushed the nacho/sdk-2981-use-new-endpoint-to-get-entitlements-2 branch from 28cb030 to ddbecd5 Compare March 21, 2023 17:00
@NachoSoto NachoSoto force-pushed the nacho/sdk-2985-store-entitlements-products-mapping branch from 971c2a9 to 88c6a30 Compare March 21, 2023 17:01
@NachoSoto NachoSoto force-pushed the nacho/sdk-2981-use-new-endpoint-to-get-entitlements-2 branch 2 times, most recently from fc96b64 to d0a83a4 Compare March 21, 2023 17:03
@NachoSoto NachoSoto force-pushed the nacho/sdk-2985-store-entitlements-products-mapping branch 4 times, most recently from 5bba3be to 51c634b Compare March 21, 2023 18:21
Comment thread Sources/Caching/DeviceCache.swift Outdated

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cc @aboedo this is done. I made this a constant cache duration instead of depending on isAppBackgrounded.

@NachoSoto NachoSoto force-pushed the nacho/sdk-2985-store-entitlements-products-mapping branch 2 times, most recently from 8595aa1 to 204c989 Compare March 21, 2023 18:43
@NachoSoto NachoSoto changed the title [WIP] Offline Entitlements: store ProductsEntitlementsResponse in cache Offline Entitlements: store ProductsEntitlementsResponse in cache Mar 21, 2023
@NachoSoto NachoSoto force-pushed the nacho/sdk-2985-store-entitlements-products-mapping branch 2 times, most recently from 49d2588 to e8b9663 Compare March 21, 2023 18:45
@NachoSoto NachoSoto marked this pull request as ready for review March 21, 2023 18:45
@NachoSoto

Copy link
Copy Markdown
Contributor Author

Ready.

@NachoSoto NachoSoto force-pushed the nacho/sdk-2981-use-new-endpoint-to-get-entitlements-2 branch from d0a83a4 to daa5045 Compare March 21, 2023 18:55
@NachoSoto NachoSoto force-pushed the nacho/sdk-2985-store-entitlements-products-mapping branch from e8b9663 to 7c307cd Compare March 21, 2023 18:55
@NachoSoto NachoSoto force-pushed the nacho/sdk-2981-use-new-endpoint-to-get-entitlements-2 branch from daa5045 to f3e6b4b Compare March 22, 2023 00:37
@NachoSoto NachoSoto force-pushed the nacho/sdk-2985-store-entitlements-products-mapping branch from 7c307cd to 2355ac2 Compare March 22, 2023 00:38

@tonidero tonidero left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great! just a few comments.

Comment thread Sources/Caching/DeviceCache.swift Outdated

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm can you give a brief explanation of how you're planning to use this method? I wonder if we should access this data from Purchases or directly from DeviceCache/OfferingsManager... My reasoning is to keep Purchases as lean as possible.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is to be called from integration tests.

Comment thread Sources/Purchasing/Purchases/Purchases.swift Outdated
Comment thread Tests/UnitTests/Purchasing/OfferingsManagerTests.swift Outdated
Comment thread Sources/Purchasing/OfferingsManager.swift Outdated
Comment thread Sources/Purchasing/OfferingsManager.swift Outdated
@NachoSoto NachoSoto force-pushed the nacho/sdk-2981-use-new-endpoint-to-get-entitlements-2 branch from f3e6b4b to 3585ddd Compare March 22, 2023 17:15
@NachoSoto NachoSoto force-pushed the nacho/sdk-2985-store-entitlements-products-mapping branch from cbf5ed2 to 4c2988b Compare March 22, 2023 19:32
@NachoSoto

Copy link
Copy Markdown
Contributor Author

@tonidero this looks a lot better splitting things in its own classes instead of on OfferingsManager 👍🏻
Now it's all neatly inside of an Offline Entitlements folder.

@NachoSoto NachoSoto force-pushed the nacho/sdk-2985-store-entitlements-products-mapping branch from b4e1699 to 9f5a9f3 Compare March 22, 2023 19:48

@tonidero tonidero left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like it! I'm not sure if we should hold off on merging this until the backend is ready though, since we will be hitting a non-available endpoint in main if not...

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Small nitpick but I added this log after storing in the cache, to make sure it was logged only after the cache was updated. NABD though.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good point!

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh wait we have both already: product_entitlement_mapping_stale_updating and product_entitlement_mapping_updated_from_network.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should hold off merging this until the backend is ready. I guess if not we will just get some errors...

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yup.

@NachoSoto

Copy link
Copy Markdown
Contributor Author

I like it! I'm not sure if we should hold off on merging this until the backend is ready though, since we will be hitting a non-available endpoint in main if not...

Yeah I'm not merging anything that's not 100% ready yet.

@NachoSoto NachoSoto force-pushed the nacho/sdk-2981-use-new-endpoint-to-get-entitlements-2 branch from acf2955 to 46d12f6 Compare March 23, 2023 16:04
@NachoSoto NachoSoto force-pushed the nacho/sdk-2985-store-entitlements-products-mapping branch from d285cf5 to 362f1e8 Compare March 23, 2023 16:09
Base automatically changed from nacho/sdk-2981-use-new-endpoint-to-get-entitlements-2 to main March 23, 2023 16:18
@NachoSoto NachoSoto force-pushed the nacho/sdk-2985-store-entitlements-products-mapping branch from b76ff57 to 651427b Compare March 23, 2023 16:39
@NachoSoto NachoSoto force-pushed the nacho/sdk-2985-store-entitlements-products-mapping branch from 6d4ffc5 to a53e270 Compare March 23, 2023 17:06
@NachoSoto NachoSoto force-pushed the nacho/sdk-2985-store-entitlements-products-mapping branch from a53e270 to 070ca9e Compare March 23, 2023 17:26
func testProductEntitlementMapping() async throws {
try AvailabilityChecks.iOS15APIAvailableOrSkipTest()

XCTExpectFailure("Endpoint is not available yet")

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cc @aboedo @tonidero
Once this works, this test will fail.

@codecov

codecov Bot commented Mar 23, 2023

Copy link
Copy Markdown

Codecov Report

Merging #2355 (158e952) into main (d1c6fa2) will decrease coverage by 0.04%.
The diff coverage is 79.76%.

@@            Coverage Diff             @@
##             main    #2355      +/-   ##
==========================================
- Coverage   86.66%   86.62%   -0.04%     
==========================================
  Files         192      194       +2     
  Lines       12870    13028     +158     
==========================================
+ Hits        11154    11286     +132     
- Misses       1716     1742      +26     
Impacted Files Coverage Δ
Sources/Logging/Strings/Strings.swift 100.00% <ø> (ø)
.../FoundationExtensions/JSONDecoder+Extensions.swift 66.26% <20.83%> (-18.74%) ⬇️
Sources/Purchasing/Purchases/Purchases.swift 75.24% <62.06%> (-0.05%) ⬇️
Sources/Caching/DeviceCache.swift 94.80% <95.45%> (+0.04%) ⬆️
...flineEntitlements/OfflineEntitlementsManager.swift 96.00% <96.00%> (ø)
...onExtensions/DispatchTimeInterval+Extensions.swift 100.00% <100.00%> (ø)
...s/Logging/Strings/OfflineEntitlementsStrings.swift 100.00% <100.00%> (ø)
Sources/Logging/Strings/PurchaseStrings.swift 88.32% <100.00%> (+0.18%) ⬆️

... and 1 file with indirect coverage changes

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

@NachoSoto NachoSoto merged commit b495540 into main Mar 23, 2023
@NachoSoto NachoSoto deleted the nacho/sdk-2985-store-entitlements-products-mapping branch March 23, 2023 20:30
This was referenced May 12, 2023
NachoSoto added a commit that referenced this pull request May 16, 2023
### New Features
* New `ErrorCode.signatureVerificationFailed` which will be used for an
upcoming feature

### Bugfixes
* `Purchases.deinit`: don't reset `Purchases.proxyURL` (#2346) via
NachoSoto (@NachoSoto)

<details>
<summary><b>Other Changes</b></summary>

* Introduced `Configuration.EntitlementVerificationMode` and
`VerificationResult` (#2277) via NachoSoto (@NachoSoto)
* `PurchasesDiagnostics`: added step to verify signature verification
(#2267) via NachoSoto (@NachoSoto)
* `HTTPClient`: added signature validation and introduced
`ErrorCode.signatureVerificationFailed` (#2272) via NachoSoto
(@NachoSoto)
* `ETagManager`: don't use ETags if response verification failed (#2347)
via NachoSoto (@NachoSoto)
* `Integration Tests`: removed `@preconcurrency import` (#2464) via
NachoSoto (@NachoSoto)
* Clean up: moved `ReceiptParserTests-Info.plist` out of root (#2460)
via NachoSoto (@NachoSoto)
* Update `CHANGELOG` (#2461) via NachoSoto (@NachoSoto)
* Update `SwiftSnapshotTesting` (#2453) via NachoSoto (@NachoSoto)
* Fixed docs (#2432) via Kaunteya Suryawanshi (@kaunteya)
* Remove unnecessary line break (#2435) via Andy Boedo (@aboedo)
* `ProductEntitlementMapping`: enabled entitlement mapping fetching
(#2425) via NachoSoto (@NachoSoto)
* `BackendPostReceiptDataTests`: increased timeout to fix flaky test
(#2426) via NachoSoto (@NachoSoto)
* Updated requirements to drop Xcode 13.x support (#2419) via NachoSoto
(@NachoSoto)
* `Integration Tests`: fixed flaky errors when loading offerings (#2420)
via NachoSoto (@NachoSoto)
* `PurchaseTester`: fixed compilation for `internal` entitlement
verification (#2417) via NachoSoto (@NachoSoto)
* `ETagManager`/`HTTPClient`: sending new `X-RC-Last-Refresh-Time`
header (#2373) via NachoSoto (@NachoSoto)
* `ETagManager`: don't send validation time if not present (#2490) via
NachoSoto (@NachoSoto)
* SwiftUI Sample Project: Refactor Package terms method to a computed
property (#2405) via Joseph Kokenge (@JOyo246)
* Clean up v3 load shedder integration tests (#2402) via Andy Boedo
(@aboedo)
* Fix iOS 12 compilation (#2394) via NachoSoto (@NachoSoto)
* Added new `VerificationResult.verifiedOnDevice` (#2379) via NachoSoto
(@NachoSoto)
* `PurchaseTester`: fix memory leaks (#2392) via Keita Watanabe
(@kitwtnb)
* Integration tests: add scheduled job (#2389) via Andy Boedo (@aboedo)
* Add lane for running iOS v3 load shedder integration tests (#2388) via
Andy Boedo (@aboedo)
* iOS v3 load shedder integration tests (#2387) via Andy Boedo (@aboedo)
* `Offline Entitlements`: created `LoadShedderIntegrationTests` (#2362)
via NachoSoto (@NachoSoto)
* Purchases.configure: log warning if attempting to use a static
appUserID (#2385) via Mark Villacampa (@MarkVillacampa)
* `SubscriberAttributesManagerIntegrationTests`: fixed flaky failures
(#2381) via NachoSoto (@NachoSoto)
* `@DefaultDecodable.Now`: fixed flaky test (#2374) via NachoSoto
(@NachoSoto)
* `PurchaseTesterSwiftUI`: fixed iOS compilation (#2376) via NachoSoto
(@NachoSoto)
* `SubscriberAttributesManagerIntegrationTests`: fixed potential race
condition (#2380) via NachoSoto (@NachoSoto)
* `Offline Entitlements`: create `CustomerInfo` from offline
entitlements (#2358) via NachoSoto (@NachoSoto)
* Added `@DefaultDecodable.Now` (#2372) via NachoSoto (@NachoSoto)
* `HTTPClient`: debug log when performing redirects (#2371) via
NachoSoto (@NachoSoto)
* `HTTPClient`: new flag to force server errors (#2370) via NachoSoto
(@NachoSoto)
* `OfferingsManager`: fixed Xcode 13.x build (#2369) via NachoSoto
(@NachoSoto)
* `Offline Entitlements`: store `ProductEntitlementMapping` in cache
(#2355) via NachoSoto (@NachoSoto)
* `Offline Entitlements`: added support for fetching
`ProductEntitlementMappingResponse` in `OfflineEntitlementsAPI` (#2353)
via NachoSoto (@NachoSoto)
* `Offline Entitlements`: created `ProductEntitlementMapping` (#2365)
via NachoSoto (@NachoSoto)
* Implemented `NetworkError.isServerDown` (#2367) via NachoSoto
(@NachoSoto)
* `ETagManager`: added test for 304 responses with no etag (#2360) via
NachoSoto (@NachoSoto)
* `TestLogHandler`: increased default capacity (#2357) via NachoSoto
(@NachoSoto)
* `OfferingsManager`: moved log to common method to remove hardcoded
string (#2363) via NachoSoto (@NachoSoto)
* `Offline Entitlements`: created `ProductEntitlementMappingResponse`
(#2351) via NachoSoto (@NachoSoto)
* `HTTPClient`: added test for 2xx response for request with etag
(#2361) via NachoSoto (@NachoSoto)
* `PurchaseTesterSwiftUI` improvements (#2345) via NachoSoto
(@NachoSoto)
* `ConfigureStrings`: fixed double-space typo (#2344) via NachoSoto
(@NachoSoto)
* `ETagManagerTests`: fixed tests on iOS 12 (#2349) via NachoSoto
(@NachoSoto)
* `DeviceCache`: simplified constructor (#2354) via NachoSoto
(@NachoSoto)
* `Trusted Entitlements`: changed all APIs to `internal` (#2350) via
NachoSoto (@NachoSoto)
* `VerificationResult.notRequested`: removed caching reference (#2337)
via NachoSoto (@NachoSoto)
* Finished signature verification `HTTPClient` tests (#2333) via
NachoSoto (@NachoSoto)
* `Configuration.Builder.with(entitlementVerificationMode:)`: improved
documentation (#2334) via NachoSoto (@NachoSoto)
* `ETagManager`: don't ignore failed etags with
`Signing.VerificationMode.informational` (#2331) via NachoSoto
(@NachoSoto)
* `IdentityManager`: clear `ETagManager` and `DeviceCache` if
verification is enabled but cached `CustomerInfo` is not (#2330) via
NachoSoto (@NachoSoto)
* Made `Configuration.EntitlementVerificationMode.enforced` unavailable
(#2329) via NachoSoto (@NachoSoto)
* Refactor: reorganized files in new Security and Misc folders (#2326)
via NachoSoto (@NachoSoto)
* `CustomerInfo`: use same grace period logic for active subscriptions
(#2327) via NachoSoto (@NachoSoto)
* `HTTPClient`: don't verify 4xx/5xx responses (#2322) via NachoSoto
(@NachoSoto)
* `EntitlementInfo`: request date is not optional (#2325) via NachoSoto
(@NachoSoto)
* `CustomerInfo`: removed `entitlementVerification` (#2320) via
NachoSoto (@NachoSoto)
* Renamed `VerificationResult.notVerified` to `.notRequested` (#2321)
via NachoSoto (@NachoSoto)
* `EntitlementInfo`: add a grace period limit to outdated entitlements
(#2288) via NachoSoto (@NachoSoto)
* Update `CustomerInfo.requestDate` from 304 responses (#2310) via
NachoSoto (@NachoSoto)
* `Signing`: added request time & eTag to signature verification (#2309)
via NachoSoto (@NachoSoto)
* `HTTPClient`: changed header search to be case-insensitive (#2308) via
NachoSoto (@NachoSoto)
* `HTTPClient`: automatically add `nonce` based on `HTTPRequest.Path`
(#2286) via NachoSoto (@NachoSoto)
* `PurchaseTester`: added ability to reload `CustomerInfo` with a custom
`CacheFetchPolicy` (#2312) via NachoSoto (@NachoSoto)
* Fix issue where underlying error information for product fetch errors
was not printed in log. (#2281) via Chris Vasselli (@chrisvasselli)
* `PurchaseTester`: added ability to set
`Configuration.EntitlementVerificationMode` (#2290) via NachoSoto
(@NachoSoto)
* SwiftUI: Paywall View should respond to changes on the UserView model
(#2297) via ConfusedVorlon (@ConfusedVorlon)
* Deprecate `usesStoreKit2IfAvailable` (#2293) via Andy Boedo (@aboedo)
* `Signing`: updated to use production public key (#2274) via NachoSoto
(@NachoSoto)
</details>

---------

Co-authored-by: RCGitBot <dev+RCGitBot@revenuecat.com>
NachoSoto added a commit to NachoSoto/purchases-ios that referenced this pull request May 17, 2023
### New Features
* New `ErrorCode.signatureVerificationFailed` which will be used for an
upcoming feature

### Bugfixes
* `Purchases.deinit`: don't reset `Purchases.proxyURL` (RevenueCat#2346) via
NachoSoto (@NachoSoto)

<details>
<summary><b>Other Changes</b></summary>

* Introduced `Configuration.EntitlementVerificationMode` and
`VerificationResult` (RevenueCat#2277) via NachoSoto (@NachoSoto)
* `PurchasesDiagnostics`: added step to verify signature verification
(RevenueCat#2267) via NachoSoto (@NachoSoto)
* `HTTPClient`: added signature validation and introduced
`ErrorCode.signatureVerificationFailed` (RevenueCat#2272) via NachoSoto
(@NachoSoto)
* `ETagManager`: don't use ETags if response verification failed (RevenueCat#2347)
via NachoSoto (@NachoSoto)
* `Integration Tests`: removed `@preconcurrency import` (RevenueCat#2464) via
NachoSoto (@NachoSoto)
* Clean up: moved `ReceiptParserTests-Info.plist` out of root (RevenueCat#2460)
via NachoSoto (@NachoSoto)
* Update `CHANGELOG` (RevenueCat#2461) via NachoSoto (@NachoSoto)
* Update `SwiftSnapshotTesting` (RevenueCat#2453) via NachoSoto (@NachoSoto)
* Fixed docs (RevenueCat#2432) via Kaunteya Suryawanshi (@kaunteya)
* Remove unnecessary line break (RevenueCat#2435) via Andy Boedo (@aboedo)
* `ProductEntitlementMapping`: enabled entitlement mapping fetching
(RevenueCat#2425) via NachoSoto (@NachoSoto)
* `BackendPostReceiptDataTests`: increased timeout to fix flaky test
(RevenueCat#2426) via NachoSoto (@NachoSoto)
* Updated requirements to drop Xcode 13.x support (RevenueCat#2419) via NachoSoto
(@NachoSoto)
* `Integration Tests`: fixed flaky errors when loading offerings (RevenueCat#2420)
via NachoSoto (@NachoSoto)
* `PurchaseTester`: fixed compilation for `internal` entitlement
verification (RevenueCat#2417) via NachoSoto (@NachoSoto)
* `ETagManager`/`HTTPClient`: sending new `X-RC-Last-Refresh-Time`
header (RevenueCat#2373) via NachoSoto (@NachoSoto)
* `ETagManager`: don't send validation time if not present (RevenueCat#2490) via
NachoSoto (@NachoSoto)
* SwiftUI Sample Project: Refactor Package terms method to a computed
property (RevenueCat#2405) via Joseph Kokenge (@JOyo246)
* Clean up v3 load shedder integration tests (RevenueCat#2402) via Andy Boedo
(@aboedo)
* Fix iOS 12 compilation (RevenueCat#2394) via NachoSoto (@NachoSoto)
* Added new `VerificationResult.verifiedOnDevice` (RevenueCat#2379) via NachoSoto
(@NachoSoto)
* `PurchaseTester`: fix memory leaks (RevenueCat#2392) via Keita Watanabe
(@kitwtnb)
* Integration tests: add scheduled job (RevenueCat#2389) via Andy Boedo (@aboedo)
* Add lane for running iOS v3 load shedder integration tests (RevenueCat#2388) via
Andy Boedo (@aboedo)
* iOS v3 load shedder integration tests (RevenueCat#2387) via Andy Boedo (@aboedo)
* `Offline Entitlements`: created `LoadShedderIntegrationTests` (RevenueCat#2362)
via NachoSoto (@NachoSoto)
* Purchases.configure: log warning if attempting to use a static
appUserID (RevenueCat#2385) via Mark Villacampa (@MarkVillacampa)
* `SubscriberAttributesManagerIntegrationTests`: fixed flaky failures
(RevenueCat#2381) via NachoSoto (@NachoSoto)
* `@DefaultDecodable.Now`: fixed flaky test (RevenueCat#2374) via NachoSoto
(@NachoSoto)
* `PurchaseTesterSwiftUI`: fixed iOS compilation (RevenueCat#2376) via NachoSoto
(@NachoSoto)
* `SubscriberAttributesManagerIntegrationTests`: fixed potential race
condition (RevenueCat#2380) via NachoSoto (@NachoSoto)
* `Offline Entitlements`: create `CustomerInfo` from offline
entitlements (RevenueCat#2358) via NachoSoto (@NachoSoto)
* Added `@DefaultDecodable.Now` (RevenueCat#2372) via NachoSoto (@NachoSoto)
* `HTTPClient`: debug log when performing redirects (RevenueCat#2371) via
NachoSoto (@NachoSoto)
* `HTTPClient`: new flag to force server errors (RevenueCat#2370) via NachoSoto
(@NachoSoto)
* `OfferingsManager`: fixed Xcode 13.x build (RevenueCat#2369) via NachoSoto
(@NachoSoto)
* `Offline Entitlements`: store `ProductEntitlementMapping` in cache
(RevenueCat#2355) via NachoSoto (@NachoSoto)
* `Offline Entitlements`: added support for fetching
`ProductEntitlementMappingResponse` in `OfflineEntitlementsAPI` (RevenueCat#2353)
via NachoSoto (@NachoSoto)
* `Offline Entitlements`: created `ProductEntitlementMapping` (RevenueCat#2365)
via NachoSoto (@NachoSoto)
* Implemented `NetworkError.isServerDown` (RevenueCat#2367) via NachoSoto
(@NachoSoto)
* `ETagManager`: added test for 304 responses with no etag (RevenueCat#2360) via
NachoSoto (@NachoSoto)
* `TestLogHandler`: increased default capacity (RevenueCat#2357) via NachoSoto
(@NachoSoto)
* `OfferingsManager`: moved log to common method to remove hardcoded
string (RevenueCat#2363) via NachoSoto (@NachoSoto)
* `Offline Entitlements`: created `ProductEntitlementMappingResponse`
(RevenueCat#2351) via NachoSoto (@NachoSoto)
* `HTTPClient`: added test for 2xx response for request with etag
(RevenueCat#2361) via NachoSoto (@NachoSoto)
* `PurchaseTesterSwiftUI` improvements (RevenueCat#2345) via NachoSoto
(@NachoSoto)
* `ConfigureStrings`: fixed double-space typo (RevenueCat#2344) via NachoSoto
(@NachoSoto)
* `ETagManagerTests`: fixed tests on iOS 12 (RevenueCat#2349) via NachoSoto
(@NachoSoto)
* `DeviceCache`: simplified constructor (RevenueCat#2354) via NachoSoto
(@NachoSoto)
* `Trusted Entitlements`: changed all APIs to `internal` (RevenueCat#2350) via
NachoSoto (@NachoSoto)
* `VerificationResult.notRequested`: removed caching reference (RevenueCat#2337)
via NachoSoto (@NachoSoto)
* Finished signature verification `HTTPClient` tests (RevenueCat#2333) via
NachoSoto (@NachoSoto)
* `Configuration.Builder.with(entitlementVerificationMode:)`: improved
documentation (RevenueCat#2334) via NachoSoto (@NachoSoto)
* `ETagManager`: don't ignore failed etags with
`Signing.VerificationMode.informational` (RevenueCat#2331) via NachoSoto
(@NachoSoto)
* `IdentityManager`: clear `ETagManager` and `DeviceCache` if
verification is enabled but cached `CustomerInfo` is not (RevenueCat#2330) via
NachoSoto (@NachoSoto)
* Made `Configuration.EntitlementVerificationMode.enforced` unavailable
(RevenueCat#2329) via NachoSoto (@NachoSoto)
* Refactor: reorganized files in new Security and Misc folders (RevenueCat#2326)
via NachoSoto (@NachoSoto)
* `CustomerInfo`: use same grace period logic for active subscriptions
(RevenueCat#2327) via NachoSoto (@NachoSoto)
* `HTTPClient`: don't verify 4xx/5xx responses (RevenueCat#2322) via NachoSoto
(@NachoSoto)
* `EntitlementInfo`: request date is not optional (RevenueCat#2325) via NachoSoto
(@NachoSoto)
* `CustomerInfo`: removed `entitlementVerification` (RevenueCat#2320) via
NachoSoto (@NachoSoto)
* Renamed `VerificationResult.notVerified` to `.notRequested` (RevenueCat#2321)
via NachoSoto (@NachoSoto)
* `EntitlementInfo`: add a grace period limit to outdated entitlements
(RevenueCat#2288) via NachoSoto (@NachoSoto)
* Update `CustomerInfo.requestDate` from 304 responses (RevenueCat#2310) via
NachoSoto (@NachoSoto)
* `Signing`: added request time & eTag to signature verification (RevenueCat#2309)
via NachoSoto (@NachoSoto)
* `HTTPClient`: changed header search to be case-insensitive (RevenueCat#2308) via
NachoSoto (@NachoSoto)
* `HTTPClient`: automatically add `nonce` based on `HTTPRequest.Path`
(RevenueCat#2286) via NachoSoto (@NachoSoto)
* `PurchaseTester`: added ability to reload `CustomerInfo` with a custom
`CacheFetchPolicy` (RevenueCat#2312) via NachoSoto (@NachoSoto)
* Fix issue where underlying error information for product fetch errors
was not printed in log. (RevenueCat#2281) via Chris Vasselli (@chrisvasselli)
* `PurchaseTester`: added ability to set
`Configuration.EntitlementVerificationMode` (RevenueCat#2290) via NachoSoto
(@NachoSoto)
* SwiftUI: Paywall View should respond to changes on the UserView model
(RevenueCat#2297) via ConfusedVorlon (@ConfusedVorlon)
* Deprecate `usesStoreKit2IfAvailable` (RevenueCat#2293) via Andy Boedo (@aboedo)
* `Signing`: updated to use production public key (RevenueCat#2274) via NachoSoto
(@NachoSoto)
</details>

---------

Co-authored-by: RCGitBot <dev+RCGitBot@revenuecat.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants