4.25.2

This release is compatible with Xcode 15 beta 5 and visionOS beta 2

Bugfixes

Performance Improvements

Other Changes

4.25.1

Dependency Updates

Other Changes

4.25.0

New Features

This new feature prevents MitM attacks between the SDK and the RevenueCat server. With verification enabled, the SDK ensures that the response created by the server was not modified by a third-party, and the entitlements received are exactly what was sent. This is 100% opt-in. EntitlementInfos have a new VerificationResult property, which will indicate the validity of the responses when this feature is enabled.

let purchases = Purchases.configure(
  with: Configuration
    .builder(withAPIKey: "")
    .with(entitlementVerificationMode: .informational)
)
let customerInfo = try await purchases.customerInfo()
if !customerInfo.entitlements.verification.isVerified {
  print("Entitlements could not be verified")
}

You can learn more from the documentation.

Other Changes

4.24.1

Bugfixes

Other Changes

4.24.0

New Features

Dependency Updates

Other Changes

4.23.1

Bugfixes

Other Changes

4.23.0

New Features

Bugfixes

Other Changes

4.22.1

Bugfixes

Performance Improvements

Other Changes

4.22.0

New Features

Bugfixes

Dependency Updates

Other Changes

4.21.1

This release is compatible with Xcode 15 beta 1

Bugfixes

Other Changes

4.21.0

New Features

Bugfixes

Performance Improvements

Dependency Updates

Other Changes

4.20.0

New Features

Bugfixes

Performance Improvements

Other Changes

4.19.1

Other Changes

PostReceiptOperation: added ability to also post AdServices token (#2549) via NachoSoto (@NachoSoto)

4.19.0

New Features

Bugfixes

Other Changes
  • Introduced Configuration.EntitlementVerificationMode and VerificationResult (#2277) via NachoSoto (@NachoSoto)
  • PurchasesDiagnostics: added step to verify signature verification (#2267) via NachoSoto (@NachoSoto)
  • HTTPClient: added signature validation and introduced ErrorCode.signatureVerificationFailed (#2272) via NachoSoto (@NachoSoto)
  • ETagManager: don't use ETags if response verification failed (#2347) via NachoSoto (@NachoSoto)
  • Integration Tests: removed @preconcurrency import (#2464) via NachoSoto (@NachoSoto)
  • Clean up: moved ReceiptParserTests-Info.plist out of root (#2460) via NachoSoto (@NachoSoto)
  • Update CHANGELOG (#2461) via NachoSoto (@NachoSoto)
  • Update SwiftSnapshotTesting (#2453) via NachoSoto (@NachoSoto)
  • Fixed docs (#2432) via Kaunteya Suryawanshi (@kaunteya)
  • Remove unnecessary line break (#2435) via Andy Boedo (@aboedo)
  • ProductEntitlementMapping: enabled entitlement mapping fetching (#2425) via NachoSoto (@NachoSoto)
  • BackendPostReceiptDataTests: increased timeout to fix flaky test (#2426) via NachoSoto (@NachoSoto)
  • Updated requirements to drop Xcode 13.x support (#2419) via NachoSoto (@NachoSoto)
  • Integration Tests: fixed flaky errors when loading offerings (#2420) via NachoSoto (@NachoSoto)
  • PurchaseTester: fixed compilation for internal entitlement verification (#2417) via NachoSoto (@NachoSoto)
  • ETagManager/HTTPClient: sending new X-RC-Last-Refresh-Time header (#2373) via NachoSoto (@NachoSoto)
  • ETagManager: don't send validation time if not present (#2490) via NachoSoto (@NachoSoto)
  • SwiftUI Sample Project: Refactor Package terms method to a computed property (#2405) via Joseph Kokenge (@JOyo246)
  • Clean up v3 load shedder integration tests (#2402) via Andy Boedo (@aboedo)
  • Fix iOS 12 compilation (#2394) via NachoSoto (@NachoSoto)
  • Added new VerificationResult.verifiedOnDevice (#2379) via NachoSoto (@NachoSoto)
  • PurchaseTester: fix memory leaks (#2392) via Keita Watanabe (@kitwtnb)
  • Integration tests: add scheduled job (#2389) via Andy Boedo (@aboedo)
  • Add lane for running iOS v3 load shedder integration tests (#2388) via Andy Boedo (@aboedo)
  • iOS v3 load shedder integration tests (#2387) via Andy Boedo (@aboedo)
  • Offline Entitlements: created LoadShedderIntegrationTests (#2362) via NachoSoto (@NachoSoto)
  • Purchases.configure: log warning if attempting to use a static appUserID (#2385) via Mark Villacampa (@MarkVillacampa)
  • SubscriberAttributesManagerIntegrationTests: fixed flaky failures (#2381) via NachoSoto (@NachoSoto)
  • @DefaultDecodable.Now: fixed flaky test (#2374) via NachoSoto (@NachoSoto)
  • PurchaseTesterSwiftUI: fixed iOS compilation (#2376) via NachoSoto (@NachoSoto)
  • SubscriberAttributesManagerIntegrationTests: fixed potential race condition (#2380) via NachoSoto (@NachoSoto)
  • Offline Entitlements: create CustomerInfo from offline entitlements (#2358) via NachoSoto (@NachoSoto)
  • Added @DefaultDecodable.Now (#2372) via NachoSoto (@NachoSoto)
  • HTTPClient: debug log when performing redirects (#2371) via NachoSoto (@NachoSoto)
  • HTTPClient: new flag to force server errors (#2370) via NachoSoto (@NachoSoto)
  • OfferingsManager: fixed Xcode 13.x build (#2369) via NachoSoto (@NachoSoto)
  • Offline Entitlements: store ProductEntitlementMapping in cache (#2355) via NachoSoto (@NachoSoto)
  • Offline Entitlements: added support for fetching ProductEntitlementMappingResponse in OfflineEntitlementsAPI (#2353) via NachoSoto (@NachoSoto)
  • Offline Entitlements: created ProductEntitlementMapping (#2365) via NachoSoto (@NachoSoto)
  • Implemented NetworkError.isServerDown (#2367) via NachoSoto (@NachoSoto)
  • ETagManager: added test for 304 responses with no etag (#2360) via NachoSoto (@NachoSoto)
  • TestLogHandler: increased default capacity (#2357) via NachoSoto (@NachoSoto)
  • OfferingsManager: moved log to common method to remove hardcoded string (#2363) via NachoSoto (@NachoSoto)
  • Offline Entitlements: created ProductEntitlementMappingResponse (#2351) via NachoSoto (@NachoSoto)
  • HTTPClient: added test for 2xx response for request with etag (#2361) via NachoSoto (@NachoSoto)
  • PurchaseTesterSwiftUI improvements (#2345) via NachoSoto (@NachoSoto)
  • ConfigureStrings: fixed double-space typo (#2344) via NachoSoto (@NachoSoto)
  • ETagManagerTests: fixed tests on iOS 12 (#2349) via NachoSoto (@NachoSoto)
  • DeviceCache: simplified constructor (#2354) via NachoSoto (@NachoSoto)
  • Trusted Entitlements: changed all APIs to internal (#2350) via NachoSoto (@NachoSoto)
  • VerificationResult.notRequested: removed caching reference (#2337) via NachoSoto (@NachoSoto)
  • Finished signature verification HTTPClient tests (#2333) via NachoSoto (@NachoSoto)
  • Configuration.Builder.with(entitlementVerificationMode:): improved documentation (#2334) via NachoSoto (@NachoSoto)
  • ETagManager: don't ignore failed etags with Signing.VerificationMode.informational (#2331) via NachoSoto (@NachoSoto)
  • IdentityManager: clear ETagManager and DeviceCache if verification is enabled but cached CustomerInfo is not (#2330) via NachoSoto (@NachoSoto)
  • Made Configuration.EntitlementVerificationMode.enforced unavailable (#2329) via NachoSoto (@NachoSoto)
  • Refactor: reorganized files in new Security and Misc folders (#2326) via NachoSoto (@NachoSoto)
  • CustomerInfo: use same grace period logic for active subscriptions (#2327) via NachoSoto (@NachoSoto)
  • HTTPClient: don't verify 4xx/5xx responses (#2322) via NachoSoto (@NachoSoto)
  • EntitlementInfo: request date is not optional (#2325) via NachoSoto (@NachoSoto)
  • CustomerInfo: removed entitlementVerification (#2320) via NachoSoto (@NachoSoto)
  • Renamed VerificationResult.notVerified to .notRequested (#2321) via NachoSoto (@NachoSoto)
  • EntitlementInfo: add a grace period limit to outdated entitlements (#2288) via NachoSoto (@NachoSoto)
  • Update CustomerInfo.requestDate from 304 responses (#2310) via NachoSoto (@NachoSoto)
  • Signing: added request time & eTag to signature verification (#2309) via NachoSoto (@NachoSoto)
  • HTTPClient: changed header search to be case-insensitive (#2308) via NachoSoto (@NachoSoto)
  • HTTPClient: automatically add nonce based on HTTPRequest.Path (#2286) via NachoSoto (@NachoSoto)
  • PurchaseTester: added ability to reload CustomerInfo with a custom CacheFetchPolicy (#2312) via NachoSoto (@NachoSoto)
  • Fix issue where underlying error information for product fetch errors was not printed in log. (#2281) via Chris Vasselli (@chrisvasselli)
  • PurchaseTester: added ability to set Configuration.EntitlementVerificationMode (#2290) via NachoSoto (@NachoSoto)
  • SwiftUI: Paywall View should respond to changes on the UserView model (#2297) via ConfusedVorlon (@ConfusedVorlon)
  • Deprecate usesStoreKit2IfAvailable (#2293) via Andy Boedo (@aboedo)
  • Signing: updated to use production public key (#2274) via NachoSoto (@NachoSoto)

4.18.0

New Features

This new library allows apps to use a smaller version of the RevenueCat SDK, intended for apps that will do their own entitlement computation separate from RevenueCat.

Apps using this mode rely on webhooks to signal their backends to refresh entitlements with RevenueCat.

See the demo app for an example and usage instructions.

Bugfixes

Other Changes

4.17.11

Bug Fixes

4.17.10

Bugfixes

Other Changes

4.17.9

Bugfixes

Performance Improvements

Other Changes

4.17.8

Bugfixes

Performance Improvements

Other Changes

4.17.7

Bugfixes

Other Changes

4.17.6

Bugfixes

Other Changes

4.17.5

Dependency Updates

Other Changes

4.17.4

Bugfixes

Other Changes

4.17.3

Bugfixes

Other Changes

4.17.2

Bugfixes

Other Changes

4.17.1

Other Changes

4.17.0

New Features

Bugfixes

Other Changes

4.16.0

New Features

Bugfixes

Other Changes

4.15.5

Bugfixes

Other Changes

4.15.4

Bugfixes

Other Changes

4.15.3

Bugfixes

Other Changes

4.15.2

Bugfixes

Other Changes

4.15.1

Bugfixes

Other Changes

4.15.0

New Features

Other Changes

4.14.3

Bugfixes

Other Changes

4.14.2

Bugfixes

Other Changes

4.14.1

Bugfixes

Other Changes

4.14.0

New Features

Bugfixes

Other Changes

4.13.4

Bugfixes

Other Changes

4.13.3

Other Changes

4.13.2

Bugfixes

Other Changes

4.13.1

Other Changes

4.13.0

New Features

Bugfixes

Other Changes

4.12.1

Bugfixes

Other Changes

4.12.0

Bugfixes

New Features

Other Changes

4.11.0

Bugfixes

New Features

Other Changes

4.10.3

Bugfixes

Other Changes

4.10.2

Bugfixes

Other Changes

4.10.1

Bugfixes

4.10.0

New Features

Bugfixes

Other Changes

4.9.1

Fixes:

Improvements:

Other changes:

4.9.0

4.8.0

New API

Other Changes

4.7.0

Changes:

All attribution APIs can now be accessed from Purchases.shared.attribution.

Improvements:

Fixes:

4.6.1

Bug fixes

4.6.0

This release is compatible with Xcode 14 beta 1

New Features

In addition to EntitlementInfos.active, two new methods are added to allow detecting entitlements from sandbox and production environments:

customerInfo.entitlements.activeInCurrentEnvironment
customerInfo.entitlements.activeInAnyEnvironment

Bug fixes

4.5.2

This version supports Xcode 14 beta 1

4.5.1

Fixes

4.5.0

New Features

Bug Fixes

Other Changes

4.4.0

New Features

Fixes

Other changes

4.3.0

API updates:

Other:

4.2.1

4.2.0

API updates:

Other:

4.1.0

API updates:

Other:

4.0.0

RevenueCat iOS SDK v4 is here!!

Dancing cats

Full Changelog

Migration Guide

API changes:

There have been a lot of changes since v3!

Here are the highlights:

Async / Await alternative APIs

New async / await alternatives for all APIs that have completion blocks, as well as an AsyncStream for CustomerInfo.

New types and cleaned up naming

New types that wrap StoreKit's native types, and we cleaned up the naming of other types and methods for a more consistent experience.

New APIs for Customer Support

You can now use showManageSubscriptions() and beginRefundRequest() to help your users manage their subscriptions right from the app.

Rewritten in Swift

We rewrote the SDK in 100% Swift. This made the code more uniform and easy to maintain, and helps us better support StoreKit 2.

StoreKit 2 Support [Beta]

[Experimental] Introduced support for using StoreKit 2 under the hood for compatible devices. This is currently in beta phase, and disabled by default. When enabled, StoreKit 2 APIs will be used under the hood for purchases in compatible devices. You can enable this by configuring the SDK passing useStoreKit2IfAvailable: true. On devices that don't support StoreKit 2, StoreKit 1 will be used automatically instead.

Full API changes list

Documentation:

We built a new Documentation site with Docc with cleaner and more detailed docs. The new documentation can be found here.

4.0.0-RC.4

Full Changelog

RC 4 introduces the following updates:

API changes:

Breaking changes:

Additions:

Documentation:

Other changes:

Changes from previous RC

These changes add to all of the changes from beta RC 2, listed here..

4.0.0-RC.3

Full Changelog

RC 3 introduces the following updates:

API changes:

Documentation:

Migration fixes

Other changes:

Changes from previous RC

These changes add to all of the changes from beta RC 2, listed here..

4.0.0-RC.2

Full Changelog

RC 2 introduces the following updates:

API changes:

Documentation:

Migration fixes

Other changes:

Changes from previous RC

These changes add to all of the changes from beta RC 1, listed here..

4.0.0-RC.1

Full Changelog

RC 1 introduces the following updates:

API changes:

In addition to all of the changes from beta 10, listed here.

Other changes:

4.0.0-beta.10

Full Changelog

Beta 10 introduces the following updates:

Breaking changes:

In addition to all of the changes from Beta 9, listed here.

Other changes:

4.0.0-beta.9

Full Changelog

Breaking changes:

Xcode version requirements and updated deployment targets

purchases-ios v4 requires using Xcode 13.2 or newer. It also updates the minimum deployment targets for iOS, macOS and tvOS.

Minimum deployment targets
v3 v4
iOS 9.0 11.0
tvOS 9.0 11.0
macOS 10.12 10.13
watchOS 6.2 6.2 (unchanged)

StoreKit 2 support:

Async / Await alternative APIs

New APIs:

Known issues:

Other changes:

4.0.0-beta.8

4.0.0-beta.7

4.0.0-beta.6

4.0.0-beta.5

4.0.0-beta.4

4.0.0-beta.3

4.0.0-beta.2

4.0.0-beta.1

3.12.5

3.12.4

3.12.3

3.12.2

3.12.1

3.12.0

Identity V3:

New methods

Deprecations

Other changes:

Public additions

SharedPurchases nullability
Improved log handling

Deprecations

Other

3.11.1

3.11.0

3.10.7

3.10.6

3.10.5

3.10.4

3.10.3

3.10.2

3.10.1

3.10.0

3.9.2

3.9.1

3.9.0

3.8.0

3.7.6

3.7.5

3.7.4

3.7.3

3.7.2

3.7.1

3.7.0

3.6.0

3.5.3

3.5.2

3.5.1

3.5.0

3.4.0

3.3.1

3.3.0

3.2.2

3.2.1

3.2.0

3.1.2

3.1.1

3.1.0

3.0.4

3.0.3

3.0.2

3.0.1

3.0.0

2.6.1

2.6.0

2.5.0

2.4.0

2.3.0

2.2.0

2.1.1

2.1.0

2.0.0

1.2.1

1.2.0

1.1.5

1.1.4

1.1.3

1.1.2

1.1.1

1.1.0

1.0.5

1.0.4

1.0.3

1.0.2

1.0.1

1.0.0

0.12.0

0.11.0

0.10.2

0.10.1

0.10.0

0.9.0

0.8.0

0.7.0

0.6.0

0.5.0

0.4.0

0.3.0

0.2.0

0.1.0