diff --git a/.version b/.version
index 7171ca1c08..838eff453d 100644
--- a/.version
+++ b/.version
@@ -1 +1 @@
-5.15.0-SNAPSHOT
+5.14.6
diff --git a/CHANGELOG.latest.md b/CHANGELOG.latest.md
index 87b13735b5..0d88a0a778 100644
--- a/CHANGELOG.latest.md
+++ b/CHANGELOG.latest.md
@@ -1,11 +1,11 @@
## RevenueCat SDK
### π Bugfixes
-* add `fr_FR` localization (#4624) via Andy Boedo (@aboedo)
-
-## RevenueCatUI SDK
-### Paywallv2
-#### π Bugfixes
-* [Paywalls V2] Fix analytics and dismiss (#4620) via Josh Holtz (@joshdholtz)
+* [EXTERNAL] Lock RateLimiter.shouldProceed() entirely to avoid race conditions (#4635) via @nguyenhuy (#4637) via JayShortway (@JayShortway)
### π Other Changes
-* [Paywalls V2] Added fallback components (#4621) via Josh Holtz (@joshdholtz)
+* [Paywalls V2] Implement V2 variables and functions (#4633) via Josh Holtz (@joshdholtz)
+* [Paywalls] Fix PaywallTester build (#4636) via Mark Villacampa (@MarkVillacampa)
+* [Paywalls] Fix gradient orientation by shifting initial position by 90ΒΊ and making it rotate clockwise (#4634) via Mark Villacampa (@MarkVillacampa)
+* [Paywalls V2] Add support for alias solid hex colors (not gradients) (#4632) via Josh Holtz (@joshdholtz)
+* [Paywalls V2] Support custom fonts with UIConfig (#4631) via Josh Holtz (@joshdholtz)
+* [Paywalls V2] Add UIConfig to OfferingsResponse (#4628) via Josh Holtz (@joshdholtz)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index bd3507ef6b..a63faafb47 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,16 @@
+## 5.14.6
+## RevenueCat SDK
+### π Bugfixes
+* [EXTERNAL] Lock RateLimiter.shouldProceed() entirely to avoid race conditions (#4635) via @nguyenhuy (#4637) via JayShortway (@JayShortway)
+
+### π Other Changes
+* [Paywalls V2] Implement V2 variables and functions (#4633) via Josh Holtz (@joshdholtz)
+* [Paywalls] Fix PaywallTester build (#4636) via Mark Villacampa (@MarkVillacampa)
+* [Paywalls] Fix gradient orientation by shifting initial position by 90ΒΊ and making it rotate clockwise (#4634) via Mark Villacampa (@MarkVillacampa)
+* [Paywalls V2] Add support for alias solid hex colors (not gradients) (#4632) via Josh Holtz (@joshdholtz)
+* [Paywalls V2] Support custom fonts with UIConfig (#4631) via Josh Holtz (@joshdholtz)
+* [Paywalls V2] Add UIConfig to OfferingsResponse (#4628) via Josh Holtz (@joshdholtz)
+
## 5.14.5
## RevenueCat SDK
### π Bugfixes
diff --git a/RevenueCat.podspec b/RevenueCat.podspec
index 1d520ec61f..b460fc160f 100644
--- a/RevenueCat.podspec
+++ b/RevenueCat.podspec
@@ -1,6 +1,6 @@
Pod::Spec.new do |s|
s.name = "RevenueCat"
- s.version = "5.15.0-SNAPSHOT"
+ s.version = "5.14.6"
s.summary = "Subscription and in-app-purchase backend service."
s.description = <<-DESC
diff --git a/RevenueCatUI.podspec b/RevenueCatUI.podspec
index 634303941b..8ed1e9e545 100644
--- a/RevenueCatUI.podspec
+++ b/RevenueCatUI.podspec
@@ -1,6 +1,6 @@
Pod::Spec.new do |s|
s.name = "RevenueCatUI"
- s.version = "5.15.0-SNAPSHOT"
+ s.version = "5.14.6"
s.summary = "UI library for RevenueCat paywalls."
s.description = <<-DESC
diff --git a/Sources/Info.plist b/Sources/Info.plist
index 7f23cc66b4..76514cfec7 100644
--- a/Sources/Info.plist
+++ b/Sources/Info.plist
@@ -17,7 +17,7 @@
CFBundlePackageType
$(PRODUCT_BUNDLE_PACKAGE_TYPE)
CFBundleShortVersionString
- 5.15.0
+ 5.14.6
CFBundleVersion
$(CURRENT_PROJECT_VERSION)
LSApplicationCategoryType
diff --git a/Sources/Misc/SystemInfo.swift b/Sources/Misc/SystemInfo.swift
index ab36d4714e..8239eababc 100644
--- a/Sources/Misc/SystemInfo.swift
+++ b/Sources/Misc/SystemInfo.swift
@@ -83,7 +83,7 @@ class SystemInfo {
}
static var frameworkVersion: String {
- return "5.15.0-SNAPSHOT"
+ return "5.14.6"
}
static var systemVersion: String {
diff --git a/Tests/BackendIntegrationTestApp/Info.plist b/Tests/BackendIntegrationTestApp/Info.plist
index 9178d69fce..c7556ecf18 100644
--- a/Tests/BackendIntegrationTestApp/Info.plist
+++ b/Tests/BackendIntegrationTestApp/Info.plist
@@ -17,7 +17,7 @@
CFBundlePackageType
$(PRODUCT_BUNDLE_PACKAGE_TYPE)
CFBundleShortVersionString
- 5.15.0
+ 5.14.6
CFBundleVersion
1
LSRequiresIPhoneOS
diff --git a/Tests/BackendIntegrationTests/Info.plist b/Tests/BackendIntegrationTests/Info.plist
index fc9d54b64e..8d7a853973 100644
--- a/Tests/BackendIntegrationTests/Info.plist
+++ b/Tests/BackendIntegrationTests/Info.plist
@@ -15,7 +15,7 @@
CFBundlePackageType
$(PRODUCT_BUNDLE_PACKAGE_TYPE)
CFBundleShortVersionString
- 5.15.0
+ 5.14.6
CFBundleVersion
1
diff --git a/Tests/InstallationTests/CommonFiles/RevenueCat-Swift.h b/Tests/InstallationTests/CommonFiles/RevenueCat-Swift.h
index 577d95378d..a1ac174e56 100644
--- a/Tests/InstallationTests/CommonFiles/RevenueCat-Swift.h
+++ b/Tests/InstallationTests/CommonFiles/RevenueCat-Swift.h
@@ -726,12 +726,12 @@ SWIFT_CLASS_NAMED("Builder")
@interface RCConfigurationBuilder (SWIFT_EXTENSION(RevenueCat))
-- (RCConfigurationBuilder * _Nonnull)withObserverMode:(BOOL)observerMode SWIFT_WARN_UNUSED_RESULT SWIFT_AVAILABILITY(macos,obsoleted=1,message="'with' has been renamed to 'withPurchasesAreCompletedBy:storeKitVersion:': Observer Mode is now named PurchasesAreCompletedBy.") SWIFT_AVAILABILITY(watchos,obsoleted=1,message="'with' has been renamed to 'withPurchasesAreCompletedBy:storeKitVersion:': Observer Mode is now named PurchasesAreCompletedBy.") SWIFT_AVAILABILITY(tvos,obsoleted=1,message="'with' has been renamed to 'withPurchasesAreCompletedBy:storeKitVersion:': Observer Mode is now named PurchasesAreCompletedBy.") SWIFT_AVAILABILITY(ios,obsoleted=1,message="'with' has been renamed to 'withPurchasesAreCompletedBy:storeKitVersion:': Observer Mode is now named PurchasesAreCompletedBy.");
+- (RCConfigurationBuilder * _Nonnull)withUsesStoreKit2IfAvailable:(BOOL)usesStoreKit2IfAvailable SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_MSG("Use .with(storeKitVersion:) to enable StoreKit 2");
@end
@interface RCConfigurationBuilder (SWIFT_EXTENSION(RevenueCat))
-- (RCConfigurationBuilder * _Nonnull)withUsesStoreKit2IfAvailable:(BOOL)usesStoreKit2IfAvailable SWIFT_WARN_UNUSED_RESULT SWIFT_DEPRECATED_MSG("Use .with(storeKitVersion:) to enable StoreKit 2");
+- (RCConfigurationBuilder * _Nonnull)withObserverMode:(BOOL)observerMode SWIFT_WARN_UNUSED_RESULT SWIFT_AVAILABILITY(macos,obsoleted=1,message="'with' has been renamed to 'withPurchasesAreCompletedBy:storeKitVersion:': Observer Mode is now named PurchasesAreCompletedBy.") SWIFT_AVAILABILITY(watchos,obsoleted=1,message="'with' has been renamed to 'withPurchasesAreCompletedBy:storeKitVersion:': Observer Mode is now named PurchasesAreCompletedBy.") SWIFT_AVAILABILITY(tvos,obsoleted=1,message="'with' has been renamed to 'withPurchasesAreCompletedBy:storeKitVersion:': Observer Mode is now named PurchasesAreCompletedBy.") SWIFT_AVAILABILITY(ios,obsoleted=1,message="'with' has been renamed to 'withPurchasesAreCompletedBy:storeKitVersion:': Observer Mode is now named PurchasesAreCompletedBy.");
@end
/// Specifies the behavior for a caching API.
@@ -961,11 +961,11 @@ SWIFT_CLASS_NAMED("CustomerInfo")
-
@interface RCCustomerInfo (SWIFT_EXTENSION(RevenueCat))
@property (nonatomic, readonly, copy) NSDictionary * _Nonnull rawData;
@end
+
@class RCStoreTransaction;
@interface RCCustomerInfo (SWIFT_EXTENSION(RevenueCat))
@@ -2896,6 +2896,35 @@ SWIFT_AVAILABILITY(visionos,introduced=2.0) SWIFT_AVAILABILITY(watchos,introduce
@end
+@interface RCPurchases (SWIFT_EXTENSION(RevenueCat))
+/// Enable debug logging. Useful for debugging issues with the lovely team @RevenueCat.
+SWIFT_CLASS_PROPERTY(@property (nonatomic, class) BOOL debugLogsEnabled SWIFT_DEPRECATED_MSG("use Purchases.logLevel instead");)
++ (BOOL)debugLogsEnabled SWIFT_WARN_UNUSED_RESULT;
++ (void)setDebugLogsEnabled:(BOOL)newValue;
+/// Deprecated
+@property (nonatomic) BOOL allowSharingAppStoreAccount SWIFT_DEPRECATED_MSG("\n Configure behavior through the RevenueCat dashboard instead. If you have configured the \"Legacy\" restore\n behavior in the [RevenueCat Dashboard](app.revenuecat.com) and are currently setting this to `true`, keep\n this setting active.\n ");
+/// Deprecated. Where responsibility for completing purchase transactions lies.
+@property (nonatomic) BOOL finishTransactions SWIFT_DEPRECATED_MSG("Use ``purchasesAreCompletedBy`` instead.");
+/// Deprecated
++ (void)addAttributionData:(NSDictionary * _Nonnull)data fromNetwork:(enum RCAttributionNetwork)network SWIFT_DEPRECATED_MSG("Use the set functions instead");
+/// Send your attribution data to RevenueCat so you can track the revenue generated by your different campaigns.
+/// Related articles
+///
+/// \param data Dictionary provided by the network.
+///
+/// \param network Enum for the network the data is coming from, see AttributionNetwork
for supported
+/// networks.
+///
+/// \param networkUserId User Id that should be sent to the network. Default is the current App User Id.
+///
++ (void)addAttributionData:(NSDictionary * _Nonnull)data fromNetwork:(enum RCAttributionNetwork)network forNetworkUserId:(NSString * _Nullable)networkUserId SWIFT_DEPRECATED_MSG("Use the set functions instead");
+@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.
@@ -2993,35 +3022,6 @@ SWIFT_AVAILABILITY(visionos,introduced=2.0) SWIFT_AVAILABILITY(watchos,introduce
@end
-@interface RCPurchases (SWIFT_EXTENSION(RevenueCat))
-/// Enable debug logging. Useful for debugging issues with the lovely team @RevenueCat.
-SWIFT_CLASS_PROPERTY(@property (nonatomic, class) BOOL debugLogsEnabled SWIFT_DEPRECATED_MSG("use Purchases.logLevel instead");)
-+ (BOOL)debugLogsEnabled SWIFT_WARN_UNUSED_RESULT;
-+ (void)setDebugLogsEnabled:(BOOL)newValue;
-/// Deprecated
-@property (nonatomic) BOOL allowSharingAppStoreAccount SWIFT_DEPRECATED_MSG("\n Configure behavior through the RevenueCat dashboard instead. If you have configured the \"Legacy\" restore\n behavior in the [RevenueCat Dashboard](app.revenuecat.com) and are currently setting this to `true`, keep\n this setting active.\n ");
-/// Deprecated. Where responsibility for completing purchase transactions lies.
-@property (nonatomic) BOOL finishTransactions SWIFT_DEPRECATED_MSG("Use ``purchasesAreCompletedBy`` instead.");
-/// Deprecated
-+ (void)addAttributionData:(NSDictionary * _Nonnull)data fromNetwork:(enum RCAttributionNetwork)network SWIFT_DEPRECATED_MSG("Use the set functions instead");
-/// Send your attribution data to RevenueCat so you can track the revenue generated by your different campaigns.
-/// Related articles
-///
-/// \param data Dictionary provided by the network.
-///
-/// \param network Enum for the network the data is coming from, see AttributionNetwork
for supported
-/// networks.
-///
-/// \param networkUserId User Id that should be sent to the network. Default is the current App User Id.
-///
-+ (void)addAttributionData:(NSDictionary * _Nonnull)data fromNetwork:(enum RCAttributionNetwork)network forNetworkUserId:(NSString * _Nullable)networkUserId SWIFT_DEPRECATED_MSG("Use the set functions instead");
-@end
-
-
@interface RCPurchases (SWIFT_EXTENSION(RevenueCat))
/// Parses a deep link URL to verify itβs a RevenueCat web purchase redemption link
@@ -3381,6 +3381,7 @@ SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong, getter=defau
@end
+
@interface RCPurchasesDiagnostics (SWIFT_EXTENSION(RevenueCat))
/// Perform tests to ensure SDK is configured correctly.
///
@@ -3394,7 +3395,6 @@ SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong, getter=defau
-
/// 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
:
@@ -3411,13 +3411,13 @@ SWIFT_CLASS("_TtC10RevenueCat22PurchasesReceiptParser")
+
@interface PurchasesReceiptParser (SWIFT_EXTENSION(RevenueCat))
- (BOOL)receiptHasTransactionsWithReceiptData:(NSData * _Nonnull)receiptData SWIFT_WARN_UNUSED_RESULT;
@end
-
@interface PurchasesReceiptParser (SWIFT_EXTENSION(RevenueCat))
/// A default instance of PurchasesReceiptParser
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong, getter=default) PurchasesReceiptParser * _Nonnull default_;)
@@ -3659,6 +3659,11 @@ typedef SWIFT_ENUM_NAMED(NSInteger, RCStoreProductType, "ProductType", open) {
///
///
@property (nonatomic, readonly, strong) NSDecimalNumber * _Nonnull price;
+/// Calculates the price of this subscription product per day.
+///
+/// returns:
+/// nil
if the product is not a subscription.
+@property (nonatomic, readonly, strong) NSDecimalNumber * _Nullable pricePerDay 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);
/// Calculates the price of this subscription product per week.
///
/// returns:
@@ -3692,6 +3697,20 @@ typedef SWIFT_ENUM_NAMED(NSInteger, RCStoreProductType, "ProductType", open) {
/// localizedPricePerYear
///
///
+@property (nonatomic, readonly, copy) NSString * _Nullable localizedPricePerDay 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);
+/// The formatted price per week using StoreProduct/priceFormatter
.
+/// Related Symbols
+///
+/// -
+///
pricePerWeek
+///
+/// -
+///
localizedPricePerMonth
+///
+/// -
+///
localizedPricePerYear
+///
+///
@property (nonatomic, readonly, copy) NSString * _Nullable localizedPricePerWeek 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);
/// The formatted price per month using StoreProduct/priceFormatter
.
/// Related Symbols
@@ -3787,6 +3806,30 @@ typedef SWIFT_ENUM_NAMED(NSInteger, RCDiscountType, "DiscountType", open) {
@property (nonatomic, readonly, strong) SKProductDiscount * _Nullable sk1Discount;
@end
+
+@interface RCStoreProductDiscount (SWIFT_EXTENSION(RevenueCat))
+/// Calculates the approximate price of this subscription product per day.
+///
+/// returns:
+/// nil
if the product is not a subscription.
+@property (nonatomic, readonly, strong) NSDecimalNumber * _Nullable pricePerDay 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);
+/// Calculates the approximate price of this subscription product per week.
+///
+/// returns:
+/// nil
if the product is not a subscription.
+@property (nonatomic, readonly, strong) NSDecimalNumber * _Nullable pricePerWeek 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);
+/// Calculates the approximate price of this subscription product per month.
+///
+/// returns:
+/// nil
if the product is not a subscription.
+@property (nonatomic, readonly, strong) NSDecimalNumber * _Nullable pricePerMonth 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);
+/// Calculates the approximate price of this subscription product per year.
+///
+/// returns:
+/// nil
if the product is not a subscription.
+@property (nonatomic, readonly, strong) NSDecimalNumber * _Nullable pricePerYear 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);
+@end
+
@class RCStorefront;
/// Abstract class that provides access to properties of a transaction.
@@ -3952,6 +3995,7 @@ typedef SWIFT_ENUM_NAMED(NSInteger, RCSubscriptionPeriodUnit, "Unit", open) {
+
@interface RCSubscriptionPeriod (SWIFT_EXTENSION(RevenueCat))
@property (nonatomic, readonly, copy) NSString * _Nonnull debugDescription;
@end
diff --git a/Tests/UnitTests/Info.plist b/Tests/UnitTests/Info.plist
index fc9d54b64e..8d7a853973 100644
--- a/Tests/UnitTests/Info.plist
+++ b/Tests/UnitTests/Info.plist
@@ -15,7 +15,7 @@
CFBundlePackageType
$(PRODUCT_BUNDLE_PACKAGE_TYPE)
CFBundleShortVersionString
- 5.15.0
+ 5.14.6
CFBundleVersion
1
diff --git a/Tests/UnitTestsHostApp/Info.plist b/Tests/UnitTestsHostApp/Info.plist
index 316ac0651c..38c20cdece 100644
--- a/Tests/UnitTestsHostApp/Info.plist
+++ b/Tests/UnitTestsHostApp/Info.plist
@@ -17,7 +17,7 @@
CFBundlePackageType
$(PRODUCT_BUNDLE_PACKAGE_TYPE)
CFBundleShortVersionString
- 5.15.0
+ 5.14.6
CFBundleVersion
1
LSRequiresIPhoneOS
diff --git a/scripts/docs/index.html b/scripts/docs/index.html
index 2ef8ea3ff3..a5968bdb0a 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 d417c52eb0..8fe3a7e471 100644
--- a/scripts/docs/v4_api_migration_guide.html
+++ b/scripts/docs/v4_api_migration_guide.html
@@ -2,7 +2,7 @@
-
+
diff --git a/scripts/docs/v5_api_migration_guide.html b/scripts/docs/v5_api_migration_guide.html
index c9d75835dd..884809970b 100644
--- a/scripts/docs/v5_api_migration_guide.html
+++ b/scripts/docs/v5_api_migration_guide.html
@@ -2,7 +2,7 @@
-
+