**This is an automatic release.**
### New Features
* `CustomerInfo`: conform to `Identifiable` (#3619) via NachoSoto
(@NachoSoto)
### RevenueCatUI
* `Paywalls`: new `.onPurchaseFailure` and `.onRestoreFailure` modifiers
(#3622) via NachoSoto (@NachoSoto)
* `Paywalls`: `.onRestoreCompleted` is invoked after the restore dialog
is dismissed (#3620) via NachoSoto (@NachoSoto)
* `Paywalls`: disable interactive `sheet` dismissal during purchases
(#3613) via NachoSoto (@NachoSoto)
### Other Changes
* `CircleCI`: push pods using Xcode 15 (#3614) via NachoSoto
(@NachoSoto)
**This is an automatic release.**
### RevenueCatUI
* `Paywalls`: fix template 5 scrolling on iOS 15 (#3608) via NachoSoto
(@NachoSoto)
* `Paywalls`: improve `PaywallData.config(for:)` disambiguation (#3605)
via NachoSoto (@NachoSoto)
### Dependency Updates
* Bump cocoapods from 1.14.3 to 1.15.0 (#3607) via dependabot[bot]
(@dependabot[bot])
* Bump fastlane-plugin-revenuecat_internal from `e6ba247` to `9c82c7a`
(#3606) via dependabot[bot] (@dependabot[bot])
### Other Changes
* `Integration Tests`: disable failure expectation on `iOS 17.4` (#3604)
via NachoSoto (@NachoSoto)
### Other Changes
* `PaywallViewController`: methods for reconfiguring paywall with new
offering (#3592) via NachoSoto (@NachoSoto)
* `Integration Tests`: verify `PaywallData` images can be loaded (#3596)
via NachoSoto (@NachoSoto)
* Simplify `CocoapodsInstallation` `Podfile` (#3593) via NachoSoto
(@NachoSoto)
**This is an automatic release.**
### RevenueCatUI
* `PaywallViewController`: new initializer with `Offering` identifier
(#3587) via NachoSoto (@NachoSoto)
* `Paywalls`: improve template 5 layout for long product names (#3589)
via NachoSoto (@NachoSoto)
### Other Changes
* `Paywalls`: extracted `PaywallViewConfiguration` (#3586) via NachoSoto
(@NachoSoto)
* `CircleCI`: avoid installing `Xcodes` when not needed (#3585) via
NachoSoto (@NachoSoto)
* `CircleCI`: change all jobs to M1 (#3140) via NachoSoto (@NachoSoto)
---------
Co-authored-by: NachoSoto <ignaciosoto90@gmail.com>
Co-authored-by: NachoSoto <NachoSoto@users.noreply.github.com>
**This is an automatic release.**
### New Features
* `StoreProduct`: add localized price per period strings (#3546) via
Andy Boedo (@aboedo)
### RevenueCatUI
* `Paywalls`: new `.onPurchaseCancelled` and
`paywallViewControllerDidCancelPurchase:` (#3578) via NachoSoto
(@NachoSoto)
* `Paywalls`: improve error display (#3577) via NachoSoto (@NachoSoto)
### Dependency Updates
* Bump fastlane-plugin-revenuecat_internal from `0ddee10` to `e6ba247`
(#3575) via dependabot[bot] (@dependabot[bot])
### Other Changes
* `PurchaseTester`: improved `ReceiptInspector` so it accepts receipts
with escape sequences (#3554) via Andy Boedo (@aboedo)
**This is an automatic release.**
### RevenueCatUI
* `Paywalls`: remove unscrollable spacing in Template 5 (#3562) via
NachoSoto (@NachoSoto)
* `Paywalls`: improve template 5 checkmark icon (#3559) via NachoSoto
(@NachoSoto)
### Bugfixes
* Improve sandbox detector for macOS apps (#3549) via Mark Villacampa
(@MarkVillacampa)
### Other Changes
* `Paywalls`: new
`PaywallViewControllerDelegate.paywallViewController(_:didChangeSizeTo:)`
(#3563) via Cesar de la Vega (@vegaro)
* `Tests`: running tests on `macOS` (#3533) via NachoSoto (@NachoSoto)
* `Integration Tests`: split into separate jobs (#3560) via NachoSoto
(@NachoSoto)
**This is an automatic release.**
### RevenueCatUI
* Paywalls: improve footer view UIKit support for hybrid SDKs (#3547)
via Andy Boedo (@aboedo)
### Dependency Updates
* Bump fastlane from 2.218.0 to 2.219.0 (#3553) via dependabot[bot]
(@dependabot[bot])
* Bump fastlane from 2.217.0 to 2.218.0 (#3550) via dependabot[bot]
(@dependabot[bot])
### Other Changes
* Tests: improve test flakiness (#3552) via Andy Boedo (@aboedo)
**This is an automatic release.**
### RevenueCatUI
* `Paywalls`: add `PaywallFooterViewController` (#3486) via Toni Rico
(@tonidero)
* `Paywalls`: improve landscape support of all templates (#3471) via
NachoSoto (@NachoSoto)
* `Paywalls`: ensure footer links open in full-screen sheets (#3524) via
NachoSoto (@NachoSoto)
* `Paywalls`: improve `FooterView` text alignment (#3525) via NachoSoto
(@NachoSoto)
* Paywalls: Add dismissal method in `PaywallViewControllerDelegate`
(#3493) via Toni Rico (@tonidero)
**This is an automatic release.**
### RevenueCatUI
* `Paywalls`: improve image caching (#3498) via NachoSoto (@NachoSoto)
* `Paywalls`: change style of CTA button to be consistent with other
platforms (#3507) via NachoSoto (@NachoSoto)
* `Paywalls`: open footer links on Safari on Catalyst (#3508) via
NachoSoto (@NachoSoto)
* `Paywalls`: fix compilation on Xcode < 14.3 (#3513) via NachoSoto
(@NachoSoto)
* Fix typo in zh-Hans localization of RevenueCatUI (#3512) via Francis
Feng (@francisfeng)
* `Paywalls`: fix PaywallViewControllerDelegate access from Objective-C
(#3510) via noncenz (@noncenz)
* `Paywalls`: open Terms and Privacy Policy links in-app (#3475) via
Andy Boedo (@aboedo)
* `Paywalls`: fix empty description when using `custom` package type and
`{{ sub_period }}` (#3495) via Andy Boedo (@aboedo)
* `Paywalls`: use `HEIC` images (#3496) via NachoSoto (@NachoSoto)
* Paywalls: disable the close button when an action is in progress
(#3474) via Andy Boedo (@aboedo)
* `Paywalls`: adjusted German translations (#3476) via Tensei (@tensei)
* Paywalls: Improve Chinese localization (#3489) via Andy Boedo
(@aboedo)
### Other Changes
* `CircleCI`: add git credentials to snapshot generation (#3506) via
NachoSoto (@NachoSoto)
* `StoreProduct`: improve `priceFormatter` documentation (#3500) via
NachoSoto (@NachoSoto)
* `Paywalls`: fix tests (#3499) via NachoSoto (@NachoSoto)
* `Optimization`: changed `first` to `first(where:)` (#3467) via
NachoSoto (@NachoSoto)
**This is an automatic release.**
### Bugfixes
* Improve pricePerYear price calculation precision (#3492) via Toni Rico
(@tonidero)
* Improve price per month accuracy for weekly subscriptions (#3480) via
Andy Boedo (@aboedo)
### Dependency Updates
* Bump danger from 9.4.0 to 9.4.1 (#3485) via dependabot[bot]
(@dependabot[bot])
**This is an automatic release.**
### RevenueCatUI
* `Paywalls`: remove empty space when template 4 has no offer details
(#3469) via NachoSoto (@NachoSoto)
### Other Changes
* `Concurrency`: address strict concurrency issues on `SystemInfo`
(#3462) via NachoSoto (@NachoSoto)
* `CircleCI`: upgrade to Xcode 15.1 (#3403) via NachoSoto (@NachoSoto)
* `Paywalls`: tests for `PurchaseButton` layout logic (#3468) via
NachoSoto (@NachoSoto)
* `Paywalls`: simplified `PaywallViewMode` logic (#3470) via NachoSoto
(@NachoSoto)
**This is an automatic release.**
### RevenueCatUI
* Paywalls: Fix navigation with close button in UIKit (#3466) via Andy
Boedo (@aboedo)
* `Paywalls`: `watchOS` support (#3291) via NachoSoto (@NachoSoto)
### Dependency Updates
* Bump cocoapods from 1.14.2 to 1.14.3 (#3464) via dependabot[bot]
(@dependabot[bot])
* Bump fastlane from 2.216.0 to 2.217.0 (#3415) via dependabot[bot]
(@dependabot[bot])
* Bump danger from 9.3.2 to 9.4.0 (#3414) via dependabot[bot]
(@dependabot[bot])
### Other Changes
* Some `APITester` fixes (#3444) via NachoSoto (@NachoSoto)
* `HTTPClient`: test all request headers (#3425) via NachoSoto
(@NachoSoto)
* `CircleCI`: fix snapshot generation for iOS 14 (#3431) via NachoSoto
(@NachoSoto)
* Remove `MockStoreMessagesHelper` from SDK (#3417) via NachoSoto
(@NachoSoto)
* Enable explicit_init lint rule and fix issues (#3418) via Mark
Villacampa (@MarkVillacampa)
**This is an automatic release.**
### RevenueCatUI
* `Paywalls`: add `displayCloseButton` to `PaywallViewController`
(#3391) via NachoSoto (@NachoSoto)
* `Paywalls`: fix Turkish translation (#3389) via Dogancan Mavideniz
(@mavideniz)
* `Paywalls`: fix Turkish translation (#3388) via iremkaraoglu
(@iremkaraoglu)
### Other Changes
* `RevenueCatUI`: added support to other deployment targets (#3392) via
NachoSoto (@NachoSoto)