**This is an automatic release.**
### New Features
* `Offering`: new `getMetadataValue` with `Decodable` type (#3373) via
NachoSoto (@NachoSoto)
* Add `StoreProduct.pricePerWeek` (#3354) via NachoSoto (@NachoSoto)
### RevenueCatUI
* `Paywalls`: `.presentPaywallIfNeeded` allows overriding `Offering`
(#3370) via NachoSoto (@NachoSoto)
* `Paywalls`: new optional `displayCloseButton` parameter (#3359) via
NachoSoto (@NachoSoto)
* `Paywalls`: improve period abbreviations in Japanese (#3367) via
NachoSoto (@NachoSoto)
* `Paywalls`: new `{{ sub_price_per_week }}` variable (#3355) via
NachoSoto (@NachoSoto)
* `Paywalls`: log warning when attempting to purchase already-subscribed
product (#3366) via NachoSoto (@NachoSoto)
* `Paywalls`: improve Japanese localization (#3364) via NachoSoto
(@NachoSoto)
* `Paywalls`: fix template 2 top padding inside navigation view (#3363)
via NachoSoto (@NachoSoto)
* `Paywalls`: avoid animating `PurchaseButton` labels when text does not
change (#3361) via NachoSoto (@NachoSoto)
* `Paywalls`: improve `FooterView` accessibility (#3349) via NachoSoto
(@NachoSoto)
### Dependency Updates
* Bump cocoapods from 1.14.0 to 1.14.2 (#3356) via dependabot[bot]
(@dependabot[bot])
* Bump cocoapods from 1.13.0 to 1.14.0 (#3351) via dependabot[bot]
(@dependabot[bot])
### Other Changes
* `Paywalls`: simplify `PurchaseButton` (#3362) via NachoSoto
(@NachoSoto)
* `Paywalls`: refactored `IntroEligibilityStateView` (#3360) via
NachoSoto (@NachoSoto)
* `Paywall Tester`: improve template 5 dark colors (#3358) via NachoSoto
(@NachoSoto)
* `Paywalls`: improve conversion from `Color`/`UIColor` to
`PaywallColor` (#3357) via NachoSoto (@NachoSoto)
* `Paywalls Tester`: improve `.paywallFooter` presentation (#3348) via
NachoSoto (@NachoSoto)
* `Paywalls`: move size configuration to `TemplateViewType` (#3352) via
NachoSoto (@NachoSoto)
---------
Co-authored-by: NachoSoto <ignaciosoto90@gmail.com>
**This is an automatic release.**
### New Features
* `PaywallColor`: change visibility of `Color.init(light:dark:)` to
`private` (#3345) via NachoSoto (@NachoSoto)
### RevenueCatUI
* `Paywalls`: new `.onPurchaseCompleted` overload with
`StoreTransaction` (#3323) via NachoSoto (@NachoSoto)
* `Paywalls`: finished template 5 (#3340) via NachoSoto (@NachoSoto)
* `Paywalls`: new `onDismiss` parameter for `presentPaywallIfNeeded`
(#3342) via NachoSoto (@NachoSoto)
* `Paywalls`: disable shimmering on footer loading view (#3324) via
NachoSoto (@NachoSoto)
### Bugfixes
* `ErrorUtils.purchasesError(withSKError:)`: handle `URLError`s (#3346)
via NachoSoto (@NachoSoto)
### Other Changes
* `Paywalls`: add identifier to events (#3332) via Josh Holtz
(@joshdholtz)
* `Paywalls`: create new event session when paywall appears (#3330) via
Josh Holtz (@joshdholtz)
* `HTTPClient`: verbose logs for request IDs (#3320) via NachoSoto
(@NachoSoto)
* `Paywalls Tester`: fix `macOS` build (#3341) via NachoSoto
(@NachoSoto)
* `ProductFetcherSK1`: enable `TimingUtil` log (#3327) via NachoSoto
(@NachoSoto)
* `Paywall Tester`: fixed paywall presentation (#3339) via NachoSoto
(@NachoSoto)
* `CI`: replace Carthage build jobs with `xcodebuild` (#3338) via
NachoSoto (@NachoSoto)
* `Integration Tests`: use repetition count from test plan (#3329) via
NachoSoto (@NachoSoto)
* `Integration Tests`: new logs for troubleshooting flaky tests (#3328)
via NachoSoto (@NachoSoto)
* `CircleCI`: change iOS 17 job to use M1 Large resource (#3322) via
NachoSoto (@NachoSoto)
* `Paywalls Tester`: fix release build (#3321) via NachoSoto
(@NachoSoto)
* `Paywalls`: enable all iOS 17 tests (#3331) via NachoSoto (@NachoSoto)
* `CI`: added workaround for Snapshots in `Xcode Cloud` (#2857) via
NachoSoto (@NachoSoto)
* `StoreKit 1`: disabled `finishTransactions` log on observer mode
(#3314) via NachoSoto (@NachoSoto)
---------
Co-authored-by: NachoSoto <ignaciosoto90@gmail.com>
**This is an automatic release.**
### Bugfixes
* `PaywallEventStore`: also remove legacy `revenuecat` documents
directory (#3317) via NachoSoto (@NachoSoto)
### Other Changes
* `CI`: run all iOS 17 tests (#3312) via NachoSoto (@NachoSoto)
* `StoreKit 2`: Optionally send JWS tokens instead of receipts to the
backend (#3227) via Mark Villacampa (@MarkVillacampa)
* `CircleCI`: update simulators for Xcode 15.0.1 (#3311) via NachoSoto
(@NachoSoto)
* `StoreKit 1`: improved debug log for `finishTransactions` invoked
outside the SDK (#3300) via NachoSoto (@NachoSoto)
* `Debug View`: display receipt status (#3303) via NachoSoto
(@NachoSoto)
**This is an automatic release.**
### RevenueCatUI
* `Paywalls`: improved purchase-in-progress UI (#3279) via NachoSoto
(@NachoSoto)
### Bugfixes
* `SK2StoreProduct.priceFormatter`: use locale from `StoreKit.Product`
(#3278) via NachoSoto (@NachoSoto)
### Performance Improvements
* `AAAttribution.attributionToken`: avoid using on main thread (#3281)
via NachoSoto (@NachoSoto)
### Other Changes
* `Paywalls Tester`: group live paywalls by template (#3276) via
NachoSoto (@NachoSoto)
**This is an automatic release.**
### RevenueCatUI
* `Paywalls`: added shimmer effect to `LoadingPaywallView` (#3267) via
NachoSoto (@NachoSoto)
### Bugfixes
* `Paywalls`: fixed `macOS` compilation (#3272) via NachoSoto
(@NachoSoto)
### Other Changes
* Update `SwiftLint` (#3273) via NachoSoto (@NachoSoto)
* PaywallsTester: allow for configuration for demos (#3260) via Andy
Boedo (@aboedo)
* `Paywalls`: simplified `LoadingPaywallView` (#3265) via NachoSoto
(@NachoSoto)
**This is an automatic release.**
### New Features
* Add `Attribution.setOnesignalUserID` (#3268) via Raquel Diez
(@Raquel10-RevenueCat)
* StoreKit In App messages support (#3252) via Toni Rico (@tonidero)
### Other Changes
* Remove ObjC showStoreMessages API (#3269) via Toni Rico (@tonidero)
* PaywallsTester: add a new tab that calls presentPaywallIfNeeded
(#3259) via Andy Boedo (@aboedo)
* `Paywalls`: small PaywallsTester refactor (#3261) via NachoSoto
(@NachoSoto)
**This is an automatic release.**
### RevenueCatUI
* `Paywalls`: polished template 4 layout math (#3249) via NachoSoto
(@NachoSoto)
* `Paywalls`: improved template 1 iPad layout and iOS 15 fix (#3241) via
NachoSoto (@NachoSoto)
* `Paywalls`: polished `PurchaseButton` on iPad (#3240) via NachoSoto
(@NachoSoto)
### Dependency Updates
* Bump cocoapods from 1.12.1 to 1.13.0 (#3251) via dependabot[bot]
(@dependabot[bot])
### Other Changes
* `Paywalls`: added previews for `IntroEligibilityStateView` (#3248) via
NachoSoto (@NachoSoto)
* `debugRevenueCatOverlay`: added list of active entitlements (#3247)
via NachoSoto (@NachoSoto)
* PaywallsTester: allow easy testing of paywall modes for All Offerings
tab (#3254) via Andy Boedo (@aboedo)
* PaywallsTester: allow resizing on macOS (#3258) via Andy Boedo
(@aboedo)
* PaywallsTester: replace opening default paywall automatically with
button (#3256) via Andy Boedo (@aboedo)
* PaywallsTester: fix StoreKit Configuration scheme (#3257) via Andy
Boedo (@aboedo)
* PaywallsTester: improve navigation on macOS and iPadOS (#3255) via
Andy Boedo (@aboedo)
* `PrivacyInfo.xcprivacy`: changed
`NSPrivacyCollectedDataTypePurchaseHistory` to `false` (#3242) via
NachoSoto (@NachoSoto)
* `Paywalls`: changed `PaywallsTester` to allow not configuring API key
(#3244) via NachoSoto (@NachoSoto)
* `Paywalls`: renamed `SimpleApp` to `PaywallsTester` (#3243) via
NachoSoto (@NachoSoto)
* Make revisionID private in PaywallData+Default (#3239) via Cesar de la
Vega (@vegaro)
**This is an automatic release.**
### Bugfixes
* Fix runtime crash in SK2TransactionListener in iOS < 15 (#3206) via
Toni Rico (@tonidero)
### Performance Improvements
* `OperationDispatcher`: add support for "long" delays (#3168) via
NachoSoto (@NachoSoto)
### Other Changes
* `Integration Tests`: add tests for ghost transfer behavior (#3135) via
NachoSoto (@NachoSoto)
* `Xcode`: removed `purchases-ios` SPM reference (#3166) via NachoSoto
(@NachoSoto)
* `Integration Tests`: another flaky failure (#3165) via NachoSoto
(@NachoSoto)
* `Integration Tests`: fix flaky test failure due to leftover
transaction (#3167) via NachoSoto (@NachoSoto)
* `Xcode 13`: removed last `Swift 5.7` checks (#3161) via NachoSoto
(@NachoSoto)
* `Integration Tests`: improve flaky tests (#3163) via NachoSoto
(@NachoSoto)
* `Codable`: improved decoding errors (#3153) via NachoSoto (@NachoSoto)
* Refactor: extract `HealthOperation` (#3154) via NachoSoto (@NachoSoto)
* `Xcode 13`: remove conditional code (#3147) via NachoSoto (@NachoSoto)
* `CircleCI`: change all jobs to use `Xcode 14.x` and replace
`xcode-install` with `xcodes` (#2421) via NachoSoto (@NachoSoto)
**This is an automatic release.**
### Bugfixes
* `DebugViewModel`: fixed runtime crash on iOS < 16 (#3139) via
NachoSoto (@NachoSoto)
### Performance Improvements
* `PurchasesOrchestrator`: return early if receipt has no transactions
when checking for promo offers (#3123) via Mark Villacampa
(@MarkVillacampa)
* `Purchases`: don't clear intro eligibility / purchased products cache
on first launch (#3067) via NachoSoto (@NachoSoto)
### Dependency Updates
* `SPM`: update `Package.resolved` (#3130) via NachoSoto (@NachoSoto)
### Other Changes
* `ReceiptParser`: fixed SPM build (#3144) via NachoSoto (@NachoSoto)
* `carthage_installation_tests`: optimize SPM package loading (#3129)
via NachoSoto (@NachoSoto)
* `CI`: add workaround for `Carthage` timing out (#3119) via NachoSoto
(@NachoSoto)
* `Integration Tests`: workaround to not lose debug logs (#3108) via
NachoSoto (@NachoSoto)
**This is an automatic release.**
### Dependency Updates
* Bump fastlane-plugin-revenuecat_internal from `b2108fb` to `a297205`
(#3106) via dependabot[bot] (@dependabot[bot])
* Bump activesupport from 7.0.4.3 to 7.0.7.2 in
/Tests/InstallationTests/CocoapodsInstallation (#3071) via
dependabot[bot] (@dependabot[bot])
* Bump activesupport from 7.0.4.3 to 7.0.7.2 (#3070) via dependabot[bot]
(@dependabot[bot])
### Other Changes
* `Integration Tests`: fixed another flaky test (#3111) via NachoSoto
(@NachoSoto)
* `CustomEntitlementComputation`: enable `restorePurchases` in public
API (#3090) via NachoSoto (@NachoSoto)
* `CustomerInfo`: add `VerificationResult` to `description` (#3081) via
NachoSoto (@NachoSoto)
* `Integration Tests`: fixed race condition in flaky test (#3086) via
NachoSoto (@NachoSoto)
**This is an automatic release.**
### Other Changes
* `Integration Tests`: test that `checkTrialOrIntroDiscountEligibility`
makes no API requests (#3054) via NachoSoto (@NachoSoto)
* `visionOS`: changed CI job to Release (#3042) via NachoSoto
(@NachoSoto)
* `StoreKit 2`: added warning to paywall constructors (#3045) via
NachoSoto (@NachoSoto)
* `README`: added `visionOS` to list of supported platforms (#3052) via
NachoSoto (@NachoSoto)
* `Tests`: added tests for `ClockType` (#3029) via NachoSoto
(@NachoSoto)
* `HTTPClient`: also parse errors with `application/json;charset=utf8`
(#3041) via NachoSoto (@NachoSoto)
**This is an automatic release.**
### Bugfixes
* `PurchasesOrchestrator`: fixed callback not invoked regression during
downgrades (#3028) via NachoSoto (@NachoSoto)
* `TransactionPoster`: don't finish transactions for non-subscriptions
if they're not processed (#2841) via NachoSoto (@NachoSoto)
### Performance Improvements
* `StoreKit 2`: only listen to `StoreKit.Transaction.updates` when SK2
is enabled (#3032) via NachoSoto (@NachoSoto)
* `CustomerInfoManager`: post transactions in parallel to POST receipts
only once (#2954) via NachoSoto (@NachoSoto)
### Other Changes
* `PostedTransactionCache`: remove implementation (#3030) via NachoSoto
(@NachoSoto)
* `Integration Tests`: improved `testCanPurchaseMultipleSubscriptions`
(#3025) via NachoSoto (@NachoSoto)
* `GitHub`: improved `ISSUE_TEMPLATE` (#3022) via NachoSoto (@NachoSoto)
* `TransactionPoster`: added transaction ID and Date to log (#3026) via
NachoSoto (@NachoSoto)
* `TransactionPoster`: fix iOS 12 test (#3018) via NachoSoto
(@NachoSoto)
* `SystemInfo`: added `ClockType` (#3014) via NachoSoto (@NachoSoto)
* `Integration Tests`: begin tests with
`UIApplication.willEnterForegroundNotification` to simulate a real app
(#3015) via NachoSoto (@NachoSoto)
* `Integration Tests`: add tests to verify `CustomerInfo`+`Offerings`
request de-dupping (#3013) via NachoSoto (@NachoSoto)
* `SwiftLint`: disable `unneeded_synthesized_initializer` (#3010) via
NachoSoto (@NachoSoto)
* Added `internal`
`NonSubscriptionTransaction.storeTransactionIdentifier` (#3009) via
NachoSoto (@NachoSoto)
* `Integration Tests`: added tests for non-renewing and non-consumable
packages (#3008) via NachoSoto (@NachoSoto)
* Expanded `EnsureNonEmptyArrayDecodable` to
`EnsureNonEmptyCollectionDecodable` (#3002) via NachoSoto (@NachoSoto)
_This release is compatible with Xcode 15 beta 6 and visionOS beta 3_
### Bugfixes
* `visionOS`: support for `Xcode 15 beta 6` (#2989) via NachoSoto
(@NachoSoto)
* `CachingProductsManager`: avoid crash when caching different products
with same identifier (#2979) via NachoSoto (@NachoSoto)
* `PurchasesOrchestrator`: disambiguate transactions from the queue
(#2890) via NachoSoto (@NachoSoto)
### Performance Improvements
* `StoreKit2TransactionListener`: handle transactions asynchronously
(#2910) via NachoSoto (@NachoSoto)
### Other Changes
* `Atomic`: avoid race conditions modifying dictionaries (#2981) via
NachoSoto (@NachoSoto)
* `Logging`: avoid logging "updating offerings" when request is cached
(#2904) via NachoSoto (@NachoSoto)
* `StoreKit2TransactionListener`: converted into an `actor` (#2909) via
NachoSoto (@NachoSoto)
* `Integration Tests`: added more observer mode tests (#2905) via
NachoSoto (@NachoSoto)
* Created `PostedTransactionCache` (#2911) via NachoSoto (@NachoSoto)
* `IntroEligibility`: changed products to `Set<String>` (#2976) via
NachoSoto (@NachoSoto)
* `AdServices`: Rename `postAdServicesTokenIfNeeded()` to
`postAdServicesTokenOncePerInstallIfNeeded()` (#2968) via Josh Holtz
(@joshdholtz)
* `SK1StoreProduct`: changed `productType` warning to debug (#2957) via
NachoSoto (@NachoSoto)
* `PrivacyInfo.xcprivacy`: added `UserDefaults` to access API types
(#2913) via NachoSoto (@NachoSoto)
* `Integration Tests`: new test to verify that SK1 purchases don't leave
SK2 unfinished transactions (#2906) via NachoSoto (@NachoSoto)
* `Logging`: log entire cache key with verbose logs (#2888) via
NachoSoto (@NachoSoto)
* `StoreProduct`: added test covering warning log (#2897) via NachoSoto
(@NachoSoto)
* `CustomEntitlementComputation`: use custom API key (#2879) via Toni
Rico (@tonidero)
* `CachingProductsManager`: removed duplicate log and added tests
(#2898) via NachoSoto (@NachoSoto)
* `Xcode 15 beta 5`: fixed test compilation (#2885) via NachoSoto
(@NachoSoto)
---------
Co-authored-by: NachoSoto <ignaciosoto90@gmail.com>
**This is an automatic release.**
_This release is compatible with Xcode 15 beta 5 and visionOS beta 2_
### Bugfixes
* `xrOS`: fixed `SubscriptionStoreView` for visionOS beta 2 (#2884) via
Josh Holtz (@joshdholtz)
### Performance Improvements
* `Perf`: update `CustomerInfo` cache before anything else (#2865) via
NachoSoto (@NachoSoto)
### Other Changes
* `SimpleApp`: added support for localization (#2880) via NachoSoto
(@NachoSoto)
* `TestStoreProduct`: made available on release builds (#2861) via
NachoSoto (@NachoSoto)
* `Tests`: increased default logger capacity (#2870) via NachoSoto
(@NachoSoto)
* `CustomEntitlementComputation`: removed `invalidateCustomerInfoCache`
(#2866) via NachoSoto (@NachoSoto)
* `SimpleApp`: updates for TestFlight compatibility (#2862) via
NachoSoto (@NachoSoto)
* `BasePurchasesTests`: consolidate to only initialize one `DeviceCache`
(#2863) via NachoSoto (@NachoSoto)
* `Codable`: debug log entire JSON when decoding fails (#2864) via
NachoSoto (@NachoSoto)
* `IntegrationTests`: replaced `Purchases.shared` with a `throw`ing
property (#2867) via NachoSoto (@NachoSoto)
* `NetworkError`: 2 new tests to ensure underlying error is included in
description (#2843) via NachoSoto (@NachoSoto)
* Add SPM `Package.resolved` for Xcode Cloud (#2844) via NachoSoto
(@NachoSoto)
* `CustomEntitlementComputation`: added integration test for
cancellations (#2849) via NachoSoto (@NachoSoto)
* `CustomEntitlementComputation`: removed
`syncPurchases`/`restorePurchases` (#2854) via NachoSoto (@NachoSoto)
---------
Co-authored-by: NachoSoto <ignaciosoto90@gmail.com>
**This is an automatic release.**
### Dependency Updates
* Bump fastlane from 2.213.0 to 2.214.0 (#2824) via dependabot[bot]
(@dependabot[bot])
### Other Changes
* `MainThreadMonitor`: don't crash if there is no test in progress
(#2838) via NachoSoto (@NachoSoto)
* `CI`: fixed Fastlane APITester lanes (#2836) via NachoSoto
(@NachoSoto)
* `Integration Tests`: workaround Swift runtime crash (#2826) via
NachoSoto (@NachoSoto)
* `@EnsureNonEmptyArrayDecodable` (#2831) via NachoSoto (@NachoSoto)
* `iOS 17`: added tests for simulating cancellations (#2597) via
NachoSoto (@NachoSoto)
* `CI`: make all `Codecov` jobs `informational` (#2828) via NachoSoto
(@NachoSoto)
* `MainThreadMonitor`: check deadlocks only ever N seconds (#2820) via
NachoSoto (@NachoSoto)
* New `@NonEmptyStringDecodable` (#2819) via NachoSoto (@NachoSoto)
* `MockDeviceCache`: avoid using real `UserDefaults` (#2814) via
NachoSoto (@NachoSoto)
* `throwAssertion`: fixed Xcode 15 compilation (#2813) via NachoSoto
(@NachoSoto)
* `CustomEntitlementsComputation`: fixed API testers (#2815) via
NachoSoto (@NachoSoto)
* `PackageTypeTests`: fixed iOS 12 (#2807) via NachoSoto (@NachoSoto)
* `Tests`: avoid race-condition in leak detection (#2806) via NachoSoto
(@NachoSoto)
* Revert "`Unit Tests`: removed leak detection" (#2805) via NachoSoto
(@NachoSoto)
* `PackageType: Codable` implementation (#2797) via NachoSoto
(@NachoSoto)
* `SystemInfo.init` no longer `throws` (#2803) via NachoSoto
(@NachoSoto)
* `Trusted Entitlements`: add support for signing `POST` body (#2753)
via NachoSoto (@NachoSoto)
* `Tests`: unified default timeouts (#2801) via NachoSoto (@NachoSoto)
* `Tests`: removed forced-unwrap (#2799) via NachoSoto (@NachoSoto)
* `Tests`: added missing `super.setUp()` (#2804) via NachoSoto
(@NachoSoto)
* Replaced `FatalErrorUtil` with `Nimble` (#2802) via NachoSoto
(@NachoSoto)
* `Tests`: fixed another flaky test (#2795) via NachoSoto (@NachoSoto)
* `TimingUtil`: improved tests by using `Clock` (#2794) via NachoSoto
(@NachoSoto)
* `IgnoreDecodeErrors`: log decoding error (#2778) via NachoSoto
(@NachoSoto)
* `TestLogHandler`: changed all tests to explicitly deinitialize it
(#2784) via NachoSoto (@NachoSoto)
* `LocalReceiptParserStoreKitTests`: fixed flaky test failure (#2785)
via NachoSoto (@NachoSoto)
* `Unit Tests`: removed leak detection (#2792) via NachoSoto
(@NachoSoto)
* `Tests`: fixed another flaky failure with asynchronous check (#2786)
via NachoSoto (@NachoSoto)
---------
Co-authored-by: NachoSoto <ignaciosoto90@gmail.com>
**This is an automatic release.**
### New Features
* `Trusted Entitlements`: (#2621) via NachoSoto (@NachoSoto)
This new feature prevents MitM attacks between the SDK and the
RevenueCat server.
With verification enabled, the SDK ensures that the response created by
the server was not modified by a third-party, and the entitlements
received are exactly what was sent.
This is 100% opt-in. `EntitlementInfos` have a new `VerificationResult`
property, which will indicate the validity of the responses when this
feature is enabled.
```swift
let purchases = Purchases.configure(
with: Configuration
.builder(withAPIKey: "")
.with(entitlementVerificationMode: .informational)
)
let customerInfo = try await purchases.customerInfo()
if !customerInfo.entitlements.verification.isVerified {
print("Entitlements could not be verified")
}
```
You can learn more from [the
documentation](https://www.revenuecat.com/docs/trusted-entitlements).
### Other Changes
* `TrustedEntitlements`: new `VerificationResult.isVerified` (#2788) via
NachoSoto (@NachoSoto)
* `Refactor`: extracted `Collection.subscript(safe:)` (#2779) via
NachoSoto (@NachoSoto)
* `Trusted Entitlements`: added link to docs in
`ErrorCode.signatureVerificationFailed` (#2783) via NachoSoto
(@NachoSoto)
* `Trusted Entitlements`: improved documentation (#2782) via NachoSoto
(@NachoSoto)
* `Tests`: fixed flaky failure with asynchronous check (#2777) via
NachoSoto (@NachoSoto)
* `Integration Tests`: re-enable signature verification tests (#2744)
via NachoSoto (@NachoSoto)
* `CI`: remove `Jazzy` (#2775) via NachoSoto (@NachoSoto)
* `Signing`: inject `ClockType` to ensure hardcoded signatures don't
fail when intermediate key expires (#2771) via NachoSoto (@NachoSoto)
---------
Co-authored-by: NachoSoto <ignaciosoto90@gmail.com>
**This is an automatic release.**
### New Features
* New `TestStoreProduct` for creating mock `StoreProduct`s and
`Offering`s (#2711) via NachoSoto (@NachoSoto)
✨ With this new API you can now create fake products for unit tests and
SwiftUI previews! 🎉
#### Example:
```swift
let product = TestStoreProduct(
localizedTitle: "PRO monthly",
price: 3.99,
localizedPriceString: "$3.99",
productIdentifier: "com.revenuecat.product",
productType: .autoRenewableSubscription,
localizedDescription: "Description",
subscriptionGroupIdentifier: "group",
subscriptionPeriod: .init(value: 1, unit: .month)
)
let offering = Offering(
identifier: "offering",
serverDescription: "Main offering",
metadata: [:],
availablePackages: [
.init(
identifier: "monthly",
packageType: .monthly,
storeProduct: product.toStoreProduct(),
offeringIdentifier: offering
)
]
)
```
### Dependency Updates
* Bump fastlane-plugin-revenuecat_internal from `13773d2` to `b2108fb`
(#2706) via dependabot[bot] (@dependabot[bot])
### Other Changes
* `VerificationResult: CustomDebugStringConvertible` (#2739) via
NachoSoto (@NachoSoto)
* Refactor: simplified `PurchasesOrchestrator.syncPurchases` (#2731) via
NachoSoto (@NachoSoto)
* `Trusted Entitlements`: add integration tests to verify `CustomerInfo`
cache invalidation (#2730) via NachoSoto (@NachoSoto)
* `SystemInfo.identifierForVendor`: add tests (#2732) via NachoSoto
(@NachoSoto)
* `Tests`: disabled `iOS 11.x` tests to fix `Xcode 15` tests (#2720) via
NachoSoto (@NachoSoto)
* `DebugViewSwiftUITests`: create separate snapshots for each OS version
(#2721) via NachoSoto (@NachoSoto)
* `Integration Tests`: fix clearing `UserDefaults` before each test
(#2719) via NachoSoto (@NachoSoto)
* Remove unused `Signing.loadPublicKey(with:)` (#2714) via NachoSoto
(@NachoSoto)
* Add `UInt32(littleEndian32Bits:)` and `UInt32.littleEndianData`
(#2713) via NachoSoto (@NachoSoto)
* `TimingUtil`: added synchronous API (#2716) via NachoSoto (@NachoSoto)
* `XCFramework`: sign archive for `Xcode 15` (#2709) via NachoSoto
(@NachoSoto)
* `CI`: removed `carthage_archive` from `release` lane (#2710) via
NachoSoto (@NachoSoto)
* `PriceFormatterProvider.priceFormatterForSK2`: enable on all versions
(#2712) via NachoSoto (@NachoSoto)
* `xrOS`: add support for `debugRevenueCatOverlay` (#2702) via NachoSoto
(@NachoSoto)
* Refactor method to get product ID including plan ID in android
purchases (#2708) via Toni Rico (@tonidero)
* `Purchases.restoreLogHandler` (#2699) via NachoSoto (@NachoSoto)
* Remove alpha from purchase tester icon to upload to testflight (#2705)
via Toni Rico (@tonidero)
---------
Co-authored-by: NachoSoto <ignaciosoto90@gmail.com>