diff --git a/.version b/.version
index 55989bd701..b3d91f9cfc 100644
--- a/.version
+++ b/.version
@@ -1 +1 @@
-5.9.0-SNAPSHOT
+5.9.0
diff --git a/CHANGELOG.latest.md b/CHANGELOG.latest.md
index e64402d744..69b1268fe0 100644
--- a/CHANGELOG.latest.md
+++ b/CHANGELOG.latest.md
@@ -1,28 +1,28 @@
## RevenueCat SDK
-### ✨ New Features
-* Add `tenjinAnalyticsInstallationId` setter property (#4437) via Toni Rico (@tonidero)
-### 📦 Dependency Updates
-* Bump cocoapods from 1.15.2 to 1.16.2 (#4433) via dependabot[bot] (@dependabot[bot])
+### Customer Center
+#### 🐞 Bugfixes
+* Dismiss promotional offer sheet after successful purchase (#4475) via Will Taylor (@fire-at-will)
+### Win-back Offers
+#### ✨ New Features
+* Support Redeeming Win-Back Offers with Streamlined Purchasing Disabled (#4370) via Will Taylor (@fire-at-will)
## RevenueCatUI SDK
-### 🐞 Bugfixes
-* Fixes reloading paywall images after they've been scrolled off screen (#4423) via JayShortway (@JayShortway)
### Customer Center
+#### ✨ New Features
+* Add support for `product_mapping` in promotional offers (#4489) via Cesar de la Vega (@vegaro)
#### 🐞 Bugfixes
-* Refactor `SubscriptionDetailsView` and better `WrongPlatformView` (#4410) via Cesar de la Vega (@vegaro)
+* Close feedback survey after picking an option (#4444) via Cesar de la Vega (@vegaro)
### 🔄 Other Changes
-* Create paywall component view models in a factory (#4455) via Josh Holtz (@joshdholtz)
-* Fix winback tests on iOS 14 & API Tester (#4453) via Will Taylor (@fire-at-will)
-* Fix `RCPurchaseParams` API tests (#4454) via Cesar de la Vega (@vegaro)
-* Fixes for paywalls v2 renderer after testing some real life paywalls (#4436) via Josh Holtz (@joshdholtz)
-* Skip `testCannotFlushMultipleTimesInParallel` test in xcode 14 (#4443) via Cesar de la Vega (@vegaro)
-* [Paywalls] Send paywall events when the app is backgrounded and after a successful purchase (#4438) via Mark Villacampa (@MarkVillacampa)
-* Support fetching eligible win-back offers for a product (#4431) via Will Taylor (@fire-at-will)
-* Introduce PurchaseParams to allow passing extra configuration info when making a purchase (#4400) via Mark Villacampa (@MarkVillacampa)
-* Refactor Paywall events so it can be used for customer center (#4376) via Cesar de la Vega (@vegaro)
-* Apply state and conditions ONLY for text component (#4417) via Josh Holtz (@joshdholtz)
-* Text, Image, and Stack properties can be overridden on different states/conditions (#4414) via Josh Holtz (@joshdholtz)
-* PurchaseButtonComponent is now just a container/stack like ButtonComponent (#4415) via Josh Holtz (@joshdholtz)
-* Remove PackageGroup (#4413) via Josh Holtz (@joshdholtz)
-* The StackComponent has an optional shadow (#4429) via JayShortway (@JayShortway)
+* Enable Paywall Tester to build with Paywalls V2 (#4487) via Josh Holtz (@joshdholtz)
+* Fix Paywalls Tester when not being built with Paywalls V2 (#4481) via Josh Holtz (@joshdholtz)
+* [Paywalls V2] Fix typo in CI script (#4480) via Mark Villacampa (@MarkVillacampa)
+* [Paywalls V2] Enable PAYWALL_COMPONENTS compiler flag when building PaywallTester in Xcode Cloud (#4479) via Mark Villacampa (@MarkVillacampa)
+* [Paywalls V2] Update Image to handle property overrides (#4477) via Josh Holtz (@joshdholtz)
+* [Paywalls V2] Update Stack to handle property overrides (#4476) via Josh Holtz (@joshdholtz)
+* [Paywalls V2] Store decoding errors in individual paywall (instead of failing entire offerings response) (#4473) via Josh Holtz (@joshdholtz)
+* [Paywalls V2] Update shape spec (#4472) via Josh Holtz (@joshdholtz)
+* [Paywalls V2] Update text spec (#4469) via Josh Holtz (@joshdholtz)
+* [Paywalls V2] Update stack size spec (#4467) via Josh Holtz (@joshdholtz)
+* [Paywalls V2] Update color spec (#4468) via Josh Holtz (@joshdholtz)
+* Update PurchaseParam code sample (#4470) via Will Taylor (@fire-at-will)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 52308c2475..3402ffebc8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,33 @@
+## 5.9.0
+## RevenueCat SDK
+### Customer Center
+#### 🐞 Bugfixes
+* Dismiss promotional offer sheet after successful purchase (#4475) via Will Taylor (@fire-at-will)
+### Win-back Offers
+#### ✨ New Features
+* Support Redeeming Win-Back Offers with Streamlined Purchasing Disabled (#4370) via Will Taylor (@fire-at-will)
+
+## RevenueCatUI SDK
+### Customer Center
+#### ✨ New Features
+* Add support for `product_mapping` in promotional offers (#4489) via Cesar de la Vega (@vegaro)
+#### 🐞 Bugfixes
+* Close feedback survey after picking an option (#4444) via Cesar de la Vega (@vegaro)
+
+### 🔄 Other Changes
+* Enable Paywall Tester to build with Paywalls V2 (#4487) via Josh Holtz (@joshdholtz)
+* Fix Paywalls Tester when not being built with Paywalls V2 (#4481) via Josh Holtz (@joshdholtz)
+* [Paywalls V2] Fix typo in CI script (#4480) via Mark Villacampa (@MarkVillacampa)
+* [Paywalls V2] Enable PAYWALL_COMPONENTS compiler flag when building PaywallTester in Xcode Cloud (#4479) via Mark Villacampa (@MarkVillacampa)
+* [Paywalls V2] Update Image to handle property overrides (#4477) via Josh Holtz (@joshdholtz)
+* [Paywalls V2] Update Stack to handle property overrides (#4476) via Josh Holtz (@joshdholtz)
+* [Paywalls V2] Store decoding errors in individual paywall (instead of failing entire offerings response) (#4473) via Josh Holtz (@joshdholtz)
+* [Paywalls V2] Update shape spec (#4472) via Josh Holtz (@joshdholtz)
+* [Paywalls V2] Update text spec (#4469) via Josh Holtz (@joshdholtz)
+* [Paywalls V2] Update stack size spec (#4467) via Josh Holtz (@joshdholtz)
+* [Paywalls V2] Update color spec (#4468) via Josh Holtz (@joshdholtz)
+* Update PurchaseParam code sample (#4470) via Will Taylor (@fire-at-will)
+
## 5.8.0
## RevenueCat SDK
### ✨ New Features
diff --git a/RevenueCat.podspec b/RevenueCat.podspec
index 1b71c4e5a5..b904861f52 100644
--- a/RevenueCat.podspec
+++ b/RevenueCat.podspec
@@ -1,6 +1,6 @@
Pod::Spec.new do |s|
s.name = "RevenueCat"
- s.version = "5.9.0-SNAPSHOT"
+ s.version = "5.9.0"
s.summary = "Subscription and in-app-purchase backend service."
s.description = <<-DESC
diff --git a/RevenueCatUI.podspec b/RevenueCatUI.podspec
index b73d084775..04fa6a4d03 100644
--- a/RevenueCatUI.podspec
+++ b/RevenueCatUI.podspec
@@ -1,6 +1,6 @@
Pod::Spec.new do |s|
s.name = "RevenueCatUI"
- s.version = "5.9.0-SNAPSHOT"
+ s.version = "5.9.0"
s.summary = "UI library for RevenueCat paywalls."
s.description = <<-DESC
diff --git a/RevenueCatUI/CustomerCenter/Data/LoadPromotionalOfferUseCase.swift b/RevenueCatUI/CustomerCenter/Data/LoadPromotionalOfferUseCase.swift
index ae1fb9ab6d..1d480bfb77 100644
--- a/RevenueCatUI/CustomerCenter/Data/LoadPromotionalOfferUseCase.swift
+++ b/RevenueCatUI/CustomerCenter/Data/LoadPromotionalOfferUseCase.swift
@@ -85,13 +85,11 @@ private extension LoadPromotionalOfferUseCase {
productIdentifier: String,
promoOfferDetails: CustomerCenterConfigData.HelpPath.PromotionalOffer
) throws -> StoreProductDiscount {
- let discount = if !promoOfferDetails.productMapping.isEmpty {
- findMappedDiscount(for: product,
- productIdentifier: productIdentifier,
- promoOfferDetails: promoOfferDetails)
- } else {
- findLegacyDiscount(for: product, promoOfferDetails: promoOfferDetails)
- }
+ let discount = !promoOfferDetails.productMapping.isEmpty
+ ? findMappedDiscount(for: product,
+ productIdentifier: productIdentifier,
+ promoOfferDetails: promoOfferDetails)
+ : findLegacyDiscount(for: product, promoOfferDetails: promoOfferDetails)
guard let discount = discount else {
logDiscountError(productIdentifier: productIdentifier, promoOfferDetails: promoOfferDetails)
@@ -128,17 +126,15 @@ private extension LoadPromotionalOfferUseCase {
productIdentifier: String,
promoOfferDetails: CustomerCenterConfigData.HelpPath.PromotionalOffer
) {
- let message = if !promoOfferDetails.productMapping.isEmpty {
- Strings.could_not_offer_for_active_subscriptions(
+ let message = !promoOfferDetails.productMapping.isEmpty
+ ? Strings.could_not_offer_for_active_subscriptions(
promoOfferDetails.productMapping[productIdentifier] ?? "nil",
productIdentifier
)
- } else {
- Strings.could_not_offer_for_active_subscriptions(
+ : Strings.could_not_offer_for_active_subscriptions(
promoOfferDetails.iosOfferId,
productIdentifier
)
- }
Logger.debug(message)
}
diff --git a/Sources/Misc/SystemInfo.swift b/Sources/Misc/SystemInfo.swift
index 59a37510aa..cea3ee201e 100644
--- a/Sources/Misc/SystemInfo.swift
+++ b/Sources/Misc/SystemInfo.swift
@@ -83,7 +83,7 @@ class SystemInfo {
}
static var frameworkVersion: String {
- return "5.9.0-SNAPSHOT"
+ return "5.9.0"
}
static var systemVersion: String {
diff --git a/Tests/APITesters/AllAPITests/SwiftAPITester/CustomerCenterConfigDataAPI.swift b/Tests/APITesters/AllAPITests/SwiftAPITester/CustomerCenterConfigDataAPI.swift
index af882e0e87..899cee3fae 100644
--- a/Tests/APITesters/AllAPITests/SwiftAPITester/CustomerCenterConfigDataAPI.swift
+++ b/Tests/APITesters/AllAPITests/SwiftAPITester/CustomerCenterConfigDataAPI.swift
@@ -56,11 +56,13 @@ func checkPromotionalOffer(_ offer: CustomerCenterConfigData.HelpPath.Promotiona
let eligible: Bool = offer.eligible
let title: String = offer.title
let subtitle: String = offer.subtitle
+ let productMapping: [String: String] = offer.productMapping
let _: CustomerCenterConfigData.HelpPath.PromotionalOffer = .init(iosOfferId: iosOfferId,
eligible: eligible,
title: title,
- subtitle: subtitle)
+ subtitle: subtitle,
+ productMapping: productMapping)
}
func checkFeedbackSurvey(_ survey: CustomerCenterConfigData.HelpPath.FeedbackSurvey) {
diff --git a/Tests/InstallationTests/CommonFiles/RevenueCat-Swift.h b/Tests/InstallationTests/CommonFiles/RevenueCat-Swift.h
index 39eb362541..494dd3d5e6 100644
--- a/Tests/InstallationTests/CommonFiles/RevenueCat-Swift.h
+++ b/Tests/InstallationTests/CommonFiles/RevenueCat-Swift.h
@@ -3821,7 +3821,7 @@ typedef SWIFT_ENUM_NAMED(NSInteger, RCVerificationResult, "VerificationResult",
/// Represents an Apple win-back offer.
-SWIFT_CLASS_NAMED("WinBackOffer") SWIFT_AVAILABILITY(visionos,introduced=2.0) SWIFT_AVAILABILITY(watchos,introduced=11.0) SWIFT_AVAILABILITY(tvos,introduced=18.0) SWIFT_AVAILABILITY(macos,introduced=15.0) SWIFT_AVAILABILITY(ios,introduced=18.0)
+SWIFT_CLASS_NAMED("WinBackOffer")
@interface RCWinBackOffer : NSObject
/// The StoreProductDiscount
in this offer.
@property (nonatomic, readonly, strong) RCStoreProductDiscount * _Nonnull discount;
diff --git a/scripts/docs/index.html b/scripts/docs/index.html
index 717ac7eab1..fb0a42ca38 100644
--- a/scripts/docs/index.html
+++ b/scripts/docs/index.html
@@ -2,7 +2,7 @@