Skip to content

Releases: RevenueCat/purchases-ios

5.9.0-alpha-web-redemption.01

08 Nov 18:16
Compare
Choose a tag to compare
Pre-release

🔄 Changes

This prerelease has some new APIs to allow performing anonymous web purchases and redeem them in mobile through our SDK.

These APIs are currently on alpha.

5.8.0

08 Nov 14:59
Compare
Choose a tag to compare

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

RevenueCatUI SDK

🐞 Bugfixes

  • Fixes reloading paywall images after they've been scrolled off screen (#4423) via JayShortway (@JayShortway)

Customer Center

🐞 Bugfixes

  • Refactor SubscriptionDetailsView and better WrongPlatformView (#4410) 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)

5.7.1

31 Oct 14:21
Compare
Choose a tag to compare

RevenueCat SDK

📦 Dependency Updates

  • Bump rexml from 3.3.8 to 3.3.9 (#4419) via dependabot[bot] (@dependabot[bot])
  • Bump rexml from 3.3.7 to 3.3.9 in /Tests/InstallationTests/CocoapodsInstallation (#4418) via dependabot[bot] (@dependabot[bot])

RevenueCatUI SDK

Customer Center

🐞 Bugfixes

  • Adds compatibility for suffix offer identifiers (#4393) via Cesar de la Vega (@vegaro)

🔄 Other Changes

  • Fixes the sticky footer not drawing in the bottom safe area. (#4422) via JayShortway (@JayShortway)
  • Adds long sample paywall with sticky footer to PaywallsTester (#4412) via JayShortway (@JayShortway)
  • RootView actually shows the sticky footer (#4411) via JayShortway (@JayShortway)
  • Adds scaffolding for StickyFooterComponent (#4409) via JayShortway (@JayShortway)
  • Improved JSON format for ButtonComponent codables (#4408) via Josh Holtz (@joshdholtz)

5.7.0

24 Oct 09:49
Compare
Choose a tag to compare

RevenueCat SDK

📦 Dependency Updates

  • Bump danger from 9.5.0 to 9.5.1 (#4388) via dependabot[bot] (@dependabot[bot])
  • Bump fastlane from 2.224.0 to 2.225.0 (#4387) via dependabot[bot] (@dependabot[bot])

RevenueCatUI SDK

Customer Center

✨ New Features

  • [CustomerCenter] Add default info to support emails (#4397) via Toni Rico (@tonidero)
  • Support custom URL paths in ManageSubscriptionsView (#4382) via Toni Rico (@tonidero)

🐞 Bugfixes

  • Default URL to nil in CustomerCenter HelpPaths (#4401) via Cesar de la Vega (@vegaro)
  • Add default values to enums in Customer Center config response (#4386) via Cesar de la Vega (@vegaro)
  • Fixes SubscriptionDetailsView background color in dark mode (#4371) via JayShortway (@JayShortway)
  • Better spacing in PromotionalOfferView (#4369) via Cesar de la Vega (@vegaro)

🔄 Other Changes

  • Fix integration tests simulator (#4396) via Cesar de la Vega (@vegaro)
  • adds callout to SPM installation tip for visibility (#4398) via rglanz-rc (@rglanz-rc)
  • Fix iOS 15, 14 tests using wrong version of swift-snapshot-testing and API tests (#4394) via Cesar de la Vega (@vegaro)
  • Fixes broken references in project.pbxproj. (#4385) via JayShortway (@JayShortway)
  • Fix PaywallsTester compilation (#4389) via Cesar de la Vega (@vegaro)
  • Fixes macOS snapshots for X-Is-Debug-Build header (#4383) via JayShortway (@JayShortway)
  • Paywall component containers are all stacks (#4380) via Josh Holtz (@joshdholtz)
  • Remove Storefront from PaymentWrapperQueue (#4377) via Will Taylor (@fire-at-will)
  • Select package and purchase (#4332) via Josh Holtz (@joshdholtz)
  • Added new individual corner radius and border modifier (#4328) via Josh Holtz (@joshdholtz)
  • Render packages, package, and purchase button views for paywall components (#4324) via Josh Holtz (@joshdholtz)
  • ButtonComponent can show the Customer Center (#4373) via JayShortway (@JayShortway)
  • Added scaffolding for paywall components, view models, and views (#4321) via Josh Holtz (@joshdholtz)
  • Adds actionlint to lint GitHub Actions workflows (#4326) via JayShortway (@JayShortway)
  • Local.xcconfig is read by Package.swift (#4368) via JayShortway (@JayShortway)
  • ButtonComponent can restore purchases (#4372) via JayShortway (@JayShortway)
  • ButtonComponent can dismiss the paywall (#4365) via JayShortway (@JayShortway)
  • ButtonComponent can handle URL destinations (#4360) via JayShortway (@JayShortway)
  • Models the Action for the ButtonComponent (#4353) via JayShortway (@JayShortway)
  • Adds scaffolding for the ButtonComponent. (#4348) via JayShortway (@JayShortway)
  • Local.xcconfig is read by PurchaseTester and PaywallsTester (#4367) via JayShortway (@JayShortway)
  • Adds X-Is-Debug-Build header (#4364) via JayShortway (@JayShortway)
  • Adds .index-build to .gitignore. (#4366) via JayShortway (@JayShortway)

5.6.0

08 Oct 17:28
Compare
Choose a tag to compare

RevenueCat SDK

🐞 Bugfixes

  • Fix hasFeature(RetroactiveAttribute) check in iOS 14 (#4359) via Cesar de la Vega (@vegaro)
  • Only Treat Deferred StoreKit Messages as Shown When They are Shown (#4344) via Will Taylor (@fire-at-will)

📦 Dependency Updates

  • Bump fastlane from 2.223.1 to 2.224.0 (#4354) via dependabot[bot] (@dependabot[bot])
  • Bump fastlane-plugin-revenuecat_internal from 5b2e35c to 3b1e7cf (#4347) via dependabot[bot] (@dependabot[bot])

Win-back Offers

✨ New Features

  • CAT-1726: Support Deferring Win-Back StoreKit Messages (#4343) via Will Taylor (@fire-at-will)

RevenueCatUI SDK

🐞 Bugfixes

  • Fixes double callbacks when using PaywallViewController (#4333) via Cesar de la Vega (@vegaro)

Customer Center

🐞 Bugfixes

  • Fix setting accent color in Customer Center (#4358) via Cesar de la Vega (@vegaro)
  • Improve promotional offer button when pressed (#4342) via Cesar de la Vega (@vegaro)
  • [CustomerCenter] Hide unknown paths (#4350) via Toni Rico (@tonidero)
  • Remove access to Localization env variable in ManageSubscriptionsViewModel (#4339) via Cesar de la Vega (@vegaro)

🔄 Other Changes

  • Update MagicWeather sample app (#4337) via nyeu (@nyeu)
  • Allows enabling PAYWALL_COMPONENTS using a Local.xcconfig file. (#4341) via JayShortway (@JayShortway)
  • Better logs for promotional offer view (#4336) via Cesar de la Vega (@vegaro)
  • Fix Xcode 16 warnings (#4334) via Mark Villacampa (@MarkVillacampa)
  • Run CI tests on iOS18/watchOS11 & Use Xcode 16 (#4295) via Will Taylor (@fire-at-will)

4.43.3

03 Oct 08:59
Compare
Choose a tag to compare

Other Changes

  • Remove usage of adServicesToken in syncPurchases via Mark Villacampa (@MarkVillacampa)
  • Update RevenueCat-Swift.h for version 4.43.2 via RCGitBot (@RCGitBot)
  • Version bump for 4.43.2 via RCGitBot (@RCGitBot)

5.5.0

30 Sep 12:07
Compare
Choose a tag to compare

🫂 Customer Center Beta 🫂

This release adds public beta support for the new Customer Center on iOS 15.0+.

This central hub is a self-service section that can be added to your app to help your users manage their subscriptions on their own, reducing the support burden on developers
like you so you can spend more time building apps and less time dealing with support issues. We are hoping adding this new section to your app can help you reduce customer support
interactions, obtain feedback from your users and ultimately reduce churn by retaining them as subscribers, helping you make more money.

See our Customer Center documentation for more information.

Features currently available

  • Users can cancel current subscriptions
  • Users can ask for refunds
  • Users can change their subscription plans
  • Users can restore previous purchases and contact your support email if they have trouble restoring
  • Users will be asked to update their app if they are on an older version before being able to contact your support email
  • Developers can ask for reasons for cancellations or refunds, and automatically offer promo offers to retain users
  • Configuration is done in the RevenueCat dashboard, and advanced configuration is available via JSON

Limitations

  • Only available on iOS 15+
  • Limited visual configuration options in the dashboard. It is possible to configure the Customer Center via JSON.
  • We are exposing a SwiftUI view and a modifier at the moment. We haven't built a UIKit wrapper to help integrating on UIKit apps, but it's in the roadmap.

How to enable

You can use the CustomerCenterView view directly:

var body: some View {
    Group {
        NavigationStack {
            HomeView()
                .navigationTitle("Home")
                .navigationBarTitleDisplayMode(.inline)
                .toolbar {
                    ToolbarItem(placement: .topBarLeading) {
                        Button {
                        } label: {
                            Image(systemName: "line.3.horizontal")
                        }
                    }
                    ToolbarItem(placement: .topBarTrailing) {
                        Button {
                            self.isCustomerCenterPresented = true
                        } label: {
                            Image(systemName: "person.crop.circle")
                        }
                    }
                }
        }
    }
    .foregroundColor(.white)
    .sheet(isPresented: $isCustomerCenterPresented) {
        CustomerCenterView()
    }
}

Or you can use the modifier:

VStack {
    Button {
        self.presentingCustomerCenter = true
    } label: {
        TemplateLabel(name: "Customer Center", icon: "person.fill")
    }
}
.presentCustomerCenter(isPresented: self.$presentingCustomerCenter) {
    self.presentingCustomerCenter = false
}

Listening to events

You can listen to events in the Customer Center using the customerCenterActionHandler closure:

CustomerCenterView { customerCenterAction in
    switch customerCenterAction {
    case .restoreStarted:
    case .restoreFailed(_):
    case .restoreCompleted(_):
    case .showingManageSubscriptions:
    case .refundRequestStarted(_):
    case .refundRequestCompleted(_):
    }
}

or if using the modifier:

.presentCustomerCenter(
    isPresented: self.$presentingCustomerCenter,
    customerCenterActionHandler: { action in
        switch action {
        case .restoreCompleted(let customerInfo):
        case .restoreStarted:
        case .restoreFailed(let error):
        case .showingManageSubscriptions:
        case .refundRequestStarted(let productId):
        case .refundRequestCompleted(let status):
        case .feedbackSurveyCompleted(let surveyOptionID):
        }
    }
) {
    self.presentingCustomerCenter = false
}

Release Notes

RevenueCatUI SDK

Paywall Components

🐞 Bugfixes
  • Match text, image, and stack properties and behaviors from dashboard (#4261) via Josh Holtz (@joshdholtz)

Customer Center

🐞 Bugfixes
  • More customer center docs and fix init (#4304) via Cesar de la Vega (@vegaro)
  • Remove background from FeedbackSurveyView (#4300) via Cesar de la Vega (@vegaro)

🔄 Other Changes

  • Fix iOS 15 tests (#4320) via Cesar de la Vega (@vegaro)
  • Generating new test snapshots for main - watchos (#4323) via RevenueCat Git Bot (@RCGitBot)
  • Generating new test snapshots for main - macos (#4322) via RevenueCat Git Bot (@RCGitBot)
  • Adds an onDismiss callback to ErrorDisplay (#4312) via JayShortway (@JayShortway)
  • Added previews for text component, image component, and paywall for template 1 (#4306) via Josh Holtz (@joshdholtz)
  • Remove CUSTOMER_CENTER_ENABLED (#4305) via Cesar de la Vega (@vegaro)
  • [Diagnostics] Refactor diagnostics track methods to handle background work automatically (#4270) via Toni Rico (@tonidero)
  • [Diagnostics] Add apple_products_request event (#4247) via Toni Rico (@tonidero)
  • Bump webrick from 1.7.0 to 1.8.2 in /Tests/InstallationTests/CocoapodsInstallation (#4313) via dependabot[bot] (@dependabot[bot])
  • Bump fastlane from 2.222.0 to 2.223.1 (#4309) via dependabot[bot] (@dependabot[bot])
  • Bump fastlane-plugin-revenuecat_internal from 55a0455 to 5b2e35c (#4310) via dependabot[bot] (@dependabot[bot])

5.4.0

26 Sep 08:08
Compare
Choose a tag to compare

RevenueCat SDK

✨ New Features

RevenueCatUI SDK

Customer Center

🐞 Bugfixes

  • Cleanup of strings in Customer Center (#4294) via Cesar de la Vega (@vegaro)

🔄 Other Changes

  • [Diagnostics] Add apple_purchase_attempt event (#4253) via Cesar de la Vega (@vegaro)
  • Temporarily set SWIFT_TREAT_WARNINGS_AS_ERRORS as NO (#4292) via Cesar de la Vega (@vegaro)

5.3.4

18 Sep 16:55
Compare
Choose a tag to compare

RevenueCat SDK

🐞 Bugfixes

  • Replace withCheckedThrowingContinuation Calls With withUnsafeThrowingContinuation (#4286) via Will Taylor (@fire-at-will)
  • Round price per period calculations to nearest 2-decimal (#4275) via Toni Rico (@tonidero)

📦 Dependency Updates

  • Bump fastlane-plugin-revenuecat_internal from 5140dbc to 55a0455 (#4277) via dependabot[bot] (@dependabot[bot])

RevenueCatUI SDK

🐞 Bugfixes

  • [Paywalls] Use store product for {{ sub_period }} duration (#4273) via Josh Holtz (@joshdholtz)

Customer Center

🐞 Bugfixes

  • Stateobject instantiation fix (#4271) via James Borthwick (@jamesrb1)

🔄 Other Changes

  • Update allowSharingAppStoreAccount deprecation message (#4272) via Will Taylor (@fire-at-will)
  • Update StoreKit Version Info in GitHub Issues Template (#4254) via Will Taylor (@fire-at-will)

5.3.3

12 Sep 10:17
dabbf50
Compare
Choose a tag to compare

Bugfixes

  • Remove usage of adServicesToken in syncPurchases (#4257) via Mark Villacampa (@MarkVillacampa)
  • Fixes a Paywall Template 7 crash when none of the tiers have any available products. (#4243) via JayShortway (@JayShortway)
  • [SK2] send unsynced attributes when syncing purchases (#4245) via Mark Villacampa (@MarkVillacampa)

Other Changes

  • Do not embed RevenueCat.framework in RevenueCatUI (#4256) via Cesar de la Vega (@vegaro)
  • Add warnings and clarifications to v5 migration docs (#4231) via Mark Villacampa (@MarkVillacampa)
  • Fixes SwiftLint violation of rule optional_data_string_conversion (#4252) via JayShortway (@JayShortway)
  • Paywall Components Localized Strings (#4237) via James Borthwick (@jamesrb1)
  • Update fastlane-plugin-revenuecat_internal (#4244) via Cesar de la Vega (@vegaro)
  • Add missing #if PAYWALL_COMPONENTS (#4241) via James Borthwick (@jamesrb1)
  • Paywalls Components Viewmodels + partial localization support (#4230) via James Borthwick (@jamesrb1)