diff --git a/.version b/.version index 8a7bb24c54..df9a5560f0 100644 --- a/.version +++ b/.version @@ -1 +1 @@ -5.80.0-SNAPSHOT +5.80.0 diff --git a/CHANGELOG.latest.md b/CHANGELOG.latest.md index e3b8e8c523..fec8881711 100644 --- a/CHANGELOG.latest.md +++ b/CHANGELOG.latest.md @@ -1,59 +1,35 @@ ## RevenueCat SDK ### ✨ New Features -* State-driven Paywalls: Tab selected-state (#7019) via Monika Mateska (@MonikaMateska) -* [EXTERNAL] feat: expose revocationDate and revocationReason on StoreTransaction via @mvanhorn (#7012) via Rick (@rickvdl) +* Expose `autoResumeDate` and `productPlanIdentifier` on `SubscriptionInfo` (#7049) via Álvaro Brey (@AlvaroBrey) +* Log reward verification failure reason (#6892) via Pol Miro (@polmiro) +* Report ad event capture method (#7020) via Pol Miro (@polmiro) ## RevenueCatUI SDK ### ✨ New Features -* Add Slovenian locale support in paywalls (#7007) via Monika Mateska (@MonikaMateska) -* Show DefaultPaywall warning view in UI preview mode (#6973) via Antonio Pallares (@ajpallares) +* Preview paywalls via deep link (#6922) via Dave DeLong (@davedelong) ### Paywallv2 #### 🐞 Bugfixes -* Use AVPlayerLayer for no-controls; fix KVO crash (#6987) via Alexander Repty (@alexrepty) +* Extract ImageRenderPlan and add unit tests (#7069) via Alexander Repty (@alexrepty) ### 🔄 Other Changes -* Update sdks-common-config orb to 3.21.2 (#7028) via Antonio Pallares (@ajpallares) -* feat(RevenueCatUI): evaluate state conditions in the override resolver (#6993) via Monika Mateska (@MonikaMateska) -* [AUTOMATIC] Update generated error codes (#7025) via RevenueCat Git Bot (@RCGitBot) -* feat(RevenueCatUI): add presentation-session PaywallStateStore (#6992) via Monika Mateska (@MonikaMateska) -* feat(paywalls): add dedicated state condition to component overrides (#6991) via Monika Mateska (@MonikaMateska) -* feat(paywalls): add decode-only stateUpdates on interactive components (#6990) via Monika Mateska (@MonikaMateska) -* feat(paywalls): decode top-level state declaration map (#6989) via Monika Mateska (@MonikaMateska) -* [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#7023) via RevenueCat Git Bot (@RCGitBot) -* Removes stale paywall template screenshots if necessary (#6984) via JayShortway (@JayShortway) -* Update backend integration tests snapshots to include Slovenian localizations (#7018) via Antonio Pallares (@ajpallares) -* feat: simulate promo offer eligibility in paywall previews (#6994) via Facundo Menzella (@facumenzella) -* chore: Add 3-day Dependabot cooldown, excluding fastlane plugin (#7013) via Toni Rico (@tonidero) -* WFL-303 | Add fallback URL for workflows (#7008) via Rosie Watson (@RosieWatson) -* fix(paywalls): skip workflow fetch for offerings with no mapped workflow (#7002) via Facundo Menzella (@facumenzella) -* Fix RevenueCatUI build on older Xcode: use legacy AVPlayerItemDidPlayToEndTime (#7003) via Alexander Repty (@alexrepty) -* Remove legacy BackendIntegrationTests targets from RevenueCat.xcodeproj (#7006) via Facundo Menzella (@facumenzella) -* Adopt scene lifecycle in UnitTestsHostApp for iOS 27 support (#6980) via Will Taylor (@fire-at-will) -* Update baseline swiftinterface files for `main` (#7004) via RevenueCat Git Bot (@RCGitBot) -* [AUTOMATIC] Update generated error codes (#7001) via RevenueCat Git Bot (@RCGitBot) -* Fix tvOS/visionOS build: import AVFoundation in VideoPlayerViewUIView (#7000) via Alexander Repty (@alexrepty) -* Danger: block manual edits to generated error codes (#6996) via Álvaro Brey (@AlvaroBrey) -* Chore(deps): Bump fastlane-plugin-revenuecat_internal from `d911a06` to `70bf5c7` (#6999) via dependabot[bot] (@dependabot[bot]) -* Add macCatalyst availability check (#6997) via Alexander Repty (@alexrepty) -* Add mise setup-worktree task for one-command worktree setup (#6983) via Facundo Menzella (@facumenzella) -* Use a snapshot-env-free macOS executor for update-error-codes (#6995) via Álvaro Brey (@AlvaroBrey) -* Use Tuist workspace for BackendIntegrationTests in CI (#6774) via Facundo Menzella (@facumenzella) -* Add update-error-codes workflow (#6981) via Álvaro Brey (@AlvaroBrey) -* [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#6986) via RevenueCat Git Bot (@RCGitBot) -* test(workflows): verify purchase/restore callbacks fire from any workflow step (#6855) via Facundo Menzella (@facumenzella) -* fix(workflows): compute intro eligibility for inherited packages on packageless workflow screens (#6978) via Facundo Menzella (@facumenzella) -* Makes `run_plugin_action_in_current_directory` resilient to missing subdirectories (#6976) via JayShortway (@JayShortway) -* Adopt generated ErrorCode (#6970) via Álvaro Brey (@AlvaroBrey) -* Chore(deps): Bump fastlane from 2.236.0 to 2.236.1 (#6975) via dependabot[bot] (@dependabot[bot]) -* Add internal RulesEngine evaluate API surface (#6966) via Antonio Pallares (@ajpallares) -* Replace `RulesEngine.logger` global with task-local override + module default (#6963) via Antonio Pallares (@ajpallares) -* feat(workflows): serve stale workflow detail while revalidating (#6961) via Facundo Menzella (@facumenzella) -* [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#6964) via RevenueCat Git Bot (@RCGitBot) -* Clean up changelogs from workflows PRs (#6960) via Facundo Menzella (@facumenzella) -* feat(workflows): wire workflow step lifecycle events in PaywallViewModel (#6868) via Facundo Menzella (@facumenzella) -* Fix flaky SK1 trial eligibility network request test (#6956) via Rick (@rickvdl) -* Use the `log` operator to strengthen rules-engine fixtures (#6957) via Antonio Pallares (@ajpallares) -* Add JSON Logic `log` operator (#6945) via Antonio Pallares (@ajpallares) -* Add JSON Logic iteration operators (`none`, `map`, `filter`, `reduce`) (#6834) via Antonio Pallares (@ajpallares) -* Chore(deps): Bump fastlane from 2.235.0 to 2.236.0 (#6959) via dependabot[bot] (@dependabot[bot]) -* fix(workflows): Don't leak the previous user's workflows after a login or logout (#6944) via Facundo Menzella (@facumenzella) +* fix: align RulesEngineInternal with json-logic-js (undefined & missing_some) (#7066) via Antonio Pallares (@ajpallares) +* feat(remote-config): update request and response models according to spec (#7022) via Rick (@rickvdl) +* fix(ci): install pinned xcodes prebuilt binary for visionOS support (#7065) via Antonio Pallares (@ajpallares) +* feat(workflows): add workflows_close abandonment event (#7040) via Facundo Menzella (@facumenzella) +* test(ads): add api signature test for newly exposed reward primitives (#7045) via Peter Porfy (@peterporfy) +* Model entitlement reward variant in reward verification (#7038) via Pol Miro (@polmiro) +* Chore(deps): Bump nokogiri from 1.19.3 to 1.19.4 in /Tests/InstallationTests/CocoapodsInstallation (#7063) via dependabot[bot] (@dependabot[bot]) +* Chore(deps): Bump concurrent-ruby from 1.3.6 to 1.3.7 in /Tests/InstallationTests/CocoapodsInstallation (#7062) via dependabot[bot] (@dependabot[bot]) +* Send `presented_workflow_id` and `presented_step_id` in post-receipt body (#7024) via Cesar de la Vega (@vegaro) +* Chore(deps): Bump nokogiri from 1.19.3 to 1.19.4 (#7061) via dependabot[bot] (@dependabot[bot]) +* Chore(deps): Bump danger from 9.5.3 to 9.6.0 (#7060) via dependabot[bot] (@dependabot[bot]) +* feat(remote-config): support RC Container format in network stack and use for remote-config request (#7037) via Rick (@rickvdl) +* Bump sdks-common-config orb to 4.1.0 (#7050) via Álvaro Brey (@AlvaroBrey) +* feat(remote-config): add RC Container format V1 + parser (#7030) via Rick (@rickvdl) +* Upload paywall rendering validation screenshots to Emerge in PRs (#6979) via JayShortway (@JayShortway) +* Remove unused pollRewardVerificationStatus (#7042) via Pol Miro (@polmiro) +* Add Danger check to discourage large PRs (#7041) via Toni Rico (@tonidero) +* Update baseline swiftinterface files for `main` (#7036) via RevenueCat Git Bot (@RCGitBot) +* refactor(ads): reuse SDK retry classification for poll errors (#7009) via Antonio Pallares (@ajpallares) +* Migrate update_error_codes to the outputs parameter (#7035) via Álvaro Brey (@AlvaroBrey) +* refactor(ads): move reward verification to coresdk (#6895) via Peter Porfy (@peterporfy) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b1ea60607..fe736b7d40 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,40 @@ +## 5.80.0 +## RevenueCat SDK +### ✨ New Features +* Expose `autoResumeDate` and `productPlanIdentifier` on `SubscriptionInfo` (#7049) via Álvaro Brey (@AlvaroBrey) +* Log reward verification failure reason (#6892) via Pol Miro (@polmiro) +* Report ad event capture method (#7020) via Pol Miro (@polmiro) + +## RevenueCatUI SDK +### ✨ New Features +* Preview paywalls via deep link (#6922) via Dave DeLong (@davedelong) +### Paywallv2 +#### 🐞 Bugfixes +* Extract ImageRenderPlan and add unit tests (#7069) via Alexander Repty (@alexrepty) + +### 🔄 Other Changes +* fix: align RulesEngineInternal with json-logic-js (undefined & missing_some) (#7066) via Antonio Pallares (@ajpallares) +* feat(remote-config): update request and response models according to spec (#7022) via Rick (@rickvdl) +* fix(ci): install pinned xcodes prebuilt binary for visionOS support (#7065) via Antonio Pallares (@ajpallares) +* feat(workflows): add workflows_close abandonment event (#7040) via Facundo Menzella (@facumenzella) +* test(ads): add api signature test for newly exposed reward primitives (#7045) via Peter Porfy (@peterporfy) +* Model entitlement reward variant in reward verification (#7038) via Pol Miro (@polmiro) +* Chore(deps): Bump nokogiri from 1.19.3 to 1.19.4 in /Tests/InstallationTests/CocoapodsInstallation (#7063) via dependabot[bot] (@dependabot[bot]) +* Chore(deps): Bump concurrent-ruby from 1.3.6 to 1.3.7 in /Tests/InstallationTests/CocoapodsInstallation (#7062) via dependabot[bot] (@dependabot[bot]) +* Send `presented_workflow_id` and `presented_step_id` in post-receipt body (#7024) via Cesar de la Vega (@vegaro) +* Chore(deps): Bump nokogiri from 1.19.3 to 1.19.4 (#7061) via dependabot[bot] (@dependabot[bot]) +* Chore(deps): Bump danger from 9.5.3 to 9.6.0 (#7060) via dependabot[bot] (@dependabot[bot]) +* feat(remote-config): support RC Container format in network stack and use for remote-config request (#7037) via Rick (@rickvdl) +* Bump sdks-common-config orb to 4.1.0 (#7050) via Álvaro Brey (@AlvaroBrey) +* feat(remote-config): add RC Container format V1 + parser (#7030) via Rick (@rickvdl) +* Upload paywall rendering validation screenshots to Emerge in PRs (#6979) via JayShortway (@JayShortway) +* Remove unused pollRewardVerificationStatus (#7042) via Pol Miro (@polmiro) +* Add Danger check to discourage large PRs (#7041) via Toni Rico (@tonidero) +* Update baseline swiftinterface files for `main` (#7036) via RevenueCat Git Bot (@RCGitBot) +* refactor(ads): reuse SDK retry classification for poll errors (#7009) via Antonio Pallares (@ajpallares) +* Migrate update_error_codes to the outputs parameter (#7035) via Álvaro Brey (@AlvaroBrey) +* refactor(ads): move reward verification to coresdk (#6895) via Peter Porfy (@peterporfy) + ## 5.79.0 ## RevenueCat SDK ### ✨ New Features diff --git a/Examples/SampleCat/SampleCat.xcodeproj/project.pbxproj b/Examples/SampleCat/SampleCat.xcodeproj/project.pbxproj index 6b4726a79a..2f7bcb4488 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.79.0; + minimumVersion = 5.80.0; }; }; /* End XCRemoteSwiftPackageReference section */ diff --git a/RevenueCat.podspec b/RevenueCat.podspec index 4451bdc9a0..36b16c2b90 100644 --- a/RevenueCat.podspec +++ b/RevenueCat.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "RevenueCat" - s.version = "5.80.0-SNAPSHOT" + s.version = "5.80.0" s.summary = "Subscription and in-app-purchase backend service." s.description = <<-DESC diff --git a/RevenueCatUI.podspec b/RevenueCatUI.podspec index 34ae98b148..30a1a1d36f 100644 --- a/RevenueCatUI.podspec +++ b/RevenueCatUI.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "RevenueCatUI" - s.version = "5.80.0-SNAPSHOT" + s.version = "5.80.0" s.summary = "UI library for RevenueCat paywalls." s.description = <<-DESC diff --git a/Sources/Misc/SystemInfo.swift b/Sources/Misc/SystemInfo.swift index 9c0b34a0c7..d40cc483ac 100644 --- a/Sources/Misc/SystemInfo.swift +++ b/Sources/Misc/SystemInfo.swift @@ -112,7 +112,7 @@ class SystemInfo { } static var frameworkVersion: String { - return "5.80.0-SNAPSHOT" + return "5.80.0" } static var installationMethod: String { diff --git a/Tests/InstallationTests/CommonFiles/RevenueCat-Swift.h b/Tests/InstallationTests/CommonFiles/RevenueCat-Swift.h index 9a2f2e8da4..20f0d84bd3 100644 --- a/Tests/InstallationTests/CommonFiles/RevenueCat-Swift.h +++ b/Tests/InstallationTests/CommonFiles/RevenueCat-Swift.h @@ -1130,11 +1130,11 @@ SWIFT_CLASS_NAMED("Builder") @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 @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 /// Specifies the behavior for a caching API. @@ -4444,6 +4444,9 @@ SWIFT_CLASS_NAMED("SubscriptionInfo") /// Date when any grace period for this subscription expires/expired. /// nil if the customer has never been in a grace period. @property (nonatomic, readonly, copy) NSDate * _Nullable gracePeriodExpiresDate; +/// Date when a paused subscription is expected to automatically resume. +/// Only set for Google Play subscriptions that have been paused; nil otherwise. +@property (nonatomic, readonly, copy) NSDate * _Nullable autoResumeDate; /// How the Customer received access to this subscription: ///