diff --git a/.jazzy.yaml b/.jazzy.yaml
index dacce82ef9..dcf48cf314 100644
--- a/.jazzy.yaml
+++ b/.jazzy.yaml
@@ -2,7 +2,7 @@ clean: true
author: RevenueCat
author_url: https://revenuecat.com
sdk: iphonesimulator
-module_version: 4.18.0-SNAPSHOT
+module_version: 4.19.0
github_url: https://github.com/revenuecat/purchases-ios
github_file_prefix: https://github.com/revenuecat/purchases-ios/tree/4.18.0-SNAPSHOT
output: generated_docs
diff --git a/.version b/.version
index 614324e56a..a69aa5a428 100644
--- a/.version
+++ b/.version
@@ -1 +1 @@
-4.18.0-SNAPSHOT
+4.19.0
diff --git a/CHANGELOG.latest.md b/CHANGELOG.latest.md
index 8c61c66f79..981d776422 100644
--- a/CHANGELOG.latest.md
+++ b/CHANGELOG.latest.md
@@ -1,24 +1,128 @@
### New Features
-* Introduced Custom Entitlements Computation mode (#2439) via Andy Boedo (@aboedo)
* Create separate `SPM` library to enable custom entitlement computation (#2440) via NachoSoto (@NachoSoto)
-
-This new library allows apps to use a smaller version of the RevenueCat SDK, intended for apps that will do their own entitlement computation separate from RevenueCat.
-
-Apps using this mode rely on webhooks to signal their backends to refresh entitlements with RevenueCat.
-
-See the [demo app for an example and usage instructions](https://github.com/RevenueCat/purchases-ios/tree/main/Examples/testCustomEntitlementsComputation).
-
+* Custom Entitlements Computation mode (#2439) via Andy Boedo (@aboedo)
+* 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)
### Bugfixes
* `PurchaseOrchestrator`: fix incorrect `InitiationSource` for SK1 queue transactions (#2430) via NachoSoto (@NachoSoto)
-
-### Other Changes
+* `CustomerInfoManager`: fixed deadlock caused by reading `CustomerInfo` inside of observer (#2412) via NachoSoto (@NachoSoto)
+* Fix deadlock when sending notification center in customerInfoListener (#2407) via Andy Boedo (@aboedo)
+* `Xcode 14.3`: fixed compilation errors (#2399) via NachoSoto (@NachoSoto)
+* `DispatchTimeInterval`: fixed Xcode 14.3 compilation (#2397) via NachoSoto (@NachoSoto)
+* Temporarily disable entitlement mapping (#2386) via Andy Boedo (@aboedo)
+* `DeviceCache`: workaround for potential deadlock (#2375) via NachoSoto (@NachoSoto)
+* `Purchases.deinit`: don't reset `Purchases.proxyURL` (#2346) via NachoSoto (@NachoSoto)
+* `ETagManager`: don't use ETags if response verification failed (#2347) via NachoSoto (@NachoSoto)
+* `DispatchTimeInterval` & `Date`: avoid 32-bit overflows, fix `watchOS` crashes (#2342) via NachoSoto (@NachoSoto)
+* Fix issue with missing subscriber attributes if set after login but before login callback (#2313) via Toni Rico (@tonidero)
+* Fixed `Bundle: Sendable` conformance (#2301) via NachoSoto (@NachoSoto)
+* Fixed `PurchasesOrchestrator` compilation error on Xcode 14.3 beta 1 (#2292) via NachoSoto (@NachoSoto)
+### Performance Improvements
* Update offerings cache when switchUser(to:) is called (#2455) via Andy Boedo (@aboedo)
-* Updated example code for the sample app for Custom Entitlements (#2454) via Andy Boedo (@aboedo)
-* Custom Entitlement Computation: API testers (#2452) via NachoSoto (@NachoSoto)
* Custom Entitlement Computation: avoid `getCustomerInfo` requests for cancelled purchases (#2449) via NachoSoto (@NachoSoto)
+* `PostReceiptDataOperation` / `GetCustomerInfoOperation`: only invoke response handlers once (#2377) via NachoSoto (@NachoSoto)
+* `AppleReceipt.mostRecentActiveSubscription`: performance optimization (#2332) via NachoSoto (@NachoSoto)
+### Dependency Updates
+* Bump fastlane-plugin-revenuecat_internal from `3b03efa` to `fe45299` (#2459) via dependabot[bot] (@dependabot[bot])
+* Bump fastlane-plugin-revenuecat_internal from `8482a43` to `3b03efa` (#2413) via dependabot[bot] (@dependabot[bot])
+* Bump danger from 9.2.0 to 9.3.0 (#2433) via dependabot[bot] (@dependabot[bot])
+* Bump cocoapods from 1.12.0 to 1.12.1 (#2414) via dependabot[bot] (@dependabot[bot])
+* Bump fastlane from 2.212.1 to 2.212.2 (#2411) via dependabot[bot] (@dependabot[bot])
+* Bump fastlane-plugin-revenuecat_internal from `9255366` to `8482a43` (#2401) via dependabot[bot] (@dependabot[bot])
+* Bump activesupport from 7.0.4.2 to 7.0.4.3 (#2339) via dependabot[bot] (@dependabot[bot])
+* Bump cocoapods from 1.11.3 to 1.12.0 (#2317) via dependabot[bot] (@dependabot[bot])
+* Bump fastlane from 2.212.0 to 2.212.1 (#2314) via dependabot[bot] (@dependabot[bot])
+* Bump fastlane from 2.211.0 to 2.212.0 (#2298) via dependabot[bot] (@dependabot[bot])
+### Other Changes
+* `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)
+* Custom Entitlement Computation: API testers (#2452) via NachoSoto (@NachoSoto)
+* updated example code for the sample app for Custom Entitlements (#2454) via Andy Boedo (@aboedo)
+* Update `SwiftSnapshotTesting` (#2453) via NachoSoto (@NachoSoto)
+* Custom Entitlement Computation: re-enable `syncPurchases`/`restorePurchases` (#2451) via NachoSoto (@NachoSoto)
* Custom Entitlement Computation: disabled unnecessary APIs (#2442) via NachoSoto (@NachoSoto)
+* `customEntitlementsComputation`: update the copy in the sample app to explain the new usage (#2443) via Andy Boedo (@aboedo)
+* Fixed docs (#2432) via Kaunteya Suryawanshi (@kaunteya)
+* clarify reasoning for disfavoredOverload in logIn (#2434) via Andy Boedo (@aboedo)
+* 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)
* `StoreKit1Wrapper`: added log when adding payment to queue (#2423) via NachoSoto (@NachoSoto)
* `StoreKit1Wrapper`: added debug log when transaction is removed but no callbacks to notify (#2418) via NachoSoto (@NachoSoto)
-* `customEntitlementsComputation`: update the copy in the sample app to explain the new usage (#2443) via Andy Boedo (@aboedo)
-* Clarify reasoning for `disfavoredOverload` in logIn (#2434) via Andy Boedo (@aboedo)
-* Documentation: improved `async` API docs (#2432) via Kaunteya Suryawanshi (@kaunteya)
+* 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)
+* 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)
+* `CircleCI`: use `Xcode 14.3.0` (#2398) via NachoSoto (@NachoSoto)
+* Fix iOS 12 compilation (#2394) via NachoSoto (@NachoSoto)
+* Added new `VerificationResult.verifiedOnDevice` (#2379) via NachoSoto (@NachoSoto)
+* `SwiftLint`: fixed lint with new 0.51.0 version (#2395) 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)
+* redirect to latest version of migration guide (#2384) via Andy Boedo (@aboedo)
+* Fix migration guide link (#2383) via Andy Boedo (@aboedo)
+* `@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)
+* Version 4.17.9 release notes (#2348) via NachoSoto (@NachoSoto)
+* `CI`: also run tests on `watchOS` (#2340) via NachoSoto (@NachoSoto)
+* `VerificationResult.notRequested`: removed caching reference (#2337) via NachoSoto (@NachoSoto)
+* `RELEASING.md`: added GitHub rate limiting parameter (#2336) 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)
+* `PurchaseTester`: fixed compilation from verification API changes (#2328) via NachoSoto (@NachoSoto)
+* `EntitlementInfo`: request date is not optional (#2325) via NachoSoto (@NachoSoto)
+* Add additional logging on init (#2324) via Cody Kerns (@codykerns)
+* replace `iff` with `if and only if` (#2323) via Andy Boedo (@aboedo)
+* `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)
+* Remove Logging Typo (#2315) via Nick Kohrn (@nickkohrn)
+* `Purchases.restorePurchases`: added docstring about successful results (#2316) 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)
+* `RELEASING.md`: fixed hotfix instructions (#2304) via NachoSoto (@NachoSoto)
+* `PurchaseTester`: fixed leak when reconfiguring `Purchases` (#2311) 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)
+* clarifies error messages for storekit 1 bugs (#2294) via Andy Boedo (@aboedo)
+* `Signing`: updated to use production public key (#2274) via NachoSoto (@NachoSoto)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ade1090173..1dfd9715c8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,133 @@
+## 4.19.0
+### New Features
+* Create separate `SPM` library to enable custom entitlement computation (#2440) via NachoSoto (@NachoSoto)
+* Custom Entitlements Computation mode (#2439) via Andy Boedo (@aboedo)
+* 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)
+### Bugfixes
+* `PurchaseOrchestrator`: fix incorrect `InitiationSource` for SK1 queue transactions (#2430) via NachoSoto (@NachoSoto)
+* `CustomerInfoManager`: fixed deadlock caused by reading `CustomerInfo` inside of observer (#2412) via NachoSoto (@NachoSoto)
+* Fix deadlock when sending notification center in customerInfoListener (#2407) via Andy Boedo (@aboedo)
+* `Xcode 14.3`: fixed compilation errors (#2399) via NachoSoto (@NachoSoto)
+* `DispatchTimeInterval`: fixed Xcode 14.3 compilation (#2397) via NachoSoto (@NachoSoto)
+* Temporarily disable entitlement mapping (#2386) via Andy Boedo (@aboedo)
+* `DeviceCache`: workaround for potential deadlock (#2375) via NachoSoto (@NachoSoto)
+* `Purchases.deinit`: don't reset `Purchases.proxyURL` (#2346) via NachoSoto (@NachoSoto)
+* `ETagManager`: don't use ETags if response verification failed (#2347) via NachoSoto (@NachoSoto)
+* `DispatchTimeInterval` & `Date`: avoid 32-bit overflows, fix `watchOS` crashes (#2342) via NachoSoto (@NachoSoto)
+* Fix issue with missing subscriber attributes if set after login but before login callback (#2313) via Toni Rico (@tonidero)
+* Fixed `Bundle: Sendable` conformance (#2301) via NachoSoto (@NachoSoto)
+* Fixed `PurchasesOrchestrator` compilation error on Xcode 14.3 beta 1 (#2292) via NachoSoto (@NachoSoto)
+### Performance Improvements
+* Update offerings cache when switchUser(to:) is called (#2455) via Andy Boedo (@aboedo)
+* Custom Entitlement Computation: avoid `getCustomerInfo` requests for cancelled purchases (#2449) via NachoSoto (@NachoSoto)
+* `PostReceiptDataOperation` / `GetCustomerInfoOperation`: only invoke response handlers once (#2377) via NachoSoto (@NachoSoto)
+* `AppleReceipt.mostRecentActiveSubscription`: performance optimization (#2332) via NachoSoto (@NachoSoto)
+### Dependency Updates
+* Bump fastlane-plugin-revenuecat_internal from `3b03efa` to `fe45299` (#2459) via dependabot[bot] (@dependabot[bot])
+* Bump fastlane-plugin-revenuecat_internal from `8482a43` to `3b03efa` (#2413) via dependabot[bot] (@dependabot[bot])
+* Bump danger from 9.2.0 to 9.3.0 (#2433) via dependabot[bot] (@dependabot[bot])
+* Bump cocoapods from 1.12.0 to 1.12.1 (#2414) via dependabot[bot] (@dependabot[bot])
+* Bump fastlane from 2.212.1 to 2.212.2 (#2411) via dependabot[bot] (@dependabot[bot])
+* Bump fastlane-plugin-revenuecat_internal from `9255366` to `8482a43` (#2401) via dependabot[bot] (@dependabot[bot])
+* Bump activesupport from 7.0.4.2 to 7.0.4.3 (#2339) via dependabot[bot] (@dependabot[bot])
+* Bump cocoapods from 1.11.3 to 1.12.0 (#2317) via dependabot[bot] (@dependabot[bot])
+* Bump fastlane from 2.212.0 to 2.212.1 (#2314) via dependabot[bot] (@dependabot[bot])
+* Bump fastlane from 2.211.0 to 2.212.0 (#2298) via dependabot[bot] (@dependabot[bot])
+### Other Changes
+* `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)
+* Custom Entitlement Computation: API testers (#2452) via NachoSoto (@NachoSoto)
+* updated example code for the sample app for Custom Entitlements (#2454) via Andy Boedo (@aboedo)
+* Update `SwiftSnapshotTesting` (#2453) via NachoSoto (@NachoSoto)
+* Custom Entitlement Computation: re-enable `syncPurchases`/`restorePurchases` (#2451) via NachoSoto (@NachoSoto)
+* Custom Entitlement Computation: disabled unnecessary APIs (#2442) via NachoSoto (@NachoSoto)
+* `customEntitlementsComputation`: update the copy in the sample app to explain the new usage (#2443) via Andy Boedo (@aboedo)
+* Fixed docs (#2432) via Kaunteya Suryawanshi (@kaunteya)
+* clarify reasoning for disfavoredOverload in logIn (#2434) via Andy Boedo (@aboedo)
+* 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)
+* `StoreKit1Wrapper`: added log when adding payment to queue (#2423) via NachoSoto (@NachoSoto)
+* `StoreKit1Wrapper`: added debug log when transaction is removed but no callbacks to notify (#2418) 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)
+* 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)
+* `CircleCI`: use `Xcode 14.3.0` (#2398) via NachoSoto (@NachoSoto)
+* Fix iOS 12 compilation (#2394) via NachoSoto (@NachoSoto)
+* Added new `VerificationResult.verifiedOnDevice` (#2379) via NachoSoto (@NachoSoto)
+* `SwiftLint`: fixed lint with new 0.51.0 version (#2395) 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)
+* redirect to latest version of migration guide (#2384) via Andy Boedo (@aboedo)
+* Fix migration guide link (#2383) via Andy Boedo (@aboedo)
+* `@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)
+* Version 4.17.9 release notes (#2348) via NachoSoto (@NachoSoto)
+* `CI`: also run tests on `watchOS` (#2340) via NachoSoto (@NachoSoto)
+* `VerificationResult.notRequested`: removed caching reference (#2337) via NachoSoto (@NachoSoto)
+* `RELEASING.md`: added GitHub rate limiting parameter (#2336) 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)
+* `PurchaseTester`: fixed compilation from verification API changes (#2328) via NachoSoto (@NachoSoto)
+* `EntitlementInfo`: request date is not optional (#2325) via NachoSoto (@NachoSoto)
+* Add additional logging on init (#2324) via Cody Kerns (@codykerns)
+* replace `iff` with `if and only if` (#2323) via Andy Boedo (@aboedo)
+* `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)
+* Remove Logging Typo (#2315) via Nick Kohrn (@nickkohrn)
+* `Purchases.restorePurchases`: added docstring about successful results (#2316) 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)
+* `RELEASING.md`: fixed hotfix instructions (#2304) via NachoSoto (@NachoSoto)
+* `PurchaseTester`: fixed leak when reconfiguring `Purchases` (#2311) 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)
+* clarifies error messages for storekit 1 bugs (#2294) via Andy Boedo (@aboedo)
+* `Signing`: updated to use production public key (#2274) via NachoSoto (@NachoSoto)
+
## 4.18.0
### New Features
* Introduced Custom Entitlements Computation mode (#2439) via Andy Boedo (@aboedo)
diff --git a/RevenueCat.podspec b/RevenueCat.podspec
index df031bb338..2437812d71 100644
--- a/RevenueCat.podspec
+++ b/RevenueCat.podspec
@@ -1,6 +1,6 @@
Pod::Spec.new do |s|
s.name = "RevenueCat"
- s.version = "4.18.0-SNAPSHOT"
+ s.version = "4.19.0"
s.summary = "Subscription and in-app-purchase backend service."
s.description = <<-DESC
diff --git a/Sources/Info.plist b/Sources/Info.plist
index e91699da99..bf336bd81a 100644
--- a/Sources/Info.plist
+++ b/Sources/Info.plist
@@ -17,7 +17,7 @@
CFBundlePackageType
$(PRODUCT_BUNDLE_PACKAGE_TYPE)
CFBundleShortVersionString
- 4.18.0
+ 4.19.0
CFBundleVersion
$(CURRENT_PROJECT_VERSION)
LSApplicationCategoryType
diff --git a/Sources/Misc/SystemInfo.swift b/Sources/Misc/SystemInfo.swift
index 3182c6896f..83aa5da0cc 100644
--- a/Sources/Misc/SystemInfo.swift
+++ b/Sources/Misc/SystemInfo.swift
@@ -53,7 +53,7 @@ class SystemInfo {
}
static var frameworkVersion: String {
- return "4.18.0-SNAPSHOT"
+ return "4.19.0"
}
static var systemVersion: String {
diff --git a/Tests/BackendIntegrationTestApp/Info.plist b/Tests/BackendIntegrationTestApp/Info.plist
index da5899d2e3..e2d294152c 100644
--- a/Tests/BackendIntegrationTestApp/Info.plist
+++ b/Tests/BackendIntegrationTestApp/Info.plist
@@ -17,7 +17,7 @@
CFBundlePackageType
$(PRODUCT_BUNDLE_PACKAGE_TYPE)
CFBundleShortVersionString
- 4.18.0
+ 4.19.0
CFBundleVersion
1
LSRequiresIPhoneOS
diff --git a/Tests/BackendIntegrationTests/Info.plist b/Tests/BackendIntegrationTests/Info.plist
index 6f4ce7247b..47b631fe0e 100644
--- a/Tests/BackendIntegrationTests/Info.plist
+++ b/Tests/BackendIntegrationTests/Info.plist
@@ -15,7 +15,7 @@
CFBundlePackageType
$(PRODUCT_BUNDLE_PACKAGE_TYPE)
CFBundleShortVersionString
- 4.18.0
+ 4.19.0
CFBundleVersion
1
diff --git a/Tests/InstallationTests/CommonFiles/RevenueCat-Swift.h b/Tests/InstallationTests/CommonFiles/RevenueCat-Swift.h
index 1a6504ed73..d00d5c1aa2 100644
--- a/Tests/InstallationTests/CommonFiles/RevenueCat-Swift.h
+++ b/Tests/InstallationTests/CommonFiles/RevenueCat-Swift.h
@@ -1,4 +1,4 @@
-// Generated by Apple Swift version 5.7.2 (swiftlang-5.7.2.135.5 clang-1400.0.29.51)
+// Generated by Apple Swift version 5.8 (swiftlang-5.8.0.124.2 clang-1403.0.22.11.100)
#ifndef REVENUECAT_SWIFT_H
#define REVENUECAT_SWIFT_H
#pragma clang diagnostic push
@@ -21,7 +21,6 @@
# include
#endif
-#pragma clang diagnostic ignored "-Wduplicate-method-match"
#pragma clang diagnostic ignored "-Wauto-import"
#if defined(__OBJC__)
#include
@@ -30,10 +29,24 @@
#include
#include
#include
+#include
+#include
+#include
+#include
#else
#include
#include
#include
+#include
+#endif
+#if defined(__cplusplus)
+#if __has_include()
+# include
+#else
+# ifndef __ptrauth_swift_value_witness_function_pointer
+# define __ptrauth_swift_value_witness_function_pointer(x)
+# endif
+#endif
#endif
#if !defined(SWIFT_TYPEDEFS)
@@ -69,53 +82,66 @@ typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4)));
# if __has_feature(objc_class_property)
# define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__
# else
-# define SWIFT_CLASS_PROPERTY(...)
+# define SWIFT_CLASS_PROPERTY(...)
# endif
#endif
-
-#if __has_attribute(objc_runtime_name)
-# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
-#else
-# define SWIFT_RUNTIME_NAME(X)
+#if !defined(SWIFT_RUNTIME_NAME)
+# if __has_attribute(objc_runtime_name)
+# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
+# else
+# define SWIFT_RUNTIME_NAME(X)
+# endif
#endif
-#if __has_attribute(swift_name)
-# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X)))
-#else
-# define SWIFT_COMPILE_NAME(X)
+#if !defined(SWIFT_COMPILE_NAME)
+# if __has_attribute(swift_name)
+# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X)))
+# else
+# define SWIFT_COMPILE_NAME(X)
+# endif
#endif
-#if __has_attribute(objc_method_family)
-# define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X)))
-#else
-# define SWIFT_METHOD_FAMILY(X)
+#if !defined(SWIFT_METHOD_FAMILY)
+# if __has_attribute(objc_method_family)
+# define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X)))
+# else
+# define SWIFT_METHOD_FAMILY(X)
+# endif
#endif
-#if __has_attribute(noescape)
-# define SWIFT_NOESCAPE __attribute__((noescape))
-#else
-# define SWIFT_NOESCAPE
+#if !defined(SWIFT_NOESCAPE)
+# if __has_attribute(noescape)
+# define SWIFT_NOESCAPE __attribute__((noescape))
+# else
+# define SWIFT_NOESCAPE
+# endif
#endif
-#if __has_attribute(ns_consumed)
-# define SWIFT_RELEASES_ARGUMENT __attribute__((ns_consumed))
-#else
-# define SWIFT_RELEASES_ARGUMENT
+#if !defined(SWIFT_RELEASES_ARGUMENT)
+# if __has_attribute(ns_consumed)
+# define SWIFT_RELEASES_ARGUMENT __attribute__((ns_consumed))
+# else
+# define SWIFT_RELEASES_ARGUMENT
+# endif
#endif
-#if __has_attribute(warn_unused_result)
-# define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
-#else
-# define SWIFT_WARN_UNUSED_RESULT
+#if !defined(SWIFT_WARN_UNUSED_RESULT)
+# if __has_attribute(warn_unused_result)
+# define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
+# else
+# define SWIFT_WARN_UNUSED_RESULT
+# endif
#endif
-#if __has_attribute(noreturn)
-# define SWIFT_NORETURN __attribute__((noreturn))
-#else
-# define SWIFT_NORETURN
+#if !defined(SWIFT_NORETURN)
+# if __has_attribute(noreturn)
+# define SWIFT_NORETURN __attribute__((noreturn))
+# else
+# define SWIFT_NORETURN
+# endif
#endif
#if !defined(SWIFT_CLASS_EXTRA)
-# define SWIFT_CLASS_EXTRA
+# define SWIFT_CLASS_EXTRA
#endif
#if !defined(SWIFT_PROTOCOL_EXTRA)
-# define SWIFT_PROTOCOL_EXTRA
+# define SWIFT_PROTOCOL_EXTRA
#endif
#if !defined(SWIFT_ENUM_EXTRA)
-# define SWIFT_ENUM_EXTRA
+# define SWIFT_ENUM_EXTRA
#endif
#if !defined(SWIFT_CLASS)
# if __has_attribute(objc_subclassing_restricted)
@@ -135,28 +161,25 @@ typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4)));
# define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) SWIFT_CLASS_NAMED(SWIFT_NAME)
# endif
#endif
-
#if !defined(SWIFT_PROTOCOL)
# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
#endif
-
#if !defined(SWIFT_EXTENSION)
# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__)
#endif
-
#if !defined(OBJC_DESIGNATED_INITIALIZER)
# if __has_attribute(objc_designated_initializer)
# define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
# else
-# define OBJC_DESIGNATED_INITIALIZER
+# define OBJC_DESIGNATED_INITIALIZER
# endif
#endif
#if !defined(SWIFT_ENUM_ATTR)
-# if defined(__has_attribute) && __has_attribute(enum_extensibility)
+# if __has_attribute(enum_extensibility)
# define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility)))
# else
-# define SWIFT_ENUM_ATTR(_extensibility)
+# define SWIFT_ENUM_ATTR(_extensibility)
# endif
#endif
#if !defined(SWIFT_ENUM)
@@ -185,14 +208,16 @@ typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4)));
#if !defined(SWIFT_DEPRECATED_MSG)
# define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__)))
#endif
-#if __has_feature(attribute_diagnose_if_objc)
-# define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning")))
-#else
-# define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg)
+#if !defined(SWIFT_DEPRECATED_OBJC)
+# if __has_feature(attribute_diagnose_if_objc)
+# define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning")))
+# else
+# define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg)
+# endif
#endif
#if defined(__OBJC__)
#if !defined(IBSegueAction)
-# define IBSegueAction
+# define IBSegueAction
#endif
#endif
#if !defined(SWIFT_EXTERN)
@@ -205,26 +230,31 @@ typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4)));
#if !defined(SWIFT_CALL)
# define SWIFT_CALL __attribute__((swiftcall))
#endif
+#if !defined(SWIFT_INDIRECT_RESULT)
+# define SWIFT_INDIRECT_RESULT __attribute__((swift_indirect_result))
+#endif
+#if !defined(SWIFT_CONTEXT)
+# define SWIFT_CONTEXT __attribute__((swift_context))
+#endif
+#if !defined(SWIFT_ERROR_RESULT)
+# define SWIFT_ERROR_RESULT __attribute__((swift_error_result))
+#endif
#if defined(__cplusplus)
-#if !defined(SWIFT_NOEXCEPT)
# define SWIFT_NOEXCEPT noexcept
-#endif
#else
-#if !defined(SWIFT_NOEXCEPT)
# define SWIFT_NOEXCEPT
#endif
+#if defined(_WIN32)
+#if !defined(SWIFT_IMPORT_STDLIB_SYMBOL)
+# define SWIFT_IMPORT_STDLIB_SYMBOL __declspec(dllimport)
#endif
-#if defined(__cplusplus)
-#if !defined(SWIFT_CXX_INT_DEFINED)
-#define SWIFT_CXX_INT_DEFINED
-namespace swift {
-using Int = ptrdiff_t;
-using UInt = size_t;
-}
+#else
+#if !defined(SWIFT_IMPORT_STDLIB_SYMBOL)
+# define SWIFT_IMPORT_STDLIB_SYMBOL
#endif
#endif
#if defined(__OBJC__)
-#if __has_feature(modules)
+#if __has_feature(objc_modules)
#if __has_warning("-Watimport-in-framework-header")
#pragma clang diagnostic ignored "-Watimport-in-framework-header"
#endif
@@ -532,6 +562,69 @@ typedef SWIFT_ENUM_NAMED(NSInteger, RCAttributionNetwork, "AttributionNetwork",
RCAttributionNetworkAdServices = 7,
};
+@class NSUserDefaults;
+@class RCDangerousSettings;
+@class RCPlatformInfo;
+enum RCEntitlementVerificationMode : NSInteger;
+@class RCConfiguration;
+
+/// The Builder for Configuration.
+SWIFT_CLASS_NAMED("Builder")
+@interface RCConfigurationBuilder : NSObject
+/// Create a new builder with your API key.
+/// \param apiKey The API Key generated for your app from https://app.revenuecat.com/
+///
+- (nonnull instancetype)initWithAPIKey:(NSString * _Nonnull)apiKey OBJC_DESIGNATED_INITIALIZER;
+/// Update your API key.
+- (RCConfigurationBuilder * _Nonnull)withApiKey:(NSString * _Nonnull)apiKey SWIFT_WARN_UNUSED_RESULT;
+/// Set an appUserID.
+/// note:
+/// Best practice is to use a salted hash of your unique app user ids.
+/// important:
+/// Set this property if you have your own user identifiers that you manage.
+/// \param appUserID The unique app user id for this user. This user id will allow users to share their
+/// purchases and subscriptions across devices. Pass nil or an empty string if you want Purchases
+/// to generate this for you.
+///
+- (RCConfigurationBuilder * _Nonnull)withAppUserID:(NSString * _Nullable)appUserID SWIFT_WARN_UNUSED_RESULT;
+/// Set observerMode.
+/// \param observerMode Set this to true if you have your own IAP implementation and want to use only
+/// RevenueCat’s backend. Default is false.
+///
+- (RCConfigurationBuilder * _Nonnull)withObserverMode:(BOOL)observerMode SWIFT_WARN_UNUSED_RESULT;
+/// Set userDefaults.
+/// \param userDefaults Custom UserDefaults to use
+///
+- (RCConfigurationBuilder * _Nonnull)withUserDefaults:(NSUserDefaults * _Nonnull)userDefaults SWIFT_WARN_UNUSED_RESULT;
+/// Set dangerousSettings.
+/// \param dangerousSettings Only use if suggested by RevenueCat support team.
+///
+- (RCConfigurationBuilder * _Nonnull)withDangerousSettings:(RCDangerousSettings * _Nonnull)dangerousSettings SWIFT_WARN_UNUSED_RESULT;
+/// Set networkTimeout.
+- (RCConfigurationBuilder * _Nonnull)withNetworkTimeout:(NSTimeInterval)networkTimeout SWIFT_WARN_UNUSED_RESULT;
+/// Set storeKit1Timeout.
+- (RCConfigurationBuilder * _Nonnull)withStoreKit1Timeout:(NSTimeInterval)storeKit1Timeout SWIFT_WARN_UNUSED_RESULT;
+/// Set platformInfo.
+- (RCConfigurationBuilder * _Nonnull)withPlatformInfo:(RCPlatformInfo * _Nonnull)platformInfo SWIFT_WARN_UNUSED_RESULT;
+- (RCConfigurationBuilder * _Nonnull)withEntitlementVerificationMode:(enum RCEntitlementVerificationMode)mode SWIFT_WARN_UNUSED_RESULT SWIFT_AVAILABILITY(watchos,introduced=6.2) SWIFT_AVAILABILITY(tvos,introduced=13.0) SWIFT_AVAILABILITY(macos,introduced=10.15) SWIFT_AVAILABILITY(ios,introduced=13.0);
+/// Generate a Configuration object given the values configured by this builder.
+- (RCConfiguration * _Nonnull)build SWIFT_WARN_UNUSED_RESULT;
+- (nonnull instancetype)init SWIFT_UNAVAILABLE;
++ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
+@end
+
+
+@interface RCConfigurationBuilder (SWIFT_EXTENSION(RevenueCat))
+/// Set usesStoreKit2IfAvailable. If true, the SDK will use StoreKit 2 APIs internally. If disabled, it will use StoreKit 1 APIs instead.
+/// important:
+/// This configuration flag has been deprecated, and will be replaced by automatic remote configuration in the future.
+/// However, apps using it should work correctly.
+/// \param usesStoreKit2IfAvailable enable StoreKit 2 on devices that support it.
+/// Defaults to false.
+///
+- (RCConfigurationBuilder * _Nonnull)withUsesStoreKit2IfAvailable:(BOOL)usesStoreKit2IfAvailable SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_MSG("\n RevenueCat currently uses StoreKit 1 for purchases, as its stability in production scenarios has\n proven to be more performant than StoreKit 2.\n\n We're collecting more data on the best approach, but StoreKit 1 vs StoreKit 2 is an implementation detail\n that you shouldn't need to care about.\n\n Simply remove this method call to let RevenueCat decide for you which StoreKit implementation to use.\n ");
+@end
+
/// Specifies the behavior for a caching API.
typedef SWIFT_ENUM_NAMED(NSInteger, RCCacheFetchPolicy, "CacheFetchPolicy", open) {
/// Returns values from the cache, or throws an error if not available.
@@ -565,7 +658,6 @@ SWIFT_CLASS("_TtC10RevenueCat25CacheableNetworkOperation")
@interface CacheableNetworkOperation : NetworkOperation
@end
-@class RCConfigurationBuilder;
/// Configuration can be used when configuring the Purchases instance. It is not required to be used, but
/// highly recommended. This class follows a builder pattern.
@@ -591,7 +683,6 @@ SWIFT_CLASS("_TtC10RevenueCat25CacheableNetworkOperation")
/// .with(userDefaults: myUserDefaults)
/// .with(networkTimeout: 15)
/// .with(storeKit1Timeout: 15)
-/// .with(usesStoreKit2IfAvailable: true)
/// .build()
/// Purchases.configure(with: configuration)
///
@@ -604,79 +695,36 @@ SWIFT_CLASS_NAMED("Configuration")
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end
-@class NSUserDefaults;
-@class RCDangerousSettings;
-@class RCPlatformInfo;
-enum RCEntitlementVerificationLevel : NSInteger;
-
-/// The Builder for Configuration.
-SWIFT_CLASS_NAMED("Builder")
-@interface RCConfigurationBuilder : NSObject
-/// Create a new builder with your API key.
-/// \param apiKey The API Key generated for your app from https://app.revenuecat.com/
-///
-- (nonnull instancetype)initWithAPIKey:(NSString * _Nonnull)apiKey OBJC_DESIGNATED_INITIALIZER;
-/// Update your API key.
-- (RCConfigurationBuilder * _Nonnull)withApiKey:(NSString * _Nonnull)apiKey SWIFT_WARN_UNUSED_RESULT;
-/// Set an appUserID.
-/// note:
-/// Best practice is to use a salted hash of your unique app user ids.
-/// important:
-/// Set this property if you have your own user identifiers that you manage.
-/// \param appUserID The unique app user id for this user. This user id will allow users to share their
-/// purchases and subscriptions across devices. Pass nil or an empty string if you want Purchases
-/// to generate this for you.
-///
-- (RCConfigurationBuilder * _Nonnull)withAppUserID:(NSString * _Nullable)appUserID SWIFT_WARN_UNUSED_RESULT;
-/// Set observerMode.
-/// \param observerMode Set this to true if you have your own IAP implementation and want to use only
-/// RevenueCat’s backend. Default is false.
-///
-- (RCConfigurationBuilder * _Nonnull)withObserverMode:(BOOL)observerMode SWIFT_WARN_UNUSED_RESULT;
-/// Set userDefaults.
-/// \param userDefaults Custom UserDefaults to use
-///
-- (RCConfigurationBuilder * _Nonnull)withUserDefaults:(NSUserDefaults * _Nonnull)userDefaults SWIFT_WARN_UNUSED_RESULT;
-/// Set usesStoreKit2IfAvailable.
-/// \param usesStoreKit2IfAvailable opt in using StoreKit 2 on devices that support it.
-/// Defaults to false.
-///
-- (RCConfigurationBuilder * _Nonnull)withUsesStoreKit2IfAvailable:(BOOL)usesStoreKit2IfAvailable SWIFT_WARN_UNUSED_RESULT;
-/// Set dangerousSettings.
-/// \param dangerousSettings Only use if suggested by RevenueCat support team.
-///
-- (RCConfigurationBuilder * _Nonnull)withDangerousSettings:(RCDangerousSettings * _Nonnull)dangerousSettings SWIFT_WARN_UNUSED_RESULT;
-/// Set networkTimeout.
-- (RCConfigurationBuilder * _Nonnull)withNetworkTimeout:(NSTimeInterval)networkTimeout SWIFT_WARN_UNUSED_RESULT;
-/// Set storeKit1Timeout.
-- (RCConfigurationBuilder * _Nonnull)withStoreKit1Timeout:(NSTimeInterval)storeKit1Timeout SWIFT_WARN_UNUSED_RESULT;
-/// Set platformInfo.
-- (RCConfigurationBuilder * _Nonnull)withPlatformInfo:(RCPlatformInfo * _Nonnull)platformInfo SWIFT_WARN_UNUSED_RESULT;
-/// Set Configuration/EntitlementVerificationLevel
-/// note:
-/// this requires iOS 13+
-///
-/// throws:
-/// ErrorCode/configurationError if the key cannot be loaded
-- (RCConfigurationBuilder * _Nullable)withEntitlementVerificationLevel:(enum RCEntitlementVerificationLevel)level error:(NSError * _Nullable * _Nullable)error SWIFT_WARN_UNUSED_RESULT SWIFT_AVAILABILITY(watchos,introduced=6.2) SWIFT_AVAILABILITY(tvos,introduced=13.0) SWIFT_AVAILABILITY(macos,introduced=10.15) SWIFT_AVAILABILITY(ios,introduced=13.0);
-/// Generate a Configuration object given the values configured by this builder.
-- (RCConfiguration * _Nonnull)build SWIFT_WARN_UNUSED_RESULT;
-- (nonnull instancetype)init SWIFT_UNAVAILABLE;
-+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
-@end
@interface RCConfiguration (SWIFT_EXTENSION(RevenueCat))
@end
/// Defines how strict EntitlementInfo verification ought to be.
-typedef SWIFT_ENUM_NAMED(NSInteger, RCEntitlementVerificationLevel, "EntitlementVerificationLevel", closed) {
-/// The SDK will perform no entitlement verification.
- RCEntitlementVerificationLevelDisabled = 0,
-/// The SDK will verify entitlements, but will not fail to parse them if verification failed.
- RCEntitlementVerificationLevelInformationOnly = 1,
-/// The SDK will verify entitlements, and it will throw an error if verification failed.
- RCEntitlementVerificationLevelEnforced = 2,
+/// Related Symbols
+///
+/// -
+///
VerificationResult
+///
+/// -
+///
Configuration/Builder/with(entitlementVerificationMode:)
+///
+/// -
+///
EntitlementInfos/verification
+///
+///
+typedef SWIFT_ENUM_NAMED(NSInteger, RCEntitlementVerificationMode, "EntitlementVerificationMode", closed) {
+/// The SDK will not perform any entitlement verification.
+ RCEntitlementVerificationModeDisabled = 0,
+/// Enable entitlement verification.
+/// If verification fails, this will be indicated with VerificationResult/failed
+/// but parsing will not fail.
+/// This can be useful if you want to handle validation failures but still grant access.
+ RCEntitlementVerificationModeInformational = 1,
+/// Enable entitlement verification.
+/// If verification fails when fetching CustomerInfo and/or EntitlementInfos
+/// ErrorCode/signatureVerificationFailed will be thrown.
+ RCEntitlementVerificationModeEnforced = 2,
};
@@ -775,11 +823,12 @@ SWIFT_CLASS_NAMED("CustomerInfo")
+
+
@interface RCCustomerInfo (SWIFT_EXTENSION(RevenueCat))
@property (nonatomic, readonly, copy) NSDictionary * _Nonnull rawData;
@end
-
@class RCStoreTransaction;
@interface RCCustomerInfo (SWIFT_EXTENSION(RevenueCat))
@@ -792,6 +841,8 @@ SWIFT_CLASS_NAMED("CustomerInfo")
+
+
/// Only use a Dangerous Setting if suggested by RevenueCat support team.
SWIFT_CLASS_NAMED("DangerousSettings")
@interface RCDangerousSettings : NSObject
@@ -802,6 +853,27 @@ SWIFT_CLASS_NAMED("DangerousSettings")
/// synced before finishing any consumable transaction, otherwise RevenueCat won’t register the purchase.
/// Auto syncing of purchases is enabled by default.
@property (nonatomic, readonly) BOOL autoSyncPurchases;
+/// A property meant for apps that do their own entitlements computation, separated from RevenueCat.
+/// It:
+/// important:
+/// This is a dangerous setting and should only be used if you intend to do your own entitlement
+/// granting, separate from RevenueCat.
+///
+/// -
+/// disables automatic CustomerInfo cache updates
+///
+/// -
+/// disables
Purchases/logOut() and Purchases/logOut(completion:)
+///
+/// -
+/// disallows configuration of the SDK without an appUserID
+///
+/// -
+/// disables automatic firing of the PurchasesDelegate’s CustomerInfo listener when setting the delegate.
+/// It will only be called when the SDK posts a receipt or after customerInfo on device changes.
+///
+///
+@property (nonatomic, readonly) BOOL customEntitlementComputation;
- (nonnull instancetype)init;
/// Only use a Dangerous Setting if suggested by RevenueCat support team.
/// \param autoSyncPurchases Disable or enable subscribing to the StoreKit queue.
@@ -809,6 +881,10 @@ SWIFT_CLASS_NAMED("DangerousSettings")
/// automatically.
///
- (nonnull instancetype)initWithAutoSyncPurchases:(BOOL)autoSyncPurchases;
+/// note:
+/// this is internal only so the only public way to enable customEntitlementComputation
+/// is through Purchases/configureInCustomEntitlementsComputationMode(apiKey:appUserID:).
+- (nonnull instancetype)initWithAutoSyncPurchases:(BOOL)autoSyncPurchases customEntitlementComputation:(BOOL)customEntitlementComputation;
@end
@@ -816,6 +892,7 @@ SWIFT_CLASS_NAMED("DangerousSettings")
enum RCPeriodType : NSInteger;
enum RCStore : NSInteger;
enum RCPurchaseOwnershipType : NSInteger;
+enum RCVerificationResult : NSInteger;
/// The EntitlementInfo object gives you access to all of the information about the status of a user entitlement.
SWIFT_CLASS_NAMED("EntitlementInfo")
@@ -866,6 +943,7 @@ SWIFT_CLASS_NAMED("EntitlementInfo")
/// or shared to them by a family member. This can be useful for onboarding users who have had
/// an entitlement shared with them, but might not be entirely aware of the benefits they now have.
@property (nonatomic, readonly) enum RCPurchaseOwnershipType ownershipType;
+@property (nonatomic, readonly) enum RCVerificationResult verification SWIFT_AVAILABILITY(watchos,introduced=6.2) SWIFT_AVAILABILITY(tvos,introduced=13.0) SWIFT_AVAILABILITY(macos,introduced=10.15) SWIFT_AVAILABILITY(ios,introduced=13.0);
@property (nonatomic, readonly, copy) NSDictionary * _Nonnull rawData;
@property (nonatomic, readonly, copy) NSString * _Nonnull description;
- (BOOL)isEqual:(id _Nullable)object SWIFT_WARN_UNUSED_RESULT;
@@ -911,6 +989,7 @@ SWIFT_CLASS_NAMED("EntitlementInfos")
/// entitlementInfos["pro_entitlement_id"].
@property (nonatomic, readonly, copy) NSDictionary * _Nonnull all;
- (RCEntitlementInfo * _Nullable)objectForKeyedSubscript:(NSString * _Nonnull)key SWIFT_WARN_UNUSED_RESULT;
+@property (nonatomic, readonly) enum RCVerificationResult verification SWIFT_AVAILABILITY(watchos,introduced=6.2) SWIFT_AVAILABILITY(tvos,introduced=13.0) SWIFT_AVAILABILITY(macos,introduced=10.15) SWIFT_AVAILABILITY(ios,introduced=13.0);
@property (nonatomic, readonly, copy) NSString * _Nonnull description;
- (BOOL)isEqual:(id _Nullable)object SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
@@ -991,6 +1070,8 @@ typedef SWIFT_ENUM_NAMED(NSInteger, RCPurchasesErrorCode, "ErrorCode", open) {
RCAPIEndpointBlocked SWIFT_COMPILE_NAME("apiEndpointBlockedError") = 33,
RCInvalidPromotionalOfferError SWIFT_COMPILE_NAME("invalidPromotionalOfferError") = 34,
RCOfflineConnectionError SWIFT_COMPILE_NAME("offlineConnectionError") = 35,
+ RCFeatureNotAvailableInCustomEntitlementsComputationMode SWIFT_COMPILE_NAME("featureNotAvailableInCustomEntitlementsComputationMode") = 36,
+ RCSignatureVerificationFailed SWIFT_COMPILE_NAME("signatureVerificationFailed") = 37,
};
static NSString * _Nonnull const RCPurchasesErrorCodeDomain = @"RevenueCat.ErrorCode";
@@ -1043,6 +1124,12 @@ SWIFT_CLASS("_TtC10RevenueCat21GetOfferingsOperation")
+SWIFT_CLASS("_TtC10RevenueCat37GetProductEntitlementMappingOperation")
+@interface GetProductEntitlementMappingOperation : CacheableNetworkOperation
+@end
+
+
+
enum RCIntroEligibilityStatus : NSInteger;
@@ -1058,11 +1145,11 @@ SWIFT_CLASS_NAMED("IntroEligibility")
+
@interface RCIntroEligibility (SWIFT_EXTENSION(RevenueCat))
@property (nonatomic, readonly, copy) NSString * _Nonnull description;
@end
-
/// Enum of different possible states for intro price eligibility status.
///
/// -
@@ -1114,7 +1201,6 @@ typedef SWIFT_ENUM_NAMED(NSInteger, RCLogLevel, "LogLevel", open) {
-
/// Information that represents a non-subscription purchase made by a user.
SWIFT_CLASS_NAMED("NonSubscriptionTransaction")
@interface RCNonSubscriptionTransaction : NSObject
@@ -1751,13 +1837,19 @@ SWIFT_PROTOCOL_NAMED("PurchasesType")
/// important:
/// Call this method when a user has decided to purchase a product.
/// Only call this in direct response to user input.
-/// From here
Purchases will handle the purchase with StoreKit and call the PurchaseCompletedBlock.
+/// From here Purchases will handle the purchase with StoreKit and return PurchaseResultData.
/// note:
-/// You do not need to finish the transaction yourself in the completion callback, Purchases will
+/// You do not need to finish the transaction yourself after this, Purchases will
/// handle this for you.
-/// If the user cancelled, userCancelled will be true.
/// \param product The StoreProduct the user intends to purchase.
///
+///
+/// throws:
+/// An error of type ErrorCode is thrown if a failure occurs while purchasing
+///
+/// returns:
+/// A tuple with StoreTransaction and a CustomerInfo if the purchase was successful.
+/// If the user cancelled the purchase, userCancelled will be true.
- (void)purchaseWithProduct:(RCStoreProduct * _Nonnull)product completionHandler:(void (^ _Nonnull)(RCStoreTransaction * _Nullable, RCCustomerInfo * _Nullable, BOOL, NSError * _Nullable))completionHandler SWIFT_AVAILABILITY(watchos,introduced=6.2) SWIFT_AVAILABILITY(tvos,introduced=13.0) SWIFT_AVAILABILITY(macos,introduced=10.15) SWIFT_AVAILABILITY(ios,introduced=13.0);
/// Initiates a purchase of a Package.
/// important:
@@ -1779,14 +1871,74 @@ SWIFT_PROTOCOL_NAMED("PurchasesType")
/// important:
/// Call this method when a user has decided to purchase a product.
/// Only call this in direct response to user input.
-/// From here Purchases will handle the purchase with StoreKit and call the PurchaseCompletedBlock.
+/// From here Purchases will handle the purchase with StoreKit and return PurchaseResultData.
/// note:
-/// You do not need to finish the transaction yourself in the completion callback, Purchases will
+/// You do not need to finish the transaction yourself after this, Purchases will
/// handle this for you.
-/// If the user cancelled, userCancelled will be true.
/// \param package The Package the user intends to purchase
///
+///
+/// throws:
+/// An error of type ErrorCode is thrown if a failure occurs while purchasing
+///
+/// returns:
+/// A tuple with StoreTransaction and a CustomerInfo if the purchase was successful.
+/// If the user cancelled the purchase, userCancelled will be true.
- (void)purchaseWithPackage:(RCPackage * _Nonnull)package completionHandler:(void (^ _Nonnull)(RCStoreTransaction * _Nullable, RCCustomerInfo * _Nullable, BOOL, NSError * _Nullable))completionHandler SWIFT_AVAILABILITY(watchos,introduced=6.2) SWIFT_AVAILABILITY(tvos,introduced=13.0) SWIFT_AVAILABILITY(macos,introduced=10.15) SWIFT_AVAILABILITY(ios,introduced=13.0);
+/// This method will post all purchases associated with the current App Store account to RevenueCat and become
+/// associated with the current appUserID. If the receipt is being used by an existing user, the current
+/// appUserID will be aliased together with the appUserID of the existing user.
+/// Going forward, either appUserID will be able to reference the same user.
+/// You shouldn’t use this method if you have your own account system. In that case “restoration” is provided
+/// by your app passing the same appUserID used to purchase originally.
+/// note:
+/// This may force your users to enter the App Store password so should only be performed on request of
+/// the user. Typically with a button in settings or near your purchase UI. Use
+/// Purchases/syncPurchases(completion:) if you need to restore transactions programmatically.
+/// warning:
+/// Receiving a CustomerInfo instead of an error does not imply that the user has any
+/// entitlements, simply that the process was successful. You must verify the CustomerInfo/entitlements
+/// to confirm that they are active.
+- (void)restorePurchasesWithCompletion:(void (^ _Nullable)(RCCustomerInfo * _Nullable, NSError * _Nullable))completion;
+/// This method will post all purchases associated with the current App Store account to RevenueCat and become
+/// associated with the current appUserID. If the receipt is being used by an existing user, the current
+/// appUserID will be aliased together with the appUserID of the existing user.
+/// Going forward, either appUserID will be able to reference the same user.
+/// You shouldn’t use this method if you have your own account system. In that case “restoration” is provided
+/// by your app passing the same appUserID used to purchase originally.
+/// note:
+/// This may force your users to enter the App Store password so should only be performed on request of
+/// the user. Typically with a button in settings or near your purchase UI. Use
+/// Purchases/syncPurchases(completion:) if you need to restore transactions programmatically.
+/// warning:
+/// Receiving a CustomerInfo instead of an error does not imply that the user has any
+/// entitlements, simply that the process was successful. You must verify the CustomerInfo/entitlements
+/// to confirm that they are active.
+- (void)restorePurchasesWithCompletionHandler:(void (^ _Nonnull)(RCCustomerInfo * _Nullable, NSError * _Nullable))completionHandler SWIFT_AVAILABILITY(watchos,introduced=6.2) SWIFT_AVAILABILITY(tvos,introduced=13.0) SWIFT_AVAILABILITY(macos,introduced=10.15) SWIFT_AVAILABILITY(ios,introduced=13.0);
+/// This method will post all purchases associated with the current App Store account to RevenueCat and
+/// become associated with the current appUserID.
+/// If the receipt is being used by an existing user, the current appUserID will be aliased together with
+/// the appUserID of the existing user.
+/// Going forward, either appUserID will be able to reference the same user.
+/// warning:
+/// This function should only be called if you’re not calling any purchase method.
+/// note:
+/// This method will not trigger a login prompt from App Store. However, if the receipt currently
+/// on the device does not contain subscriptions, but the user has made subscription purchases, this method
+/// won’t be able to restore them. Use Purchases/restorePurchases(completion:) to cover those cases.
+- (void)syncPurchasesWithCompletion:(void (^ _Nullable)(RCCustomerInfo * _Nullable, NSError * _Nullable))completion;
+/// This method will post all purchases associated with the current App Store account to RevenueCat and
+/// become associated with the current appUserID.
+/// If the receipt is being used by an existing user, the current appUserID will be aliased together with
+/// the appUserID of the existing user.
+/// Going forward, either appUserID will be able to reference the same user.
+/// warning:
+/// This function should only be called if you’re not calling any purchase method.
+/// note:
+/// This method will not trigger a login prompt from App Store. However, if the receipt currently
+/// on the device does not contain subscriptions, but the user has made subscription purchases, this method
+/// won’t be able to restore them. Use Purchases/restorePurchases(completion:) to cover those cases.
+- (void)syncPurchasesWithCompletionHandler:(void (^ _Nonnull)(RCCustomerInfo * _Nullable, NSError * _Nullable))completionHandler SWIFT_AVAILABILITY(watchos,introduced=6.2) SWIFT_AVAILABILITY(tvos,introduced=13.0) SWIFT_AVAILABILITY(macos,introduced=10.15) SWIFT_AVAILABILITY(ios,introduced=13.0);
/// Initiates a purchase of a StoreProduct with a PromotionalOffer.
/// Use this function if you are not using the Offerings system to purchase a StoreProduct with an
/// applied PromotionalOffer.
@@ -1825,15 +1977,21 @@ SWIFT_PROTOCOL_NAMED("PurchasesType")
/// If you are using the Offerings system, use Purchases/purchase(package:promotionalOffer:completion:) instead.
/// Call this method when a user has decided to purchase a product with an applied discount.
/// Only call this in direct response to user input.
-/// From here Purchases will handle the purchase with StoreKit and call the PurchaseCompletedBlock.
+/// From here Purchases will handle the purchase with StoreKit and return PurchaseResultData.
/// note:
-/// You do not need to finish the transaction yourself in the completion callback, Purchases will handle
+/// You do not need to finish the transaction yourself after this, Purchases will handle
/// this for you.
-/// If the user cancelled, userCancelled will be true.
/// \param product The StoreProduct the user intends to purchase
///
/// \param promotionalOffer The PromotionalOffer to apply to the purchase
///
+///
+/// throws:
+/// An error of type ErrorCode is thrown if a failure occurs while purchasing
+///
+/// returns:
+/// A tuple with StoreTransaction and a CustomerInfo if the purchase was successful.
+/// If the user cancelled the purchase, userCancelled will be true.
- (void)purchaseWithProduct:(RCStoreProduct * _Nonnull)product promotionalOffer:(RCPromotionalOffer * _Nonnull)promotionalOffer completionHandler:(void (^ _Nonnull)(RCStoreTransaction * _Nullable, RCCustomerInfo * _Nullable, BOOL, NSError * _Nullable))completionHandler SWIFT_AVAILABILITY(watchos,introduced=6.2) SWIFT_AVAILABILITY(tvos,introduced=13.0) SWIFT_AVAILABILITY(macos,introduced=10.15) SWIFT_AVAILABILITY(ios,introduced=13.0);
/// Purchase the passed Package.
/// Call this method when a user has decided to purchase a product with an applied discount. Only call this in
@@ -1854,63 +2012,23 @@ SWIFT_PROTOCOL_NAMED("PurchasesType")
- (void)purchasePackage:(RCPackage * _Nonnull)package withPromotionalOffer:(RCPromotionalOffer * _Nonnull)promotionalOffer completion:(void (^ _Nonnull)(RCStoreTransaction * _Nullable, RCCustomerInfo * _Nullable, NSError * _Nullable, BOOL))completion SWIFT_AVAILABILITY(tvos,introduced=12.2) SWIFT_AVAILABILITY(maccatalyst,introduced=13.0) SWIFT_AVAILABILITY(watchos,introduced=6.2) SWIFT_AVAILABILITY(macos,introduced=10.14.4) SWIFT_AVAILABILITY(ios,introduced=12.2);
/// Purchase the passed Package.
/// Call this method when a user has decided to purchase a product with an applied discount. Only call this in
-/// direct response to user input. From here Purchases will handle the purchase with StoreKit and call the
-/// PurchaseCompletedBlock.
+/// direct response to user input. From here Purchases will handle the purchase with StoreKit and return
+/// PurchaseResultData.
/// note:
-/// You do not need to finish the transaction yourself in the completion callback, Purchases will handle
+/// You do not need to finish the transaction yourself after this, Purchases will handle
/// this for you.
-/// If the user cancelled, userCancelled will be true.
/// \param package The Package the user intends to purchase
///
/// \param promotionalOffer The PromotionalOffer to apply to the purchase
///
+///
+/// throws:
+/// An error of type ErrorCode is thrown if a failure occurs while purchasing
+///
+/// returns:
+/// A tuple with StoreTransaction and a CustomerInfo if the purchase was successful.
+/// If the user cancelled the purchase, userCancelled will be true.
- (void)purchaseWithPackage:(RCPackage * _Nonnull)package promotionalOffer:(RCPromotionalOffer * _Nonnull)promotionalOffer completionHandler:(void (^ _Nonnull)(RCStoreTransaction * _Nullable, RCCustomerInfo * _Nullable, BOOL, NSError * _Nullable))completionHandler SWIFT_AVAILABILITY(watchos,introduced=6.2) SWIFT_AVAILABILITY(tvos,introduced=13.0) SWIFT_AVAILABILITY(macos,introduced=10.15) SWIFT_AVAILABILITY(ios,introduced=13.0);
-/// This method will post all purchases associated with the current App Store account to RevenueCat and become
-/// associated with the current appUserID. If the receipt is being used by an existing user, the current
-/// appUserID will be aliased together with the appUserID of the existing user.
-/// Going forward, either appUserID will be able to reference the same user.
-/// You shouldn’t use this method if you have your own account system. In that case “restoration” is provided
-/// by your app passing the same appUserID used to purchase originally.
-/// note:
-/// This may force your users to enter the App Store password so should only be performed on request of
-/// the user. Typically with a button in settings or near your purchase UI. Use
-/// Purchases/syncPurchases(completion:) if you need to restore transactions programmatically.
-- (void)restorePurchasesWithCompletion:(void (^ _Nullable)(RCCustomerInfo * _Nullable, NSError * _Nullable))completion;
-/// This method will post all purchases associated with the current App Store account to RevenueCat and become
-/// associated with the current appUserID. If the receipt is being used by an existing user, the current
-/// appUserID will be aliased together with the appUserID of the existing user.
-/// Going forward, either appUserID will be able to reference the same user.
-/// You shouldn’t use this method if you have your own account system. In that case “restoration” is provided
-/// by your app passing the same appUserID used to purchase originally.
-/// note:
-/// This may force your users to enter the App Store password so should only be performed on request of
-/// the user. Typically with a button in settings or near your purchase UI. Use
-/// Purchases/syncPurchases(completion:) if you need to restore transactions programmatically.
-- (void)restorePurchasesWithCompletionHandler:(void (^ _Nonnull)(RCCustomerInfo * _Nullable, NSError * _Nullable))completionHandler SWIFT_AVAILABILITY(watchos,introduced=6.2) SWIFT_AVAILABILITY(tvos,introduced=13.0) SWIFT_AVAILABILITY(macos,introduced=10.15) SWIFT_AVAILABILITY(ios,introduced=13.0);
-/// This method will post all purchases associated with the current App Store account to RevenueCat and
-/// become associated with the current appUserID.
-/// If the receipt is being used by an existing user, the current appUserID will be aliased together with
-/// the appUserID of the existing user.
-/// Going forward, either appUserID will be able to reference the same user.
-/// warning:
-/// This function should only be called if you’re not calling any purchase method.
-/// note:
-/// This method will not trigger a login prompt from App Store. However, if the receipt currently
-/// on the device does not contain subscriptions, but the user has made subscription purchases, this method
-/// won’t be able to restore them. Use Purchases/restorePurchases(completion:) to cover those cases.
-- (void)syncPurchasesWithCompletion:(void (^ _Nullable)(RCCustomerInfo * _Nullable, NSError * _Nullable))completion;
-/// This method will post all purchases associated with the current App Store account to RevenueCat and
-/// become associated with the current appUserID.
-/// If the receipt is being used by an existing user, the current appUserID will be aliased together with
-/// the appUserID of the existing user.
-/// Going forward, either appUserID will be able to reference the same user.
-/// warning:
-/// This function should only be called if you’re not calling any purchase method.
-/// note:
-/// This method will not trigger a login prompt from App Store. However, if the receipt currently
-/// on the device does not contain subscriptions, but the user has made subscription purchases, this method
-/// won’t be able to restore them. Use Purchases/restorePurchases(completion:) to cover those cases.
-- (void)syncPurchasesWithCompletionHandler:(void (^ _Nonnull)(RCCustomerInfo * _Nullable, NSError * _Nullable))completionHandler SWIFT_AVAILABILITY(watchos,introduced=6.2) SWIFT_AVAILABILITY(tvos,introduced=13.0) SWIFT_AVAILABILITY(macos,introduced=10.15) SWIFT_AVAILABILITY(ios,introduced=13.0);
/// Computes whether or not a user is eligible for the introductory pricing period of a given product.
/// You should use this method to determine whether or not you show the user the normal product price or
/// the introductory price. This also applies to trials (trials are considered a type of introductory pricing).
@@ -2253,7 +2371,6 @@ SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _No
-
SWIFT_PROTOCOL("_TtP10RevenueCat29PurchasesOrchestratorDelegate_")
@protocol PurchasesOrchestratorDelegate
- (void)readyForPromotedProduct:(RCStoreProduct * _Nonnull)product purchase:(void (^ _Nonnull)(void (^ _Nonnull)(RCStoreTransaction * _Nullable, RCCustomerInfo * _Nullable, NSError * _Nullable, BOOL)))startPurchase;
@@ -2280,6 +2397,8 @@ SWIFT_PROTOCOL("_TtP10RevenueCat29PurchasesOrchestratorDelegate_")
@end
+
+
@interface RCPurchases (SWIFT_EXTENSION(RevenueCat))
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, strong) RCPlatformInfo * _Nullable platformInfo;)
+ (RCPlatformInfo * _Nullable)platformInfo SWIFT_WARN_UNUSED_RESULT;
@@ -2296,6 +2415,14 @@ SWIFT_CLASS_NAMED("PlatformInfo")
+@interface RCPurchases (SWIFT_EXTENSION(RevenueCat))
+- (void)logIn:(NSString * _Nonnull)appUserID completion:(void (^ _Nonnull)(RCCustomerInfo * _Nullable, BOOL, NSError * _Nullable))completion;
+- (void)logIn:(NSString * _Nonnull)appUserID completionHandler:(void (^ _Nonnull)(RCCustomerInfo * _Nullable, BOOL, NSError * _Nullable))completionHandler SWIFT_AVAILABILITY(watchos,introduced=6.2) SWIFT_AVAILABILITY(tvos,introduced=13.0) SWIFT_AVAILABILITY(macos,introduced=10.15) SWIFT_AVAILABILITY(ios,introduced=13.0);
+- (void)logOutWithCompletion:(void (^ _Nullable)(RCCustomerInfo * _Nullable, NSError * _Nullable))completion;
+- (void)logOutWithCompletionHandler:(void (^ _Nonnull)(RCCustomerInfo * _Nullable, NSError * _Nullable))completionHandler SWIFT_AVAILABILITY(watchos,introduced=6.2) SWIFT_AVAILABILITY(tvos,introduced=13.0) SWIFT_AVAILABILITY(macos,introduced=10.15) SWIFT_AVAILABILITY(ios,introduced=13.0);
+@end
+
+
@interface RCPurchases (SWIFT_EXTENSION(RevenueCat))
/// Configures an instance of the Purchases SDK with a specified Configuration.
/// The instance will be set as a singleton.
@@ -2306,7 +2433,6 @@ SWIFT_CLASS_NAMED("PlatformInfo")
/// \code
/// Purchases.configure(
/// with: Configuration.Builder(withAPIKey: Constants.apiKey)
-/// .with(usesStoreKit2IfAvailable: true)
/// .with(observerMode: false)
/// .with(appUserID: "")
/// .build()
@@ -2327,7 +2453,6 @@ SWIFT_CLASS_NAMED("PlatformInfo")
/// \code
/// Purchases.configure(
/// with: .init(withAPIKey: Constants.apiKey)
-/// .with(usesStoreKit2IfAvailable: true)
/// .with(observerMode: false)
/// .with(appUserID: "")
/// )
@@ -2416,6 +2541,14 @@ SWIFT_CLASS_PROPERTY(@property (nonatomic, class) BOOL debugLogsEnabled SWIFT_DE
@end
+@interface RCPurchases (SWIFT_EXTENSION(RevenueCat))
+@property (nonatomic, readonly, copy) NSString * _Nonnull appUserID;
+@property (nonatomic, readonly) BOOL isAnonymous;
+- (void)getOfferingsWithCompletion:(void (^ _Nonnull)(RCOfferings * _Nullable, NSError * _Nullable))completion;
+- (void)offeringsWithCompletionHandler:(void (^ _Nonnull)(RCOfferings * _Nullable, NSError * _Nullable))completionHandler SWIFT_AVAILABILITY(watchos,introduced=6.2) SWIFT_AVAILABILITY(tvos,introduced=13.0) SWIFT_AVAILABILITY(macos,introduced=10.15) SWIFT_AVAILABILITY(ios,introduced=13.0);
+@end
+
+
@interface RCPurchases (SWIFT_EXTENSION(RevenueCat))
+ (RCPurchases * _Nonnull)configureWithAPIKey:(NSString * _Nonnull)apiKey appUserID:(NSString * _Nullable)appUserID observerMode:(BOOL)observerMode userDefaults:(NSUserDefaults * _Nullable)userDefaults SWIFT_AVAILABILITY(maccatalyst,deprecated=1,message="'configure' has been renamed to 'configure(with:)'") SWIFT_AVAILABILITY(macos,deprecated=1,message="'configure' has been renamed to 'configure(with:)'") SWIFT_AVAILABILITY(watchos,deprecated=1,message="'configure' has been renamed to 'configure(with:)'") SWIFT_AVAILABILITY(tvos,deprecated=1,message="'configure' has been renamed to 'configure(with:)'") SWIFT_AVAILABILITY(ios,deprecated=1,message="'configure' has been renamed to 'configure(with:)'");
+ (RCPurchases * _Nonnull)configureWithAPIKey:(NSString * _Nonnull)apiKey appUserID:(NSString * _Nullable)appUserID observerMode:(BOOL)observerMode userDefaults:(NSUserDefaults * _Nullable)userDefaults useStoreKit2IfAvailable:(BOOL)useStoreKit2IfAvailable SWIFT_AVAILABILITY(maccatalyst,deprecated=1,message="'configure' has been renamed to 'configure(with:)'") SWIFT_AVAILABILITY(macos,deprecated=1,message="'configure' has been renamed to 'configure(with:)'") SWIFT_AVAILABILITY(watchos,deprecated=1,message="'configure' has been renamed to 'configure(with:)'") SWIFT_AVAILABILITY(tvos,deprecated=1,message="'configure' has been renamed to 'configure(with:)'") SWIFT_AVAILABILITY(ios,deprecated=1,message="'configure' has been renamed to 'configure(with:)'");
@@ -2429,18 +2562,6 @@ SWIFT_CLASS_PROPERTY(@property (nonatomic, class) BOOL automaticAppleSearchAdsAt
-@interface RCPurchases (SWIFT_EXTENSION(RevenueCat))
-@property (nonatomic, readonly, copy) NSString * _Nonnull appUserID;
-@property (nonatomic, readonly) BOOL isAnonymous;
-- (void)logIn:(NSString * _Nonnull)appUserID completion:(void (^ _Nonnull)(RCCustomerInfo * _Nullable, BOOL, NSError * _Nullable))completion;
-- (void)logIn:(NSString * _Nonnull)appUserID completionHandler:(void (^ _Nonnull)(RCCustomerInfo * _Nullable, BOOL, NSError * _Nullable))completionHandler SWIFT_AVAILABILITY(watchos,introduced=6.2) SWIFT_AVAILABILITY(tvos,introduced=13.0) SWIFT_AVAILABILITY(macos,introduced=10.15) SWIFT_AVAILABILITY(ios,introduced=13.0);
-- (void)logOutWithCompletion:(void (^ _Nullable)(RCCustomerInfo * _Nullable, NSError * _Nullable))completion;
-- (void)logOutWithCompletionHandler:(void (^ _Nonnull)(RCCustomerInfo * _Nullable, NSError * _Nullable))completionHandler SWIFT_AVAILABILITY(watchos,introduced=6.2) SWIFT_AVAILABILITY(tvos,introduced=13.0) SWIFT_AVAILABILITY(macos,introduced=10.15) SWIFT_AVAILABILITY(ios,introduced=13.0);
-- (void)getOfferingsWithCompletion:(void (^ _Nonnull)(RCOfferings * _Nullable, NSError * _Nullable))completion;
-- (void)offeringsWithCompletionHandler:(void (^ _Nonnull)(RCOfferings * _Nullable, NSError * _Nullable))completionHandler SWIFT_AVAILABILITY(watchos,introduced=6.2) SWIFT_AVAILABILITY(tvos,introduced=13.0) SWIFT_AVAILABILITY(macos,introduced=10.15) SWIFT_AVAILABILITY(ios,introduced=13.0);
-@end
-
-
@interface RCPurchases (SWIFT_EXTENSION(RevenueCat))
- (void)collectDeviceIdentifiers SWIFT_AVAILABILITY(maccatalyst,deprecated=0.0.1,message="'collectDeviceIdentifiers' has been renamed to 'attribution.collectDeviceIdentifiers()'") SWIFT_AVAILABILITY(macos,deprecated=0.0.1,message="'collectDeviceIdentifiers' has been renamed to 'attribution.collectDeviceIdentifiers()'") SWIFT_AVAILABILITY(watchos,deprecated=0.0.1,message="'collectDeviceIdentifiers' has been renamed to 'attribution.collectDeviceIdentifiers()'") SWIFT_AVAILABILITY(tvos,deprecated=0.0.1,message="'collectDeviceIdentifiers' has been renamed to 'attribution.collectDeviceIdentifiers()'") SWIFT_AVAILABILITY(ios,deprecated=0.0.1,message="'collectDeviceIdentifiers' has been renamed to 'attribution.collectDeviceIdentifiers()'");
@@ -2643,14 +2764,14 @@ SWIFT_CLASS_PROPERTY(@property (nonatomic, class) BOOL automaticAppleSearchAdsAt
- (void)purchaseWithProduct:(RCStoreProduct * _Nonnull)product completionHandler:(void (^ _Nonnull)(RCStoreTransaction * _Nullable, RCCustomerInfo * _Nullable, BOOL, NSError * _Nullable))completionHandler SWIFT_AVAILABILITY(watchos,introduced=6.2) SWIFT_AVAILABILITY(tvos,introduced=13.0) SWIFT_AVAILABILITY(macos,introduced=10.15) SWIFT_AVAILABILITY(ios,introduced=13.0);
- (void)purchasePackage:(RCPackage * _Nonnull)package withCompletion:(void (^ _Nonnull)(RCStoreTransaction * _Nullable, RCCustomerInfo * _Nullable, NSError * _Nullable, BOOL))completion;
- (void)purchaseWithPackage:(RCPackage * _Nonnull)package completionHandler:(void (^ _Nonnull)(RCStoreTransaction * _Nullable, RCCustomerInfo * _Nullable, BOOL, NSError * _Nullable))completionHandler SWIFT_AVAILABILITY(watchos,introduced=6.2) SWIFT_AVAILABILITY(tvos,introduced=13.0) SWIFT_AVAILABILITY(macos,introduced=10.15) SWIFT_AVAILABILITY(ios,introduced=13.0);
-- (void)purchaseProduct:(RCStoreProduct * _Nonnull)product withPromotionalOffer:(RCPromotionalOffer * _Nonnull)promotionalOffer completion:(void (^ _Nonnull)(RCStoreTransaction * _Nullable, RCCustomerInfo * _Nullable, NSError * _Nullable, BOOL))completion SWIFT_AVAILABILITY(tvos,introduced=12.2) SWIFT_AVAILABILITY(maccatalyst,introduced=13.0) SWIFT_AVAILABILITY(watchos,introduced=6.2) SWIFT_AVAILABILITY(macos,introduced=10.14.4) SWIFT_AVAILABILITY(ios,introduced=12.2);
-- (void)purchaseWithProduct:(RCStoreProduct * _Nonnull)product promotionalOffer:(RCPromotionalOffer * _Nonnull)promotionalOffer completionHandler:(void (^ _Nonnull)(RCStoreTransaction * _Nullable, RCCustomerInfo * _Nullable, BOOL, NSError * _Nullable))completionHandler SWIFT_AVAILABILITY(watchos,introduced=6.2) SWIFT_AVAILABILITY(tvos,introduced=13.0) SWIFT_AVAILABILITY(macos,introduced=10.15) SWIFT_AVAILABILITY(ios,introduced=13.0);
-- (void)purchasePackage:(RCPackage * _Nonnull)package withPromotionalOffer:(RCPromotionalOffer * _Nonnull)promotionalOffer completion:(void (^ _Nonnull)(RCStoreTransaction * _Nullable, RCCustomerInfo * _Nullable, NSError * _Nullable, BOOL))completion SWIFT_AVAILABILITY(tvos,introduced=12.2) SWIFT_AVAILABILITY(maccatalyst,introduced=13.0) SWIFT_AVAILABILITY(watchos,introduced=6.2) SWIFT_AVAILABILITY(macos,introduced=10.14.4) SWIFT_AVAILABILITY(ios,introduced=12.2);
-- (void)purchaseWithPackage:(RCPackage * _Nonnull)package promotionalOffer:(RCPromotionalOffer * _Nonnull)promotionalOffer completionHandler:(void (^ _Nonnull)(RCStoreTransaction * _Nullable, RCCustomerInfo * _Nullable, BOOL, NSError * _Nullable))completionHandler SWIFT_AVAILABILITY(watchos,introduced=6.2) SWIFT_AVAILABILITY(tvos,introduced=13.0) SWIFT_AVAILABILITY(macos,introduced=10.15) SWIFT_AVAILABILITY(ios,introduced=13.0);
- (void)syncPurchasesWithCompletion:(void (^ _Nullable)(RCCustomerInfo * _Nullable, NSError * _Nullable))completion;
- (void)syncPurchasesWithCompletionHandler:(void (^ _Nonnull)(RCCustomerInfo * _Nullable, NSError * _Nullable))completionHandler SWIFT_AVAILABILITY(watchos,introduced=6.2) SWIFT_AVAILABILITY(tvos,introduced=13.0) SWIFT_AVAILABILITY(macos,introduced=10.15) SWIFT_AVAILABILITY(ios,introduced=13.0);
- (void)restorePurchasesWithCompletion:(void (^ _Nullable)(RCCustomerInfo * _Nullable, NSError * _Nullable))completion;
- (void)restorePurchasesWithCompletionHandler:(void (^ _Nonnull)(RCCustomerInfo * _Nullable, NSError * _Nullable))completionHandler SWIFT_AVAILABILITY(watchos,introduced=6.2) SWIFT_AVAILABILITY(tvos,introduced=13.0) SWIFT_AVAILABILITY(macos,introduced=10.15) SWIFT_AVAILABILITY(ios,introduced=13.0);
+- (void)purchaseProduct:(RCStoreProduct * _Nonnull)product withPromotionalOffer:(RCPromotionalOffer * _Nonnull)promotionalOffer completion:(void (^ _Nonnull)(RCStoreTransaction * _Nullable, RCCustomerInfo * _Nullable, NSError * _Nullable, BOOL))completion SWIFT_AVAILABILITY(tvos,introduced=12.2) SWIFT_AVAILABILITY(maccatalyst,introduced=13.0) SWIFT_AVAILABILITY(watchos,introduced=6.2) SWIFT_AVAILABILITY(macos,introduced=10.14.4) SWIFT_AVAILABILITY(ios,introduced=12.2);
+- (void)purchaseWithProduct:(RCStoreProduct * _Nonnull)product promotionalOffer:(RCPromotionalOffer * _Nonnull)promotionalOffer completionHandler:(void (^ _Nonnull)(RCStoreTransaction * _Nullable, RCCustomerInfo * _Nullable, BOOL, NSError * _Nullable))completionHandler SWIFT_AVAILABILITY(watchos,introduced=6.2) SWIFT_AVAILABILITY(tvos,introduced=13.0) SWIFT_AVAILABILITY(macos,introduced=10.15) SWIFT_AVAILABILITY(ios,introduced=13.0);
+- (void)purchasePackage:(RCPackage * _Nonnull)package withPromotionalOffer:(RCPromotionalOffer * _Nonnull)promotionalOffer completion:(void (^ _Nonnull)(RCStoreTransaction * _Nullable, RCCustomerInfo * _Nullable, NSError * _Nullable, BOOL))completion SWIFT_AVAILABILITY(tvos,introduced=12.2) SWIFT_AVAILABILITY(maccatalyst,introduced=13.0) SWIFT_AVAILABILITY(watchos,introduced=6.2) SWIFT_AVAILABILITY(macos,introduced=10.14.4) SWIFT_AVAILABILITY(ios,introduced=12.2);
+- (void)purchaseWithPackage:(RCPackage * _Nonnull)package promotionalOffer:(RCPromotionalOffer * _Nonnull)promotionalOffer completionHandler:(void (^ _Nonnull)(RCStoreTransaction * _Nullable, RCCustomerInfo * _Nullable, BOOL, NSError * _Nullable))completionHandler SWIFT_AVAILABILITY(watchos,introduced=6.2) SWIFT_AVAILABILITY(tvos,introduced=13.0) SWIFT_AVAILABILITY(macos,introduced=10.15) SWIFT_AVAILABILITY(ios,introduced=13.0);
- (void)checkTrialOrIntroDiscountEligibility:(NSArray * _Nonnull)productIdentifiers completion:(void (^ _Nonnull)(NSDictionary * _Nonnull))completion;
- (void)checkTrialOrIntroDiscountEligibilityWithProductIdentifiers:(NSArray * _Nonnull)productIdentifiers completionHandler:(void (^ _Nonnull)(NSDictionary * _Nonnull))completionHandler SWIFT_AVAILABILITY(watchos,introduced=6.2) SWIFT_AVAILABILITY(macos,introduced=10.15) SWIFT_AVAILABILITY(tvos,introduced=13.0) SWIFT_AVAILABILITY(ios,introduced=13.0);
- (void)checkTrialOrIntroDiscountEligibilityForProduct:(RCStoreProduct * _Nonnull)product completion:(void (^ _Nonnull)(enum RCIntroEligibilityStatus))completion;
@@ -2743,7 +2864,6 @@ SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong, getter=defau
@end
-
SWIFT_AVAILABILITY(watchos,introduced=6.2) SWIFT_AVAILABILITY(tvos,introduced=13.0) SWIFT_AVAILABILITY(macos,introduced=10.15) SWIFT_AVAILABILITY(ios,introduced=13.0)
@interface RCPurchasesDiagnostics (SWIFT_EXTENSION(RevenueCat))
/// Perform tests to ensure SDK is configured correctly.
@@ -2758,6 +2878,7 @@ SWIFT_AVAILABILITY(watchos,introduced=6.2) SWIFT_AVAILABILITY(tvos,introduced=13
+
/// A type that can parse Apple receipts from a device.
/// This implements parsing based on Apple’s documentation.
/// To use this class you must access PurchasesReceiptParser/default:
@@ -2781,7 +2902,6 @@ SWIFT_CLASS("_TtC10RevenueCat22PurchasesReceiptParser")
-
@interface PurchasesReceiptParser (SWIFT_EXTENSION(RevenueCat))
/// A default instance of PurchasesReceiptParser
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong, getter=default) PurchasesReceiptParser * _Nonnull default_;)
@@ -2790,11 +2910,24 @@ SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong, getter=defau
+
SWIFT_CLASS("_TtC10RevenueCat21RCPurchasesErrorUtils") SWIFT_AVAILABILITY(maccatalyst,obsoleted=1) SWIFT_AVAILABILITY(macos,obsoleted=1) SWIFT_AVAILABILITY(watchos,obsoleted=1) SWIFT_AVAILABILITY(tvos,obsoleted=1) SWIFT_AVAILABILITY(ios,obsoleted=1)
@interface RCPurchasesErrorUtils : NSObject
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end
+@class NSURLSession;
+@class NSURLSessionTask;
+@class NSHTTPURLResponse;
+@class NSURLRequest;
+
+/// Implementation of URLSessionTaskDelegate that logs when the task will perform a redirection.
+SWIFT_CLASS("_TtC10RevenueCat29RedirectLoggerSessionDelegate")
+@interface RedirectLoggerSessionDelegate : NSObject
+- (void)URLSession:(NSURLSession * _Nonnull)session task:(NSURLSessionTask * _Nonnull)task willPerformHTTPRedirection:(NSHTTPURLResponse * _Nonnull)response newRequest:(NSURLRequest * _Nonnull)request completionHandler:(void (^ _Nonnull)(NSURLRequest * _Nullable))completionHandler;
+- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
+@end
+
/// Status codes for refund requests.
typedef SWIFT_ENUM_NAMED(NSInteger, RCRefundRequestStatus, "RefundRequestStatus", open) {
/// User canceled submission of the refund request.
@@ -2889,7 +3022,7 @@ SWIFT_CLASS_NAMED("StoreProduct")
@property (nonatomic, readonly, copy) NSString * _Nullable currencyCode;
@property (nonatomic, readonly, copy) NSString * _Nonnull localizedPriceString;
@property (nonatomic, readonly, copy) NSString * _Nonnull productIdentifier;
-@property (nonatomic, readonly) BOOL isFamilyShareable SWIFT_AVAILABILITY(watchos,introduced=8.0) SWIFT_AVAILABILITY(tvos,introduced=14.0) SWIFT_AVAILABILITY(macos,introduced=11.0) SWIFT_AVAILABILITY(ios,introduced=14.0);
+@property (nonatomic, readonly) BOOL isFamilyShareable SWIFT_AVAILABILITY(watchos,introduced=7.0) SWIFT_AVAILABILITY(tvos,introduced=14.0) SWIFT_AVAILABILITY(macos,introduced=11.0) SWIFT_AVAILABILITY(ios,introduced=14.0);
@property (nonatomic, readonly, copy) NSString * _Nullable subscriptionGroupIdentifier SWIFT_AVAILABILITY(watchos,introduced=6.2) SWIFT_AVAILABILITY(macos,introduced=10.14) SWIFT_AVAILABILITY(tvos,introduced=12.0) SWIFT_AVAILABILITY(maccatalyst,introduced=13.0) SWIFT_AVAILABILITY(ios,introduced=12.0);
@property (nonatomic, readonly, strong) NSNumberFormatter * _Nullable priceFormatter;
@property (nonatomic, readonly, strong) RCSubscriptionPeriod * _Nullable subscriptionPeriod SWIFT_AVAILABILITY(watchos,introduced=6.2) SWIFT_AVAILABILITY(tvos,introduced=11.2) SWIFT_AVAILABILITY(macos,introduced=10.13.2) SWIFT_AVAILABILITY(ios,introduced=11.2);
@@ -3163,6 +3296,32 @@ SWIFT_CLASS_NAMED("Transaction") SWIFT_AVAILABILITY(macos,obsoleted=1,message="'
+typedef SWIFT_ENUM_NAMED(NSInteger, RCVerificationResult, "VerificationResult", closed) {
+/// No verification was done.
+/// This can happen for multiple reasons:
+///
+/// -
+/// Verification is not enabled in
Configuration
+///
+/// -
+/// Verification can’t be performed prior to iOS 13.0
+///
+///
+ RCVerificationResultNotRequested = 0,
+/// Entitlements were verified with our server.
+ RCVerificationResultVerified = 1,
+/// Entitlements were created and verified on device through StoreKit 2.
+ RCVerificationResultVerifiedOnDevice = 3,
+/// Entitlement verification failed, possibly due to a MiTM attack.
+/// Related Symbols
+///
+/// -
+///
ErrorCode/signatureVerificationFailed
+///
+///
+ RCVerificationResultFailed = 2,
+};
+
#endif
#if defined(__cplusplus)
#endif
diff --git a/Tests/UnitTests/Info.plist b/Tests/UnitTests/Info.plist
index 6f4ce7247b..47b631fe0e 100644
--- a/Tests/UnitTests/Info.plist
+++ b/Tests/UnitTests/Info.plist
@@ -15,7 +15,7 @@
CFBundlePackageType
$(PRODUCT_BUNDLE_PACKAGE_TYPE)
CFBundleShortVersionString
- 4.18.0
+ 4.19.0
CFBundleVersion
1
diff --git a/Tests/UnitTestsHostApp/Info.plist b/Tests/UnitTestsHostApp/Info.plist
index a3f567f9fc..e065cda931 100644
--- a/Tests/UnitTestsHostApp/Info.plist
+++ b/Tests/UnitTestsHostApp/Info.plist
@@ -17,7 +17,7 @@
CFBundlePackageType
$(PRODUCT_BUNDLE_PACKAGE_TYPE)
CFBundleShortVersionString
- 4.18.0
+ 4.19.0
CFBundleVersion
1
LSRequiresIPhoneOS
diff --git a/scripts/docs/index.html b/scripts/docs/index.html
index f12fb9ac35..65a7293a20 100644
--- a/scripts/docs/index.html
+++ b/scripts/docs/index.html
@@ -2,7 +2,7 @@
-
+
diff --git a/scripts/docs/v4_api_migration_guide.html b/scripts/docs/v4_api_migration_guide.html
index 67507906b6..7e37d07385 100644
--- a/scripts/docs/v4_api_migration_guide.html
+++ b/scripts/docs/v4_api_migration_guide.html
@@ -2,7 +2,7 @@
-
+