Skip to content

Releases: RevenueCat/purchases-ios

4.27.2

06 Oct 16:11
Compare
Choose a tag to compare

RevenueCatUI

  • Paywalls: improved purchase-in-progress UI (#3279) via NachoSoto (@NachoSoto)

Bugfixes

  • SK2StoreProduct.priceFormatter: use locale from StoreKit.Product (#3278) via NachoSoto (@NachoSoto)

Performance Improvements

  • AAAttribution.attributionToken: avoid using on main thread (#3281) via NachoSoto (@NachoSoto)

Other Changes

  • Paywalls Tester: group live paywalls by template (#3276) via NachoSoto (@NachoSoto)

4.27.1

04 Oct 20:03
Compare
Choose a tag to compare

RevenueCatUI

  • Paywalls: added shimmer effect to LoadingPaywallView (#3267) via NachoSoto (@NachoSoto)

Bugfixes

Other Changes

  • Update SwiftLint (#3273) via NachoSoto (@NachoSoto)
  • PaywallsTester: allow for configuration for demos (#3260) via Andy Boedo (@aboedo)
  • Paywalls: simplified LoadingPaywallView (#3265) via NachoSoto (@NachoSoto)

4.27.0

03 Oct 18:38
Compare
Choose a tag to compare

New Features

Other Changes

  • Remove ObjC showStoreMessages API (#3269) via Toni Rico (@tonidero)
  • PaywallsTester: add a new tab that calls presentPaywallIfNeeded (#3259) via Andy Boedo (@aboedo)
  • Paywalls: small PaywallsTester refactor (#3261) via NachoSoto (@NachoSoto)

4.26.2

02 Oct 20:36
Compare
Choose a tag to compare

RevenueCatUI

  • Paywalls: polished template 4 layout math (#3249) via NachoSoto (@NachoSoto)
  • Paywalls: improved template 1 iPad layout and iOS 15 fix (#3241) via NachoSoto (@NachoSoto)
  • Paywalls: polished PurchaseButton on iPad (#3240) via NachoSoto (@NachoSoto)

Dependency Updates

  • Bump cocoapods from 1.12.1 to 1.13.0 (#3251) via dependabot[bot] (@dependabot[bot])

Other Changes

  • Paywalls: added previews for IntroEligibilityStateView (#3248) via NachoSoto (@NachoSoto)
  • debugRevenueCatOverlay: added list of active entitlements (#3247) via NachoSoto (@NachoSoto)
  • PaywallsTester: allow easy testing of paywall modes for All Offerings tab (#3254) via Andy Boedo (@aboedo)
  • PaywallsTester: allow resizing on macOS (#3258) via Andy Boedo (@aboedo)
  • PaywallsTester: replace opening default paywall automatically with button (#3256) via Andy Boedo (@aboedo)
  • PaywallsTester: fix StoreKit Configuration scheme (#3257) via Andy Boedo (@aboedo)
  • PaywallsTester: improve navigation on macOS and iPadOS (#3255) via Andy Boedo (@aboedo)
  • PrivacyInfo.xcprivacy: changed NSPrivacyCollectedDataTypePurchaseHistory to false (#3242) via NachoSoto (@NachoSoto)
  • Paywalls: changed PaywallsTester to allow not configuring API key (#3244) via NachoSoto (@NachoSoto)
  • Paywalls: renamed SimpleApp to PaywallsTester (#3243) via NachoSoto (@NachoSoto)
  • Make revisionID private in PaywallData+Default (#3239) via Cesar de la Vega (@vegaro)

4.26.1

21 Sep 05:07
Compare
Choose a tag to compare

RevenueCatUI

  • Paywalls: don't display progress view in LoadingPaywallView (#3235) via NachoSoto (@NachoSoto)
  • Paywalls: don't display "Purchases restored successfully" if nothings was restored (#3233) via NachoSoto (@NachoSoto)
  • Paywalls: avoid displaying offer details twice on .condensedFooters (#3230) via NachoSoto (@NachoSoto)
  • Paywalls: improved footerView to use .continuous rounded corners (#3222) via NachoSoto (@NachoSoto)

Dependency Updates

  • Bump danger from 9.3.1 to 9.3.2 (#3229) via dependabot[bot] (@dependabot[bot])
  • Bump fastlane from 2.215.1 to 2.216.0 (#3228) via dependabot[bot] (@dependabot[bot])
  • Bump fastlane from 2.214.0 to 2.215.1 (#3221) via dependabot[bot] (@dependabot[bot])

Other Changes

  • Paywalls: removed unused property (#3226) via NachoSoto (@NachoSoto)
  • Configuration: log warning if attempting to use observer mode with StoreKit 2 (#3066) via NachoSoto (@NachoSoto)
  • PurchasedProductsFetcher: refactored fetchTransactions (#3225) via NachoSoto (@NachoSoto)
  • CI: updated iOS 17 simulator (#3223) via NachoSoto (@NachoSoto)
  • Integration Tests: prevent false positives when purchasing returns 5xx (#3209) via NachoSoto (@NachoSoto)
  • Integration Tests: add coverage for Purchases.customerInfoStream (#3213) via NachoSoto (@NachoSoto)

4.26.0

15 Sep 17:06
eb63d22
Compare
Choose a tag to compare

New Features

✨📱 Introducing RevenueCatUI 🐾🧱

RevenueCat's Paywalls allow you to remotely configure your entire paywall view without any code changes or app updates.
Our paywall templates use native code to deliver smooth, intuitive experiences to your customers when you’re ready to deliver them an Offering; and you can use our Dashboard to pick the right template and configuration to meet your needs.

To use RevenueCat Paywalls on iOS, simply:

  1. Create a Paywall on the Dashboard for the Offering you intend to serve to your customers
  2. Add the RevenueCatUI SPM dependency to your project
  3. import RevenueCatUI at the point in the user experience when you want to display a paywall:
import RevenueCatUI
import SwiftUI

struct YourApp: View {

    var body: some View {
        YourContent()
            .presentPaywallIfNeeded(
                requiredEntitlementIdentifier: "pro",
                purchaseCompleted: { customerInfo in
                    print("Purchase completed: \(customerInfo)")
                },
                restoreCompleted: { customerInfo in
                    print("Purchases restored: \(customerInfo)")
                }
            )
    }

}

You can find more information in our documentation.

List of changes * NachoSoto: `Paywalls`: renamed `PaywallEvent.view` to `.impression` (#3212) * NachoSoto: `Paywalls`: loading indicator for in-progress purchases (#3217) * NachoSoto: `Paywalls`: fixed template 4 bottom padding (#3211) * NachoSoto: `Paywalls`: only pre-warm images/intro-eligibility for `Offerings.current` (#3210) * NachoSoto: `Paywalls`: fixed mock intro eligibility on snapshot tests (#3205) * NachoSoto: `Paywalls`: fixed SimpleApp release build (#3203) * NachoSoto: `Paywalls`: improved `DebugErrorView` layout (#3204) * NachoSoto: `Paywalls`: refactored `PurchaseHandler` extracting protocol (#3196) * NachoSoto: `Paywalls`: automatically flush events (#3177) * NachoSoto: `Paywalls`: fixed `TemplateBackgroundImageView` aspect ratio (#3201) * NachoSoto: `Paywalls`: fixed broken layout on template 4 (#3202) * NachoSoto: `Paywalls`: events unit and integration tests (#3169) * NachoSoto: `Paywalls`: send events to `Purchases` (#3164) * NachoSoto: `Paywalls`: convert empty images into `nil` (#3195) * NachoSoto: `Paywalls`: new `onRestoreCompleted` handler (#3190) * NachoSoto: `Paywalls`: fixed `IntroEligibilityViewModel` data lifetime (#3194) * NachoSoto: `Paywalls`: test plan for running non-snapshot tests (#3188) * NachoSoto: `Paywalls`: polish template 4 (#3183) * NachoSoto: `Paywalls`: fixed data flow resulting in multiple `PurchaseHandler` instances (#3187) * Cesar de la Vega: `Paywalls`: update `blurred_background_image` key in `PaywallData` test fixture (#3186) * NachoSoto: `Paywalls`: added `Purchases.track(paywallEvent:)` (#3160) * NachoSoto: `Paywalls`: don't apply dark appearance with no dark mode colors (#3184) * NachoSoto: `Paywalls`: fixed template 2 + `.condensedFooter` + iPad (#3185) * NachoSoto: `Paywalls`: new `{{ sub_duration_in_months }}` variable (#3173) * NachoSoto: `Paywalls`: created `PaywallEventsManager` (#3159) * NachoSoto: `Paywalls`: implemented `PostPaywallEventsOperation` (#3158) * NachoSoto: `Paywalls`: new `{{ sub_relative_discount }}` variable (#3131) * Charlie Chapman: `Paywalls`: improved `FooterView` (#3171) * NachoSoto: `Paywalls`: fixed `FooterView` horizontal centering (#3172) * NachoSoto: `Paywalls`: created `PaywallEventStore` (#3157) * NachoSoto: `Paywalls`: add `PaywallEvent` model (#3156) * NachoSoto: `Paywalls`: add `PaywallData.revision` (#3155) * NachoSoto: `Paywalls`: support fuzzy-Locale search in `iOS 15` (#3162) * NachoSoto: `PaywallData`: added `@NonEmptyString` to `subtitle` and `offerName` (#3150) * NachoSoto: `Paywalls`: add paywall for Load Shedder integration tests (#3151) * NachoSoto: `Paywalls`: fixed error view being displayed on release builds (#3141) * NachoSoto: `Paywalls`: improved `{{ total_price_and_per_month }}` to include period (#3136) * NachoSoto: `Paywalls`: `{{ price_per_period }}` now takes `SubscriptionPeriod.value` into account (#3133) * NachoSoto: `Paywalls`: add Arabic to SimpleApp for testing (#3132) * NachoSoto: `Paywalls`: update snapshot generation with new separate git repo (#3116) * NachoSoto: `Paywalls`: add support for CTA button gradients (#3121) * NachoSoto: `Paywalls`: template 5 (#3095) * NachoSoto: `Paywalls`: replaced submodule with `gitignore`d reference (#3125) * NachoSoto: `Catalyst`: fixed a couple of Catalyst build warnings (#3120) * NachoSoto: `Paywalls`: reference test snapshots from submodule (#3115) * NachoSoto: `Paywalls`: removed `presentedPaywallViewMode` (#3109) * NachoSoto: `Paywalls`: remove duplicate `RevenueCat` scheme to fix Carthage (#3105) * NachoSoto: `Paywalls`: fixed iOS 12 build (#3104) * NachoSoto: `Paywalls`: fixed template 2 inconsistent spacing (#3091) * NachoSoto: `Paywalls`: improved test custom paywall (#3089) * NachoSoto: `Paywalls`: avoid warming up cache multiple times (#3068) * NachoSoto: `Paywalls`: added all localization (#3080) * NachoSoto: `Paywalls`: temporarily disable `PaywallTemplate.template4` (#3088) * NachoSoto: `Paywalls`: enabled `Catalyst` support (#3087) * NachoSoto: `Paywalls`: iPad polish (#3061) * NachoSoto: `Paywalls`: added MIT license to all headers (#3084) * NachoSoto: `Paywalls`: improved unselected package background color (#3079) * NachoSoto: `Paywalls`: handle already purchased state (#3046) * NachoSoto: `Paywalls`: only dismiss `PaywallView` when explicitly presenting it with `.presentPaywallIfNeeded` (#3075) * NachoSoto: `Paywalls`: add support for generating snapshots on CI (#3055) * NachoSoto: `Paywalls`: removed unnecessary `PaywallFooterView` (#3064) * Josh Holtz: `Paywalls`: new `PaywallFooterView` to replace `modes` (#3051) * Josh Holtz: `Paywalls`: rename card to footer (#3049) * NachoSoto: `Paywalls`: changed `total_price_and_per_month` to include period (#3044) * NachoSoto: `Paywalls`: internal documentation for implementing templates (#3053) * NachoSoto: `Paywalls`: finished `iOS 15` support (#3043) * NachoSoto: `Paywalls`: validate `PaywallData` to ensure displayed data is always correct (#3019) * NachoSoto: `Paywalls`: fixed `total_price_and_per_month` for custom monthly packages (#3027) * NachoSoto: `Paywalls`: tweaking colors on template 2&3 (#3011) * NachoSoto: `Paywalls`: changed snapshots to scale 1 (#3016) * NachoSoto: `Paywalls`: replaced `defaultLocale` with `preferredLocales` (#3003) * NachoSoto: `Paywalls`: improved `PaywallDisplayMode.condensedCard` layout (#3001) * NachoSoto: `Paywalls`: `.card` and `.condensedCard` modes (#2995) * NachoSoto: `Paywalls`: prevent multiple concurrent purchases (#2991) * NachoSoto: `Paywalls`: improved variable warning (#2984) * NachoSoto: `Paywalls`: fixed horizontal padding on template 1 (#2987) * NachoSoto: `Paywalls`: changed `FooterView` to always use `text1` color (#2992) * NachoSoto: `Paywalls`: retry test failures (#2985) * NachoSoto: `Paywalls`: send presented `PaywallViewMode` with purchases (#2859) * NachoSoto: `Paywalls`: added support for custom fonts (#2988) * NachoSoto: `Paywalls`: improved template 2 unselected packages (#2982) * Josh Holtz: `Paywalls`: fix template 2 selected text offer details color (#2975) * NachoSoto: `Paywalls`: warm-up image cache (#2978) * NachoSoto: `Paywalls`: extracted `PaywallCacheWarming` (#2977) * NachoSoto: `Paywalls`: fixed color in template 3 (#2980) * NachoSoto: `Paywalls`: improved default template (#2973) * NachoSoto: `Paywalls`: added links to documentation (#2974) * NachoSoto: `Paywalls`: updated template names (#2971) * NachoSoto: `Paywalls`: updated variable names (#2970) * NachoSoto: `Paywalls`: added JSON debug screen to `debugRevenueCatOverlay` (#2972) * NachoSoto: `Paywalls`: multi-package horizontal template (#2949) * NachoSoto: `Paywalls`: fixed template 3 icon aspect ratio (#2969) * NachoSoto: `Paywalls`: iOS 17 tests on CI (#2955) * NachoSoto: `Paywalls`: deploy `debug` sample app (#2966) * NachoSoto: `Paywalls`: sort offerings list in sample app (#2965) * NachoSoto: `Paywalls`: initial iOS 15 support (#2933) * NachoSoto: `Paywalls`: changed default `PaywallData` to display available packages (#2964) * NachoSoto: `Paywalls`: changed `offerDetails` to be optional (#2963) * NachoSoto: `Paywalls`: markdown support (#2961) * NachoSoto: `Paywalls`: updated icon set to match frontend (#2962) * NachoSoto: `Paywalls`: added support for `PackageType.custom` (#2959) * NachoSoto: `Paywalls`: fixed `tvOS` compilation by making it explicitly unavailable (#2956) * NachoSoto: `Paywalls`: fix crash when computing localization with duplicate packages (#2958) * NachoSoto: `Paywalls`: UIKit `PaywallViewController` (#2934) * NachoSoto: `Paywalls`: `presentPaywallIfNecessary` -> `presentPaywallIfNeeded` (#2953) * NachoSoto: `Paywalls`: added support for custom and lifetime products (#2941) * NachoSoto: `Paywalls`: changed `SamplePaywallsList` to work offline (#2937) * NachoSoto: `Paywalls`: fixed header image mask on first template (#2936) * NachoSoto: `Paywalls`: new `subscription_duration` variable (#2942) * NachoSoto: `Paywalls`: removed `mode` parameter from `presentPaywallIfNecessary` (#2940) * NachoSoto: `Paywalls`: improved `RemoteImage` error layout (#2939) * NachoSoto: `Paywalls`: added default close button when using `presentPaywallIfNecessary` (#2935) * NachoSoto: `Paywalls`: added ability to preview templates in a `.sheet` (#2938) * NachoSoto: `Paywalls`: avoid recomputing variable `Regex` (#2944) * NachoSoto: `Paywalls`: improved `FooterView` scaling (#2948) * NachoSoto...
Read more

4.25.10

14 Sep 18:55
Compare
Choose a tag to compare

Bugfixes

  • Fix runtime crash in SK2TransactionListener in iOS < 15 (#3206) via Toni Rico (@tonidero)

Performance Improvements

  • OperationDispatcher: add support for "long" delays (#3168) via NachoSoto (@NachoSoto)

Other Changes

  • Integration Tests: add tests for ghost transfer behavior (#3135) via NachoSoto (@NachoSoto)
  • Xcode: removed purchases-ios SPM reference (#3166) via NachoSoto (@NachoSoto)
  • Integration Tests: another flaky failure (#3165) via NachoSoto (@NachoSoto)
  • Integration Tests: fix flaky test failure due to leftover transaction (#3167) via NachoSoto (@NachoSoto)
  • Xcode 13: removed last Swift 5.7 checks (#3161) via NachoSoto (@NachoSoto)
  • Integration Tests: improve flaky tests (#3163) via NachoSoto (@NachoSoto)
  • Codable: improved decoding errors (#3153) via NachoSoto (@NachoSoto)
  • Refactor: extract HealthOperation (#3154) via NachoSoto (@NachoSoto)
  • Xcode 13: remove conditional code (#3147) via NachoSoto (@NachoSoto)
  • CircleCI: change all jobs to use Xcode 14.x and replace xcode-install with xcodes (#2421) via NachoSoto (@NachoSoto)

4.26.0-beta.4

13 Sep 01:40
Compare
Choose a tag to compare
4.26.0-beta.4 Pre-release
Pre-release

New Features

✨ Introducing RevenueCatUI 📱 (beta):

RevenueCat's Paywalls allow you to to remotely configure your entire paywall view without any code changes or app updates.
Our paywall templates use native code to deliver smooth, intuitive experiences to your customers when you’re ready to deliver them an Offering; and you can use our Dashboard to pick the right template and configuration to meet your needs.

To use RevenueCat Paywalls on iOS, simply:

  1. Create a Paywall on the Dashboard for the Offering you intend to serve to your customers
  2. Add the RevenueCatUI SPM dependency to your project
  3. import RevenueCatUI at the point in the user experience when you want to display a paywall:
import RevenueCatUI
import SwiftUI

struct YourApp: View {

    var body: some View {
        YourContent()
            .presentPaywallIfNeeded(
                requiredEntitlementIdentifier: "pro",
                purchaseCompleted: { customerInfo in
                    print("Purchase completed: \(customerInfo)")
                },
                restoreCompleted: { customerInfo in
                    print("Purchases restored: \(customerInfo)")
                }
            )
    }

}

4.26.0-beta.3

08 Sep 22:47
Compare
Choose a tag to compare
4.26.0-beta.3 Pre-release
Pre-release

New Features

✨ Introducing RevenueCatUI 📱 (beta):

RevenueCat's Paywalls allow you to to remotely configure your entire paywall view without any code changes or app updates.
Our paywall templates use native code to deliver smooth, intuitive experiences to your customers when you’re ready to deliver them an Offering; and you can use our Dashboard to pick the right template and configuration to meet your needs.

To use RevenueCat Paywalls on iOS, simply:

  1. Create a Paywall on the Dashboard for the Offering you intend to serve to your customers
  2. Add the RevenueCatUI SPM dependency to your project
  3. import RevenueCatUI at the point in the user experience when you want to display a paywall:
import RevenueCatUI
import SwiftUI

struct YourApp: View {

    var body: some View {
        YourContent()
            .presentPaywallIfNeeded(requiredEntitlementIdentifier: "pro") { customerInfo in
                print("Purchase completed: \(customerInfo)")
            }
    }

}

4.25.9

05 Sep 20:51
Compare
Choose a tag to compare

Bugfixes

  • DebugViewModel: fixed runtime crash on iOS < 16 (#3139) via NachoSoto (@NachoSoto)

Performance Improvements

  • PurchasesOrchestrator: return early if receipt has no transactions when checking for promo offers (#3123) via Mark Villacampa (@MarkVillacampa)
  • Purchases: don't clear intro eligibility / purchased products cache on first launch (#3067) via NachoSoto (@NachoSoto)

Dependency Updates

Other Changes

  • ReceiptParser: fixed SPM build (#3144) via NachoSoto (@NachoSoto)
  • carthage_installation_tests: optimize SPM package loading (#3129) via NachoSoto (@NachoSoto)
  • CI: add workaround for Carthage timing out (#3119) via NachoSoto (@NachoSoto)
  • Integration Tests: workaround to not lose debug logs (#3108) via NachoSoto (@NachoSoto)