Skip to content

Releases: RevenueCat/purchases-ios

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)

5.3.2

05 Sep 11:28
Compare
Choose a tag to compare

Caution

When upgrading to v5, you must configure your In-App Purchase Key in the RevenueCat dashboard. Purchases will fail if the key is not configured.

Bugfixes

  • [Customer Center] Build WrongPlatformView from JSON (#4234) via Cesar de la Vega (@vegaro)
  • Add feedbackSurveyCompleted event to Customer Center events (#4194) via Cesar de la Vega (@vegaro)

Other Changes

5.3.1

30 Aug 16:08
Compare
Choose a tag to compare

Caution

When upgrading to v5, you must configure your In-App Purchase Key in the RevenueCat dashboard. Purchases will fail if the key is not configured.

Bugfixes

  • Fix compatibleTopBarTrailing in MacOS and api tests (#4226) via Cesar de la Vega (@vegaro)
  • [Paywall] Fix restoreStarted not being called on presentPaywallIfNeeded when using requiredEntitlementIdentifier (#4223) via Josh Holtz (@joshdholtz)
  • [CustomerCenter] Move sheet and restore alert creation to ManageSubscriptionsView (#4220) via Cesar de la Vega (@vegaro)
  • [EXTERNAL] Custom Entitlements Computation: fix support display on debug screen (#4215) by @NachoSoto (#4218) via Toni Rico (@tonidero)
  • [Customer Center] Add padding to No thanks in promotional offer screen (#4221) via Cesar de la Vega (@vegaro)
  • Fix version number in plist files (#4213) via Cesar de la Vega (@vegaro)
  • fix mac os sandbox check slowness (#3879) via Andy Boedo (@aboedo)
  • [Customer Center] Fix FeedbackSurveyView not opening (#4208) via Cesar de la Vega (@vegaro)
  • Remove unneeded_override disable to fix linter (#4209) via Cesar de la Vega (@vegaro)

Dependency Updates

  • Bump rexml from 3.3.3 to 3.3.6 in /Tests/InstallationTests/CocoapodsInstallation (#4210) via dependabot[bot] (@dependabot[bot])
  • Bump rexml from 3.3.3 to 3.3.6 (#4211) via dependabot[bot] (@dependabot[bot])

Other Changes

  • Update readme wording (#3914) via James Borthwick (@jamesrb1)
  • Set a maximum duration for iOS 15 tests (#4229) via Cesar de la Vega (@vegaro)
  • Paywall Components Initial Commit (#4224) via James Borthwick (@jamesrb1)
  • [CustomerCenter] Open App Store when the user wants to update their app (#4199) via JayShortway (@JayShortway)
  • [Customer Center] Shows a warning when the app is not the latest version (#4193) via JayShortway (@JayShortway)
  • Fix integration tests simulator version (#4219) via Cesar de la Vega (@vegaro)
  • Pin swift-docc-plugin to 1.3.0 (#4216) via James Borthwick (@jamesrb1)

5.3.0-customercenter.alpha.4

27 Aug 17:34
Compare
Choose a tag to compare
Pre-release
  • Open App Store when the user wants to update their app (#4199) via JayShortway (@JayShortway)
  • Move sheet and restore alert creation to ManageSubscriptionsView (#4220) via Cesar de la Vega (@vegaro)
  • Shows a warning when the app is not the latest version (#4193) via JayShortway (@JayShortway)
  • Add padding to No thanks in promotional offer screen (#4221) via Cesar de la Vega (@vegaro)
  • Fix FeedbackSurveyView not opening (#4208) via Cesar de la Vega (@vegaro)
  • Migrate to List style (#4190) via Cody Kerns (@codykerns)
  • Hide Contact Support button if URL can't be created (#4192) via Cesar de la Vega (@vegaro)
  • Improving customer center buttons (#4165) via Cody Kerns (@codykerns)
  • Clean up colors in WrongPlatformView and NoSubscriptionsView (#4204) via Cesar de la Vega (@vegaro)
  • CustomerCenterViewModel checks whether the app is the latest version (#4169) via JayShortway (@JayShortway)
  • Corrects references from ManageSubscriptionsButtonStyle to ButtonsStyle. (#4186) via JayShortway (@JayShortway)
  • Customer center improvements (#4166) via James Borthwick (@jamesrb1)
  • replace color(from colorInformation:) global with extension (#4183) via Andy Boedo (@aboedo)
  • Enable customer center tests (#4171) via James Borthwick (@jamesrb1)

5.3.0

21 Aug 23:31
4c0006a
Compare
Choose a tag to compare

New Features

Bugfixes

  • [Customer Center] Migrate to List style (#4190) via Cody Kerns (@codykerns)
  • [Paywalls] Improve locale consistency (#4158) via Josh Holtz (@joshdholtz)
  • Set Paywalls Tester deployment target to iOS 15 (#4196) via James Borthwick (@jamesrb1)
  • [Customer Center] Hide Contact Support button if URL can't be created (#4192) via Cesar de la Vega (@vegaro)
  • Fix the setting for SKIP_INSTALL in Xcode project (#4195) via Andy Boedo (@aboedo)
  • [Customer Center] Improving customer center buttons (#4165) via Cody Kerns (@codykerns)
  • Revert workaround for iOS 18 beta 5 SwiftUI crash (#4173) via Mark Villacampa (@MarkVillacampa)
  • [Paywalls] Make iOS version calculation lazy (#4163) via Mark Villacampa (@MarkVillacampa)
  • [Paywalls] Observe PurchaseHandler when owned externally (#4097) via James Borthwick (@jamesrb1)

Other Changes

  • [Customer Center] Clean up colors in WrongPlatformView and NoSubscriptionsView (#4204) via Cesar de la Vega (@vegaro)
  • Fix failing all-tests and retry more flaky tests (#4188) via Josh Holtz (@joshdholtz)
  • Compatibility content unavailable improvements (#4197) via James Borthwick (@jamesrb1)
  • Create lane to enable customer center (#4191) via Cesar de la Vega (@vegaro)
  • XCFramework artifacts in CircleCI (#4189) via Andy Boedo (@aboedo)
  • [Customer Center] CustomerCenterViewModel checks whether the app is the latest version (#4169) via JayShortway (@JayShortway)
  • export RevenueCatUI xcframework (#4172) via Andy Boedo (@aboedo)
  • Corrects references from ManageSubscriptionsButtonStyle to ButtonsStyle. (#4186) via JayShortway (@JayShortway)
  • Speed up carthage installation tests (#4184) via Andy Boedo (@aboedo)
  • Customer center improvements (#4166) via James Borthwick (@jamesrb1)
  • replace color(from colorInformation:) global with extension (#4183) via Andy Boedo (@aboedo)
  • Fix tests in main (#4174) via Andy Boedo (@aboedo)
  • Enable customer center tests (#4171) via James Borthwick (@jamesrb1)
  • [Customer Center] Initial implementation (#3967) via Cesar de la Vega (@vegaro)

5.2.3

07 Aug 20:04
Compare
Choose a tag to compare

Bugfixes

  • Fix Paywalls crash on iOS 18 beta (#4154) via Andy Boedo (@aboedo)

Dependency Updates

  • Bump danger from 9.4.3 to 9.5.0 (#4143) via dependabot[bot] (@dependabot[bot])
  • Bump nokogiri from 1.16.6 to 1.16.7 (#4129) via dependabot[bot] (@dependabot[bot])
  • Bump fastlane from 2.221.1 to 2.222.0 (#4130) via dependabot[bot] (@dependabot[bot])

Other Changes

  • Update deployment targets for tests (#4145) via Andy Boedo (@aboedo)
  • Deploy purchaserTester: clean up dry-run parameter (#4140) via Andy Boedo (@aboedo)
  • Clean up API Testers (#4141) via Andy Boedo (@aboedo)
  • More project structure cleanup (#4131) via Andy Boedo (@aboedo)
  • temporarily disables purchasetester deploy (#4133) via Andy Boedo (@aboedo)
  • Fix trigger all tests branch (#4135) via Andy Boedo (@aboedo)
  • Clean up XCWorkspace and testing apps (#4111) via Andy Boedo (@aboedo)
  • tests trigger: add target-branch parameter to trigger from the right branch (#4121) via Andy Boedo (@aboedo)
  • Re-added the RevenueCatUI tests job on every commit (#4113) via Andy Boedo (@aboedo)