Skip to content

Latest commit

 

History

History
997 lines (779 loc) · 49.5 KB

CHANGELOG.md

File metadata and controls

997 lines (779 loc) · 49.5 KB

4.3.0

API updates:

  • Introduced new Storefront type to abstract SK1's SKStorefront and SK2's StoreKit.Storefront.
  • Exposed Storefront.currentStorefront.
  • Added new ErrorCode.offlineConnectionError to differenciate offline errors versus the more generic .networkError.
  • Added Purchases-setFirebaseAppInstanceID to allow associating RevenueCat users with Firebase.
  • Added Purchases.setPushTokenString as an overload to Purchases.setPushToken.
  • Renamed PurchasesDelegate.purchases(_:shouldPurchasePromoProduct:defermentBlock:) to PurchasesDelegate.purchases(_ purchases: Purchases, readyForPromotedProduct product: StoreProduct, purchase:) to clarify its usage (see #1460).

Other:

  • Many improvements to error reporting and logging to help debugging.
  • Optimized StoreKit 2 purchasing by eliminating a duplicate API request.
  • A lot of under-the-hood improvements, mainly focusing on networking. If you see any issues we'd appreciate bug reports!

4.2.1

  • Fixed a potential race condition when syncing user attributes #1479

4.2.0

API updates:

  • Added new method setMixpanelDistinctID as a convenience method for setting the required attribute for the Mixpanel integration #1397

  • getPromotionalOffer has been deprecated in favor of promotionalOffer #1405

  • getEligiblePromotionalOffers has been deprecated in favor of eligiblePromotionalOffers #1405

  • StoreProductDiscount now includes the numberOfPeriods property #1428

Other:

  • Added workaround for StoreKit 1 incorrectly reporting purchase cancellations #1450

  • MagicWeatherSwiftUI now includes an example for using purchases(:shouldPurchasePromoProduct:defermentBlock:) #1459

  • Various documentation improvements

  • Additional under-the-hood improvements, continuing to focus on network requests and tests.

4.1.0

API updates:

  • Added new method checkTrialOrIntroDiscountEligibility(product:), which allows you to check for intro or discount eligibility for a single StoreProduct. RevenueCat#1354

  • Added explicit parameter name for checkTrialOrIntroDiscountEligibility(productIdentifiers:). The existing method without the parameter name still work, but is now deprecated. Xcode will offer an auto fix-it for it. RevenueCat#1362

  • Made StoreProduct initializers public so they can be used for testing.

Other:

  • Added auto-fix-it for invalidatePurchaserInfoCache rename RevenueCat#1379

  • Docs improvements

  • A lot of under-the-hood improvements, mainly focusing on network requests and tests.

4.0.0

RevenueCat iOS SDK v4 is here!!

Dancing cats

Full Changelog

Migration Guide

  • See our RevenueCat V4 API update doc for API updates. Note: This release is based off of 4.0.0-rc.4. Developers migrating from that version shouldn't see any changes.

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

  • Fourth RC for RevenueCat framework v4 🎉 100% Swift framework + ObjC support.

Full Changelog

RC 4 introduces the following updates:

API changes:

Breaking changes:

  • Replaced checkPromotionalDiscountEligibility with getPromotionalOffer, which returns a PromotionalOffer.
  • Renamed Purchases/purchase(package:discount:) and its variants to Purchases/purchase(package:promotionalOffer:). They now take a PromotionalOffer instead of a StoreProductDiscount.
  • [Objective-C only]: Updated type of StoreProduct.price and StoreProductDiscount.price from NSDecimal to the much more useful NSDecimalNumber.

Additions:

  • Added StoreProduct.ProductType, and StoreProduct.ProductCategory, which provide extra information about whether a product is a consumable, non-consumable, auto-renewable or non-auto-renewable subscription.
  • Added currencyCode to StoreProduct and StoreProductDiscount.
  • Added localizedPriceString to StoreProductDiscount.

Documentation:

Other changes:

  • There are lots of under the hood improvements. If you see any issues we'd appreciate bug reports!

Changes from previous RC

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

4.0.0-RC.3

  • Third RC for RevenueCat framework v4 🎉 100% Swift framework + ObjC support.

Full Changelog

RC 3 introduces the following updates:

API changes:

  • Added setCleverTapID, for integration with CleverTap.
  • Added .noIntroOfferExists as an IntroEligibilityStatus, for more granularity when checking for intro pricing eligibility.
  • Added StoreProductDiscount.type, which allows you to easily tell whether a discount represents a Promo Offer or an Intro Pricing.

Documentation:

Migration fixes

  • Fixed a few instances where Xcode's automatic migration tools wouldn't automatically suggest a fix-it for updated code.

Other changes:

  • There are lots of under the hood improvements. If you see any issues we'd appreciate bug reports!

Changes from previous RC

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

4.0.0-RC.2

  • Second RC for RevenueCat framework v4 🎉 100% Swift framework + ObjC support.

Full Changelog

RC 2 introduces the following updates:

API changes:

  • Removed SubscriptionPeriod.Unit.unknown. Subscriptions with empty SubscriptionPeriod values will have nil subscriptionPeriod instead.
  • Removed StoreProductDiscount.none, since it wasn't needed.
  • Added useStoreKit2IfAvailable (Experimental) configuration option. This is disabled by default. If enabled, the SDK will use StoreKit 2 APIs for purchases under the hood. This is currently in an experimental phase, and we don't recommend using it in production in this build.

Documentation:

Migration fixes

  • Fixed a few instances where Xcode's automatic migration tools wouldn't correctly update the code.

Other changes:

  • There are lots of under the hood improvements. If you see any issues we'd appreciate bug reports!

Changes from previous RC

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

4.0.0-RC.1

  • First RC for RevenueCat framework v4 🎉 100% Swift framework + ObjC support.

Full Changelog

RC 1 introduces the following updates:

API changes:

  • Purchases.paymentDiscount(forProductDiscount:product:completion:) and Purchases.paymentDiscount(forProductDiscount:product:) have been removed. Now, instead of obtaining the SKPaymentDiscount from a SKProductDiscount to then call purchase(package:discount:), you check eligibility for the promo offer by calling checkPromotionalDiscountEligibility(forProductDiscount:product:), then get the StoreProductDiscount directly from the StoreProduct and pass that into purchase(package:discount:).

  • StoreProduct and StoreProductDiscount, replace SKProduct and SKProductDiscount in the following methods:

    • Purchases.getProducts(_:completion:)
    • Purchases.products(_:)
    • Purchases.purchase(product:completion:)
    • Purchases.purchase(product:)
    • Purchases.purchase(product:discount:completion:)
    • Purchases.purchase(product:discount:)
    • Purchases.purchase(package:discount:completion:)
    • Purchases.purchase(package:discount:)
    • PurchasesDelegate.purchases(shouldPurchasePromoProduct:defermentBlock:)
  • StoreProduct.introductoryPrice has been renamed to StoreProduct.introductoryDiscount

  • StoreTransaction now includes quantity

  • Renamed Purchases.restoreTransactions to Purchases.restorePurchases

  • Lowered StoreProduct.introductoryDiscount availability to iOS 11.2 and equivalent OS versions

  • Added several @available annotations for automatic migration from StoreKit types

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

Other changes:

  • There are lots of under the hood improvements. If you see any issues we'd appreciate bug reports!

4.0.0-beta.10

  • Tenth beta for RevenueCat framework 🎉 100% Swift framework + ObjC support.

Full Changelog

Beta 10 introduces the following updates:

Breaking changes:

  • A new type, StoreTransaction, replaces SKPaymentTransaction in the return types of the following methods:
    • Purchases.purchase(product:completion:)
    • Purchases.purchase(package:completion:)
    • Purchases.purchase(package:discount:completion:)
    • Purchases.purchase(package:discount:completion:)
    • PurchasesDelegate.purchases(shouldPurchasePromoProduct:defermentBlock:)
    • CustomerInfo.nonSubscriptionTransactions
  • StoreProduct.PromotionalOffer has been renamed to StoreProduct.StoreProductDiscount.

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

Other changes:

  • There are lots of under the hood improvements. If you see any issues we'd appreciate bug reports!

4.0.0-beta.9

  • Ninth beta for RevenueCat framework 🎉 100% Swift framework + ObjC support.

Full Changelog

Breaking changes:

  • identify, previously deprecated, has been removed in favor of logIn.
  • reset, previously deprecated, has been removed in favor of logOut.
  • Package.product has been replaced with Package.storeProduct. This is an abstraction of StoreKit 1's SKProduct and StoreKit 2's StoreKit.Product, but it also adds useful features like pricePerMonth and priceFormatter. The underlying objects from StoreKit are available through StoreProduct.sk1Product and StoreProduct.sk2Product.

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:

  • This beta introduces new methods that add functionality using StoreKit 2:
    • showManageSuscriptions(completion:)
    • beginRefundRequest(forProduct:)
    • beginRefundRequest(forEntitlement:).
    • beginRefundRequestForActiveEntitlement()
  • checkTrialOrIntroductoryPriceEligibility(productIdentifiers:completion:) now uses StoreKit 2 if it's available, to make calculation more accurate and fast.
  • A new flag has been introduced to setup, useStoreKit2IfAvailable (defaults to false), to use StoreKit 2 APIs for purchases instead of StoreKit 1.

Async / Await alternative APIs

  • In purchases-ios v3, Async / Await alternative APIs were made available through Xcode's auto-generation for Objective-C projects. This beta re-adds the Async / Await alternative APIs for v4.

New APIs:

  • showManageSuscriptions(completion:): Use this method to show the subscription management for the current user. Depending on where they made the purchase and their OS version, this might take them to the managementURL, or open the iOS Subscription Management page.
  • beginRefundRequestForCurrentEntitlement: Use this method to begin a refund request for the purchase that granted the current entitlement.
  • beginRefundRequest(forProduct:): Use this method to begin a refund request for a purchase, specifying the product identifier.
  • beginRefundRequest(forEntitlement:): Use this method to begin a refund request for a purchase, specifying the entitlement identifier.
  • Adds an optional useStoreKit2IfAvailable parameter to setup (defaults to false). If enabled, purchases will be done by using StoreKit 2 APIs instead of StoreKit 1. This is currently experimental, and not all features are supported with StoreKit 2 APIs.
  • Use verboseLogHandler or verboseLogs to enable more details in logs, including file names, line numbers and method names.

Known issues:

  • Promotional offers and deferred purchases are not currently supported with StoreKit 2. If your app uses either of those, you should omit useStoreKit2IfAvailable in setup or set it to false.

Other changes:

  • There are lots of under the hood improvements. If you see any issues we'd appreciate bug reports!

4.0.0-beta.8

4.0.0-beta.7

  • Seventh beta for RevenueCat framework 🎉 100% Swift framework + ObjC support.
  • See our RevenueCat V4 API update doc for API updates.
  • macOS: improved ErrorCode.storeProblemError to indicate potential cancellation RevenueCat#943
  • Log when duplicate subscription time lengths exist during Offering init RevenueCat#954
  • PurchasesOrchestrator.paymentDiscount(forProductDiscount:product:completion:): improved error information RevenueCat#957
  • Make a public rawData a thing for all our datatypes RevenueCat#956
  • Detect ErrorCode.productAlreadyPurchasedError when SKError.unknown is actually caused by it RevenueCat#965

4.0.0-beta.6

4.0.0-beta.5

4.0.0-beta.4

4.0.0-beta.3

  • Third beta for RevenueCat framework 🎉 100% Swift framework + ObjC support.
  • See our RevenueCat V4 API update doc for API updates.
  • Fix bug logging the incorrect missing product IDs in getOfferings
  • Fix MagicWeather sample app with latest updates
  • Add caching of completion blocks for createAlias and identify calls to avoid sending calls with the same parameters at the same time

4.0.0-beta.2

  • Second beta for RevenueCat framework 🎉 100% Swift framework + ObjC support.
  • See our RevenueCat V4 API update doc for API updates.
  • Our API is now more consistent, completionBlock -> completion across Swift/ObjC
  • Fixed SPM warning relating to excluding RequiresXcode13
  • Make parameter labels that were optional pre-migration optional again

4.0.0-beta.1

  • First beta for RevenueCat (previously Purchases) framework 🎉 100% Swift framework + ObjC support.
  • See our RevenueCat V4 API update doc for API updates.

3.12.5

  • Cache callbacks for createAlias and identify to avoid sending multiple calls with same parameters at the same time RevenueCat#874

3.12.4

  • Updated getOfferings call to be performed serially instead of concurrently. RevenueCat#831

3.12.3

3.12.2

  • Fixed a bug where calling setDebugLogsEnabled(false) enables debug logs when it should not. RevenueCat#663

3.12.1

  • Fixed an issue in some versions of Xcode where compiling would fail with Definition conflicts with previous value in ETagManager.swift RevenueCat#659

3.12.0

Identity V3:

New methods

  • Introduces logIn, a new way of identifying users, which also returns whether a new user has been registered in the system. logIn uses a new backend endpoint.
  • Introduces logOut, a replacement for reset.

Deprecations

  • deprecates createAlias in favor of logIn

  • deprecates identify in favor of logIn

  • deprecates reset in favor of logOut

  • deprecates allowSharingAppStoreAccount in favor of dashboard-side configuration

    RevenueCat#453 RevenueCat#438 RevenueCat#506

Other changes:

Public additions

SharedPurchases nullability
  • Fixed sharedPurchases nullability
  • Introduced new property, isConfigured, that can be used to check whether the SDK has been configured and sharedPurchases won't be nil. RevenueCat#508
Improved log handling
  • Added new property logLevel, which provides more granular settings for the log level. Valid values are debug, info, warn and error.
  • Added new method, setLogHandler, which allows developers to use their own code to handle logging, and integrate their existing systems. RevenueCat#481 RevenueCat#515

Deprecations

  • Deprecated debugLogsEnabled property in favor of LogLevel. Use Purchases.logLevel = .debug as a replacement.

Other

3.11.1

  • Updates log message for createAlias to improve clarity RevenueCat#498
  • Adds rc_ to all Foundation extensions to prevent name collisions RevenueCat#500

3.11.0

  • Exposes ownershipType in EntitlementInfo, which can be used to determine whether a given entitlement was shared by a family member or purchased directly by the user. RevenueCat#483
  • Adds new RCConfigurationError type, which will be thrown when SDK configuration errors are detected. RevenueCat#494

3.10.7

  • Obfuscates calls to AppTrackingTransparency to prevent unnecessary rejections for kids apps when the framework isn't used at all. RevenueCat#486

3.10.6

3.10.5

  • Fixed a couple of issues with .xcframework output in releases RevenueCat#470 RevenueCat#469
  • Fix Carthage builds from source, so that end customers can start leveraging XCFramework support for Carthage >= 0.37 RevenueCat#471

3.10.4

  • Added .xcframework output to Releases, alongside the usual fat frameworks. RevenueCat#466
  • Added PurchaseTester project, useful to test features while working on purchases-ios. RevenueCat#464
  • Renamed the old SwiftExample project to LegacySwiftExample to encourage developers to use the new MagicWeather apps RevenueCat#461
  • Updated the cache duration in background from 24 hours to 25 to prevent cache misses when the app is woken every 24 hours exactly by remote push notifications. RevenueCat#463

3.10.3

  • Added SwiftUI sample app RevenueCat#457
  • Fixed a bug where 🍎‼️ Invalid Product Identifiers would show up even in the logs even when no invalid product identifiers were requested. RevenueCat#456

3.10.2

  • Re-added RCReceiptInUseByOtherSubscriberError, but with a deprecation warning, so as not to break existing apps. RevenueCat#452

3.10.1

3.10.0

3.9.2

  • Fixed issues when compiling with Xcode 11 or earlier RevenueCat#416
  • Fixed termination warnings for finished SKRequests RevenueCat#418
  • Fixed CI deploy bugs RevenueCat#421
  • Prevents unnecessary backend calls when the appUserID is an empty string RevenueCat#414
  • Prevents unnecessary POST requests when the JSON body can't be correctly formed RevenueCat#415
  • Updates git commit pointer for SPM Integration tests RevenueCat#412

3.9.1

  • Added support for SKPaymentQueue's didRevokeEntitlementsForProductIdentifiers:, so entitlements are automatically revoked from a family-shared purchase when a family member leaves or the subscription is canceled. RevenueCat#413
  • Added support for automated deploys RevenueCat#411
  • Fixed Xcode direct integration failing on Mac Catalyst builds RevenueCat#419

3.9.0

3.8.0

  • Added a silent version of restoreTransactions, called syncPurchases, meant to be used by developers performing migrations for other systems. RevenueCat#387 RevenueCat#403
  • Added presentCodeRedemptionSheet, which allows apps to present code redemption sheet for offer codes RevenueCat#400
  • Fixed sample app on macOS, which would fail to build because the watchOS app was embedded into it RevenueCat#402

3.7.6

  • Fixed a race condition that could cause a crash after deleting and reinstalling the app RevenueCat#383
  • Fixed possible overflow when performing local receipt parsing on 32-bit devices RevenueCat#384
  • Fixed string comparison when deleting synced subscriber attributes RevenueCat#385
  • Fixed docs-deploy job RevenueCat#386
  • Fixed a typo in a RCPurchases.h RevenueCat#380

3.7.5

3.7.4

3.7.3

  • Renames files with names that caused issues when building on Windows RevenueCat#362
  • Fixes crash when parsing receipts with an unexpected number of internal containers in an IAP ASN.1 Container RevenueCat#360
  • Fixes crash when sending NSNull attributes to addAttributionData:fromNetwork: RevenueCat#359
  • Added starter string constants file for logging RevenueCat#339

3.7.2

  • Updates the Pod to make it compile as a static framework, fixing build issues on hybrid SDKs. Cleans up imports in RCPurchases.h. RevenueCat#353
  • Fixes Catalyst builds and build warnings RevenueCat#352 RevenueCat#351

3.7.1

  • Fix 'Invalid bundle' validation error when uploading builds to App Store using Carthage or binary RevenueCat#346

3.7.0

  • Attribution V2: - Deprecated addAttributionData:fromNetwork: and addAttributionData:fromNetwork:forNetworkUserId: in favor of setAdjustId, setAppsflyerId, setFbAnonymousId, setMparticleId - Added support for OneSignal via setOnesignalId - Added setMediaSource, setCampaign, setAdGroup, setAd, setKeyword, setCreative, and collectDeviceIdentifiers RevenueCat#321 RevenueCat#340 RevenueCat#331
  • Prevent unnecessary receipt posts RevenueCat#323
  • Improved migration process for legacy Mac App Store apps moving to Universal Store RevenueCat#336
  • Added new SKError codes for Xcode 12 RevenueCat#334 RevenueCat#338
  • Renamed StoreKitConfig schemes RevenueCat#329
  • Fixed an issue where cached purchaserInfo would be returned after invalidating purchaserInfo cache RevenueCat#333
  • Fix cocoapods and carthage release scripts RevenueCat#324
  • Fixed a bug where checkIntroTrialEligibility wouldn't return when calling it from an OS version that didn't support intro offers RevenueCat#343

3.6.0

  • Fixed a race condition with purchase completed callbacks RevenueCat#313
  • Made RCTransaction public to fix compiling issues on Swift Package Manager RevenueCat#315
  • Added ability to export XCFrameworks RevenueCat#317
  • Cleaned up dispatch calls RevenueCat#318
  • Created a separate module and framework for the Swift code RevenueCat#319
  • Updated release scripts to be able to release the new Pod as well RevenueCat#320
  • Added a local receipt parser, updated intro eligibility calculation to perform on device first RevenueCat#302
  • Fix crash when productIdentifier or payment is nil. RevenueCat#297
  • Fixes ask-to-buy flow and will now send an error indicating there's a deferred payment. RevenueCat#296
  • Fixes application state check on app extensions, which threw a compilation error. RevenueCat#303
  • Restores will now always refresh the receipt. RevenueCat#287
  • New properties added to the PurchaserInfo to better manage non-subscriptions. RevenueCat#281
  • Bypass workaround in watchOS 7 that fixes watchOS 6.2 bug where devices report wrong appStoreReceiptURL RevenueCat#330
  • Fix bug where 404s in subscriber attributes POST would mark them as synced RevenueCat#328

3.5.3

  • Addresses an issue where subscriber attributes might not sync correctly if subscriber info for the user hadn't been synced before the subscriber attributes sync was performed. RevenueCat#327

3.5.2

  • Feature/defer cache updates if woken from push notification RevenueCat#288

3.5.1

  • Removes all references to ASIdentifierManager and advertisingIdentifier. This should help with some Kids apps being rejected RevenueCat#286
  • Fix for posting wrong duration P0D on consumables RevenueCat#289

3.5.0

3.4.0

  • Added proxyKey, useful for kids category apps, so that they can set up a proxy to send requests through. Do not use this unless you've talked to RevenueCat support about it. RevenueCat#258
  • Added managementURL to purchaserInfo. This provides an easy way for apps to create Manage Subscription buttons that will correctly redirect users to the corresponding subscription management page on all platforms. RevenueCat#259
  • Extra fields sent to the post receipt endpoint: normal_duration, intro_duration and trial_duration. These will feed into the LTV model for more accurate LTV values. RevenueCat#256
  • Fixed a bug where if the appUserID was not found in NSUserDefaults and createAlias was called, the SDK would create an alias to (null). RevenueCat#255
  • Added mParticle as an option for attribution. RevenueCat#251
  • Fixed build warnings for Mac Catalyst RevenueCat#247
  • Simplified Podspec and minor cleanup RevenueCat#248

3.3.1

  • Fixed version numbers that accidentally included the -SNAPSHOT suffix

3.3.0

3.2.2

  • Fixed build warnings about nil being passed to callees that require non-null parameters RevenueCat#216

3.2.1

  • Fixed build warnings on tvOS and API availability checks RevenueCat#212

3.2.0

  • Added support for WatchOS and tvOS, fixed some issues with pre-processor macro checks on different platforms. RevenueCat#183

3.1.2

  • Added an extra method, setPushTokenString, to be used by multi-platform SDKs that don't have direct access to the push token as NSData *, but rather as NSString *. RevenueCat#208

3.1.1

  • small fixes to docs and release scripts:

    • the release script was referencing a fastlane lane that was under the group ios, so it needs to be called with ios first
    • the docs for setPushToken in RCPurchases.m say to pass an empty string or nil to erase data, however since the param is of type NSData, you can't pass in an empty string.

    RevenueCat#203

3.1.0

  • Added Subscriber Attributes, which allow developers to store additional, structured information for a user in RevenueCat. More info: // More info: https://docs.revenuecat.com/docs/user-attributes. RevenueCat#196
  • Fixed an issue where the completion block of purchaserInfoWithCompletion would get called more than once if cached information existed and was stale. RevenueCat#199
  • Exposed original_purchase_date, which can be useful for migrating data for developers who don't increment the build number on every release and therefore can't rely on it being different on all releases.
  • Addressed a couple of build warnings: RevenueCat#200

3.0.4

  • Fixed an issue where Swift Package Manager didn't pick up the new Caching group from 3.0.3 RevenueCat#176

3.0.3

  • Added new method to invalidate the purchaser info cache, useful when promotional purchases are granted from outside the app. RevenueCat#168
  • Made sure we dispatch offerings, and purchaser info RevenueCat#146

3.0.2

  • Fixes an issue where Apple Search Ads attribution information would be sent even if the user hadn't clicked on a search ad.

3.0.1

  • Adds observer_mode to the backend post receipt call.

3.0.0

  • Support for new Offerings system.
  • Deprecates makePurchase methods. Replaces with purchasePackage
  • Deprecates entitlements method. Replaces with offerings
  • See our migration guide for more info: https://docs.revenuecat.com/v3.0/docs/offerings-migration
  • Added Purchases. prefix to Swift classes to avoid conflicts RevenueCat#131
  • Enabled base internationalisation to silence a warning (#119)
  • Migrates tests to Swift 5 (#138)
  • New identity changes (#133):
    • The .createAlias() method is no longer required, use .identify() instead
    • .identify() will create an alias if being called from an anonymous ID generated by RevenueCat
    • Added an isAnonymous property to Purchases.shared
    • Improved offline use

2.6.1

  • Support for Swift Package Manager
  • Adds a conditional to protect against nil products or productIdentifier (RevenueCat#129)

2.6.0

2.5.0

  • BREAKING CHANGE: fixed a typo in addAttributionData Swift's name.
  • Error logs for AppsFlyer if using deprecated rc_appsflyer_id
  • Error logs for AppsFlyer if missing networkUserID

2.4.0

  • BUGFIX: userId parameter in identify is not nullable anymore.
  • DEPRECATION: automaticAttributionCollection is now deprecated in favor of automaticAppleSearchAdsAttributionCollection since it's a more clear name.
  • NEW FEATURE: UIKitForMac support.
  • NEW FEATURE: Facebook Ads Attribution support https://docs.revenuecat.com/docs/facebook-ads.

2.3.0

  • addAttribution is now a class method that can be called before the SDK is configured.
  • addAttribution will automatically add the rc_idfa and rc_idfv parameters if the AdSupport and UIKit frameworks are included, respectively.
  • A network user identifier can be send to the addAttribution function, replacing the previous rc_appsflyer_id parameter.
  • Apple Search Ad attribution can be automatically collected by setting the automaticAttributionCollection boolean to true before the SDK is configured.
  • Adds an optional configuration boolean observerMode. This will set the value of finishTransactions at configuration time.
  • Header updates to include client version which will be used for debugging and reporting in the future.

2.2.0

  • Adds subscription offers

2.1.1

  • Avoid refreshing receipt everytime restore is called

2.1.0

  • Adds userCancelled as a parameter to the completion block of the makePurchase function.
  • Better error codes.

2.0.0

  • Refactor to all block based methods
  • Optional delegate method to receive changes in Purchaser Info
  • Ability to turn on detailed logging by setting debugLogsEnabled

1.2.1

  • Adds support for Tenjin

1.2.0

  • Singleton management handled by the SDK
  • Adds reset, identify and create alias calls

1.1.5

  • Conform RCPurchasesDelegate to NSObject
  • Adds requestDate to the purchaser info to avoid edge cases
  • Add iOS 11.2 availability annotations

1.1.4

  • Make RCPurchases initializer return a non-optional

1.1.3

  • Add option for disabling transaction finishing.

1.1.2

  • Fix to ensure prices are properly collected when using entitlements

1.1.1

  • Delegate methods now only dispatch if they are not on the main thread. This makes sure the cached PurchaserInfo is delivered on setting the delegate.
  • Allow developer to indicate anonymous ID behavior
  • Add "Purchases.h" to CocoaPods headers

1.1.0

  • Attribution! You can now pass attribution data from Apple Search Ads, AppsFlyer, Adjust and Branch. You can then view the ROI of your campaigns, including revenue coming from referrals.

1.0.5

  • Fix for entitlements will now have null active products if the product is not available from StoreKit

1.0.4

  • Fix version number in Plist for real

1.0.3

  • Fix version number in Plist

1.0.2

  • Improved error handling for fetching entitlements
  • Delegate methods are now guaranteed to run on the main thread

1.0.1

  • Fix a bug with parsing dates for Thai locales

1.0.0

  • Oh my oh whoa! We made it to version one point oh!
  • Entitlements now supported by the SDK. See the guide for more info.
  • Improved caching of RCPurchaserInfo

0.12.0

  • Remove Carthage dependencies
  • Add delegate methods for restoring
  • Allow RCPurchases to be instantiated with a UserDefaults object, useful for syncing between extensions

0.11.0

  • RCPurchases now caches the most recent RCPurchaserInfo. Apps no longer need to implement there own offline caching of subscription status.
  • Change block based methods to use delegate. restoreTransactions and updatePurchaserInfo no longer take blocks. This means all new RCPurchaserInfo objects will be sent via the delegate methods.
  • macOS support. Purchases now works with macOS. Contact [email protected] if interested in beta testing.

0.10.2

  • Workaround for a StoreKit issue (38476489) where priceLocale is missing on promotional purchases

0.10.1

  • Fix cache preventing prices from being posted

0.10.0

  • Prevent race conditions refreshing receipts.
  • Make processing of multiple receipt posts more efficient.
  • Add support for original application version so users can be grandfathered easily

0.9.0

  • Add support of checking eligibilty of introductory prices. RevenueCat will now be able to tell you definitively what version of a product you should present in your UI.

0.8.0

  • Add support of initializing without an appUserID. This standardizes and simplifies behavior for apps without account systems.

0.7.0

  • Change restoreTransactionsForAppStoreAccount: to take a completion block since it no long relies on the app store queue. Removed delegate methods.
  • Added updatedPurchaserInfo: that allows force refreshing of RCPurchaserInfo. Useful if your app needs the latest purchaser info.
  • Removed makePurchase:quantity:.
  • Add nonConsumablePurchases on RCPurchaserInfo. Non-consumable purchases will now Just Work (tm).

0.6.0

0.5.0

  • Add support for restoring purchases via restoreTransactionsForAppStoreAccount
  • Add support for iOS 9.0

0.4.0

  • Add tracking of product prices to allow for real time revenue tracking on RevenueCat.com

0.3.0

  • Improve handling of Apple and Backend errors
  • Handles missing receipts case
  • Fixed issue with timezone parsing

0.2.0

  • Rename shared secret to API key
  • Remove purchaserInfoWithCompletion, now RCPurchases fetches updated purchaser info automatically on UIApplicationDidBecomeActive.
  • Remove purchasing KVO property

0.1.0

  • Initial version
  • Requires access to the private beta, email [email protected] for a key.