**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)
**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)