diff --git a/.version b/.version index cc71b9e937..537244950b 100644 --- a/.version +++ b/.version @@ -1 +1 @@ -5.81.0-SNAPSHOT +5.81.0 diff --git a/CHANGELOG.latest.md b/CHANGELOG.latest.md index ecec5e0d9d..09db1febd7 100644 --- a/CHANGELOG.latest.md +++ b/CHANGELOG.latest.md @@ -1,37 +1,34 @@ -## RevenueCat SDK -### 🐞 Bugfixes -* Fix decode for sheet actions without inline sheet (#7158) via Monika Mateska (@MonikaMateska) -* Expose preferred UI locale override APIs to Objective-C (#7121) via Álvaro Brey (@AlvaroBrey) - ## RevenueCatUI SDK ### 🐞 Bugfixes -* fix(paywalls-v2): fix package selection resetting unexpectedly when switching tabs (#7148) via Facundo Menzella (@facumenzella) +* Fix Paywalls V2 carousel image stuck in size-unknown state on first display (#7180) via Jacob Rakidzich (@JZDesign) ### Paywallv2 -#### 🐞 Bugfixes -* fix(paywalls-v2): skip stale onChange invocations when propagating tab package to parent (#7168) via Facundo Menzella (@facumenzella) +#### ✨ New Features +* feat(paywalls): support transparent sticky footers (#7188) via Álvaro Brey (@AlvaroBrey) ### 🔄 Other Changes -* other(workflows): unify workflows and remote config into a single gate (#7166) via Facundo Menzella (@facumenzella) -* perf(remote-config): merge blob data via byte concatenation (#7163) via Antonio Pallares (@ajpallares) -* other(paywalls): fall back to the offerings paywall when the workflow fetch fails (#7143) via Facundo Menzella (@facumenzella) -* test(remote-config): add additional regression test coverage (#7164) via Rick (@rickvdl) -* feat(remote-config): use merged blobs helper for ui config (#7153) via Rick (@rickvdl) -* other(networking): remove unused workflows OperationQueue and HTTP path cases (#7145) via Facundo Menzella (@facumenzella) -* other(networking): delete the dead workflows endpoint (#7144) via Facundo Menzella (@facumenzella) -* other(paywalls): read workflows from remote config (#7141) via Facundo Menzella (@facumenzella) -* refactor(remote-config): encapsulate topic-ready waiting on RemoteConfigManager (#7157) via Facundo Menzella (@facumenzella) -* test(remote-config): add integration test coverage with mocked API responses (#7147) via Rick (@rickvdl) -* other(paywalls): gate getOfferings on remote-config readiness (#7142) via Facundo Menzella (@facumenzella) -* feat(remote-config): add merged blob data API (#7149) via Rick (@rickvdl) -* other(remote-config): read ui_config via remote config (#7140) via Facundo Menzella (@facumenzella) -* fix(remote-config): use RemoteConfigTopic enum in disk cache tests (#7139) via Antonio Pallares (@ajpallares) -* perf(remote-config): cache persisted config in memory in RemoteConfigDiskCache (#7136) via Antonio Pallares (@ajpallares) -* feat(remote-config): add APIs for reading topic/blob data from RemoteConfigManager (#7134) via Rick (@rickvdl) -* Add SecureItemStorage (#7094) via Dave DeLong (@davedelong) -* Decode id on PaywallComponent.PackageComponent (#7135) via Facundo Menzella (@facumenzella) -* feat(remote-config): add observability logs (#7132) via Rick (@rickvdl) -* feat(remote-config): wire up remote config manager behind feature flag (#7130) via Rick (@rickvdl) -* Support multi-grant reward + moreRewards in reward verification (#7039) via Pol Miro (@polmiro) -* Add CI build step for app extension safe API checks (#7131) via Rick (@rickvdl) -* fix(remote-config): rearm exhausted blob sources + in memory knownRefs (#7120) via Rick (@rickvdl) -* feat(remote-config): disable refresh after client errors (#7118) via Rick (@rickvdl) +* feat(remote-config): force app_start on the first config request (#7219) via Antonio Pallares (@ajpallares) +* test(workflows): add Maestro flow for classic-paywall fallback on config failure (#7235) via Facundo Menzella (@facumenzella) +* test(workflows): add Maestro flow for workflow paywall back navigation (#7224) via Facundo Menzella (@facumenzella) +* test(remote-config): don't send app_start in no-content config tests (#7222) via Antonio Pallares (@ajpallares) +* test(workflows): add Maestro flow that navigates a workflow paywall to purchase (#7221) via Facundo Menzella (@facumenzella) +* ci(remote-config): run the blob health monitor (#7218) via Facundo Menzella (@facumenzella) +* test(remote-config): add a real-backend health check for CDN blob downloads (#7215) via Facundo Menzella (@facumenzella) +* feat(remote-config): send fetch_context on config endpoint requests (#7214) via Antonio Pallares (@ajpallares) +* Internal `DangerousSettings.useWorkflows` to enable remote config/workflows programmatically (#7209) via Cesar de la Vega (@vegaro) +* test(remote-config): cover downloading several config blobs at once (#7212) via Facundo Menzella (@facumenzella) +* test(remote-config): cover getOfferings delivering when a prefetch blob fails (#7211) via Facundo Menzella (@facumenzella) +* Use short timeouts for remote config blob downloads (#7210) via Rick (@rickvdl) +* perf(remote-config): give /config its own request lane so it overlaps /offerings (#7196) via Facundo Menzella (@facumenzella) +* Pass Tuist Swift conditions to local package (#7195) via Rick (@rickvdl) +* other(remote-config): stabilize flaky RemoteConfig blob integration test (#7193) via Antonio Pallares (@ajpallares) +* Chore(deps): Bump excon from 0.112.0 to 1.5.0 in /Tests/InstallationTests/CocoapodsInstallation (#7190) via dependabot[bot] (@dependabot[bot]) +* fix(ci): stop mirroring main to purchases-ios-spm, tags only (#7189) via Álvaro Brey (@AlvaroBrey) +* feat(remote-config): add static fallback config endpoint (#7182) via Rick (@rickvdl) +* Chore(deps): Bump cocoapods from 1.16.2 to 1.17.0 (#7187) via dependabot[bot] (@dependabot[bot]) +* Don't switch hosts on device-connectivity errors (#7176) via Antonio Pallares (@ajpallares) +* other(offerings): gate getOfferings delivery on ui_config and stale-cache paths (#7181) via Facundo Menzella (@facumenzella) +* fix(remote-config): align edge-case handling with Android implementation (#7173) via Rick (@rickvdl) +* fix(paywalls): fail decoding a present-but-malformed custom_variables (#7184) via Antonio Pallares (@ajpallares) +* Chore(deps): Bump fastlane from 2.236.1 to 2.237.0 (#7175) via dependabot[bot] (@dependabot[bot]) +* fix(remote-config): bind refresh requests to identity clears (#7150) via Rick (@rickvdl) +* New IAMEnabled configuration option (#7146) via Dave DeLong (@davedelong) diff --git a/CHANGELOG.md b/CHANGELOG.md index b28b65f6ee..791d1f15c9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,39 @@ +## 5.81.0 +## RevenueCatUI SDK +### 🐞 Bugfixes +* Fix Paywalls V2 carousel image stuck in size-unknown state on first display (#7180) via Jacob Rakidzich (@JZDesign) +### Paywallv2 +#### ✨ New Features +* feat(paywalls): support transparent sticky footers (#7188) via Álvaro Brey (@AlvaroBrey) + +### 🔄 Other Changes +* feat(remote-config): force app_start on the first config request (#7219) via Antonio Pallares (@ajpallares) +* test(workflows): add Maestro flow for classic-paywall fallback on config failure (#7235) via Facundo Menzella (@facumenzella) +* test(workflows): add Maestro flow for workflow paywall back navigation (#7224) via Facundo Menzella (@facumenzella) +* test(remote-config): don't send app_start in no-content config tests (#7222) via Antonio Pallares (@ajpallares) +* test(workflows): add Maestro flow that navigates a workflow paywall to purchase (#7221) via Facundo Menzella (@facumenzella) +* ci(remote-config): run the blob health monitor (#7218) via Facundo Menzella (@facumenzella) +* test(remote-config): add a real-backend health check for CDN blob downloads (#7215) via Facundo Menzella (@facumenzella) +* feat(remote-config): send fetch_context on config endpoint requests (#7214) via Antonio Pallares (@ajpallares) +* Internal `DangerousSettings.useWorkflows` to enable remote config/workflows programmatically (#7209) via Cesar de la Vega (@vegaro) +* test(remote-config): cover downloading several config blobs at once (#7212) via Facundo Menzella (@facumenzella) +* test(remote-config): cover getOfferings delivering when a prefetch blob fails (#7211) via Facundo Menzella (@facumenzella) +* Use short timeouts for remote config blob downloads (#7210) via Rick (@rickvdl) +* perf(remote-config): give /config its own request lane so it overlaps /offerings (#7196) via Facundo Menzella (@facumenzella) +* Pass Tuist Swift conditions to local package (#7195) via Rick (@rickvdl) +* other(remote-config): stabilize flaky RemoteConfig blob integration test (#7193) via Antonio Pallares (@ajpallares) +* Chore(deps): Bump excon from 0.112.0 to 1.5.0 in /Tests/InstallationTests/CocoapodsInstallation (#7190) via dependabot[bot] (@dependabot[bot]) +* fix(ci): stop mirroring main to purchases-ios-spm, tags only (#7189) via Álvaro Brey (@AlvaroBrey) +* feat(remote-config): add static fallback config endpoint (#7182) via Rick (@rickvdl) +* Chore(deps): Bump cocoapods from 1.16.2 to 1.17.0 (#7187) via dependabot[bot] (@dependabot[bot]) +* Don't switch hosts on device-connectivity errors (#7176) via Antonio Pallares (@ajpallares) +* other(offerings): gate getOfferings delivery on ui_config and stale-cache paths (#7181) via Facundo Menzella (@facumenzella) +* fix(remote-config): align edge-case handling with Android implementation (#7173) via Rick (@rickvdl) +* fix(paywalls): fail decoding a present-but-malformed custom_variables (#7184) via Antonio Pallares (@ajpallares) +* Chore(deps): Bump fastlane from 2.236.1 to 2.237.0 (#7175) via dependabot[bot] (@dependabot[bot]) +* fix(remote-config): bind refresh requests to identity clears (#7150) via Rick (@rickvdl) +* New IAMEnabled configuration option (#7146) via Dave DeLong (@davedelong) + ## 5.80.3 ## RevenueCat SDK ### 🐞 Bugfixes diff --git a/Examples/SampleCat/SampleCat.xcodeproj/project.pbxproj b/Examples/SampleCat/SampleCat.xcodeproj/project.pbxproj index 2ee70025ed..e51aabac86 100644 --- a/Examples/SampleCat/SampleCat.xcodeproj/project.pbxproj +++ b/Examples/SampleCat/SampleCat.xcodeproj/project.pbxproj @@ -531,7 +531,7 @@ repositoryURL = "https://github.com/RevenueCat/purchases-ios"; requirement = { kind = upToNextMajorVersion; - minimumVersion = 5.80.3; + minimumVersion = 5.81.0; }; }; /* End XCRemoteSwiftPackageReference section */ diff --git a/RevenueCat.podspec b/RevenueCat.podspec index fcceab6690..910ae70c9d 100644 --- a/RevenueCat.podspec +++ b/RevenueCat.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "RevenueCat" - s.version = "5.81.0-SNAPSHOT" + s.version = "5.81.0" s.summary = "Subscription and in-app-purchase backend service." s.description = <<-DESC diff --git a/RevenueCatUI.podspec b/RevenueCatUI.podspec index e6e07c1a42..6fe9ca9209 100644 --- a/RevenueCatUI.podspec +++ b/RevenueCatUI.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "RevenueCatUI" - s.version = "5.81.0-SNAPSHOT" + s.version = "5.81.0" s.summary = "UI library for RevenueCat paywalls." s.description = <<-DESC diff --git a/Sources/Misc/SystemInfo.swift b/Sources/Misc/SystemInfo.swift index d52b24b514..bcc667e34a 100644 --- a/Sources/Misc/SystemInfo.swift +++ b/Sources/Misc/SystemInfo.swift @@ -127,7 +127,7 @@ class SystemInfo { } static var frameworkVersion: String { - return "5.81.0-SNAPSHOT" + return "5.81.0" } static var installationMethod: String { diff --git a/Tests/InstallationTests/CommonFiles/RevenueCat-Swift.h b/Tests/InstallationTests/CommonFiles/RevenueCat-Swift.h index fc9e463d1f..cf935363e8 100644 --- a/Tests/InstallationTests/CommonFiles/RevenueCat-Swift.h +++ b/Tests/InstallationTests/CommonFiles/RevenueCat-Swift.h @@ -1123,6 +1123,9 @@ SWIFT_CLASS_NAMED("Builder") /// With this option disabled you can still collect device identifiers /// by calling Purchases/collectDeviceIdentifiers() - (RCConfigurationBuilder * _Nonnull)withAutomaticDeviceIdentifierCollectionEnabled:(BOOL)automaticDeviceIdentifierCollectionEnabled SWIFT_WARN_UNUSED_RESULT; +/// Set iamEnabled. This is disabled by default. +/// Enabling tells the SDK to prefer using token-based user sessions for communicating with the server. +- (RCConfigurationBuilder * _Nonnull)withIAMEnabled:(BOOL)iamEnabled SWIFT_WARN_UNUSED_RESULT; /// Generate a Configuration object given the values configured by this builder. - (RCConfiguration * _Nonnull)build SWIFT_WARN_UNUSED_RESULT; /// Overrides the preferred locale for RevenueCatUI components. @@ -1135,11 +1138,11 @@ SWIFT_CLASS_NAMED("Builder") @end @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. @@ -1701,6 +1704,10 @@ SWIFT_CLASS("_TtC10RevenueCat37GetProductEntitlementMappingOperation") @interface GetProductEntitlementMappingOperation : CacheableNetworkOperation @end +SWIFT_CLASS("_TtC10RevenueCat32GetRemoteConfigFallbackOperation") +@interface GetRemoteConfigFallbackOperation : CacheableNetworkOperation +@end + SWIFT_CLASS("_TtC10RevenueCat24GetRemoteConfigOperation") @interface GetRemoteConfigOperation : CacheableNetworkOperation @end diff --git a/scripts/docs/index.html b/scripts/docs/index.html index abfa9dba08..562cb113c9 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 8be8ad5d03..4f610e3eff 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 716e8e8666..eef3cff133 100644 --- a/scripts/docs/v5_api_migration_guide.html +++ b/scripts/docs/v5_api_migration_guide.html @@ -2,7 +2,7 @@ - +