Releases: RevenueCat/purchases-ios
4.26.0-beta.3
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:
- Create a Paywall on the Dashboard for the
Offering
you intend to serve to your customers - Add the
RevenueCatUI
SPM dependency to your project 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
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
SPM
: updatePackage.resolved
(#3130) via NachoSoto (@NachoSoto)
Other Changes
ReceiptParser
: fixed SPM build (#3144) via NachoSoto (@NachoSoto)carthage_installation_tests
: optimize SPM package loading (#3129) via NachoSoto (@NachoSoto)CI
: add workaround forCarthage
timing out (#3119) via NachoSoto (@NachoSoto)Integration Tests
: workaround to not lose debug logs (#3108) via NachoSoto (@NachoSoto)
4.26.0-beta.2
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:
- Create a Paywall on the Dashboard for the
Offering
you intend to serve to your customers - Add the
RevenueCatUI
SPM dependency to your project 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)")
}
}
}
List of changes
Paywalls
: update snapshot generation with new separate git repo (#3116) via NachoSoto (@NachoSoto)Purchases
: don't clear intro eligibility / purchased products cache on first launch (#3067) via NachoSoto (@NachoSoto)CI
: add workaround forCarthage
timing out (#3119) via NachoSoto (@NachoSoto)Paywalls
: add support for CTA button gradients (#3121) via NachoSoto (@NachoSoto)Paywalls
: template 5 (#3095) via NachoSoto (@NachoSoto)Paywalls
: replaced submodule withgitignore
d reference (#3125) via NachoSoto (@NachoSoto)Catalyst
: fixed a couple of Catalyst build warnings (#3120) via NachoSoto (@NachoSoto)Paywalls
: reference test snapshots from submodule (#3115) via NachoSoto (@NachoSoto)Paywalls
: removedpresentedPaywallViewMode
(#3109) via NachoSoto (@NachoSoto)Paywalls
: fixed template 2 inconsistent spacing (#3091) via NachoSoto (@NachoSoto)Paywalls
: improved test custom paywall (#3089) via NachoSoto (@NachoSoto)Paywalls
: avoid warming up cache multiple times (#3068) via NachoSoto (@NachoSoto)Paywalls
: added all localization (#3080) via NachoSoto (@NachoSoto)Paywalls
: temporarily disablePaywallTemplate.template4
(#3088) via NachoSoto (@NachoSoto)Paywalls
: enabledCatalyst
support (#3087) via NachoSoto (@NachoSoto)Paywalls
: iPad polish (#3061) via NachoSoto (@NachoSoto)Paywalls
: added MIT license to all headers (#3084) via NachoSoto (@NachoSoto)Paywalls
: improved unselected package background color (#3079) via NachoSoto (@NachoSoto)Paywalls
: handle already purchased state (#3046) via NachoSoto (@NachoSoto)Paywalls
: only dismissPaywallView
when explicitly presenting it with.presentPaywallIfNeeded
(#3075) via NachoSoto (@NachoSoto)Paywalls
: add support for generating snapshots on CI (#3055) via NachoSoto (@NachoSoto)Paywalls
: removed unnecessaryPaywallFooterView
(#3064) via NachoSoto (@NachoSoto)Paywalls
: newPaywallFooterView
to replacemodes
(#3051) via Josh Holtz (@joshdholtz)Paywalls
: rename card to footer (#3049) via Josh Holtz (@joshdholtz)Paywalls
: changedtotal_price_and_per_month
to include period (#3044) via NachoSoto (@NachoSoto)Paywalls
: finishediOS 15
support (#3043) via NachoSoto (@NachoSoto)Paywalls
: validatePaywallData
to ensure displayed data is always correct (#3019) via NachoSoto (@NachoSoto)Paywalls
: fixedtotal_price_and_per_month
for custom monthly packages (#3027) via NachoSoto (@NachoSoto)Paywalls
: tweaking colors on template 2&3 (#3011) via NachoSoto (@NachoSoto)Paywalls
: changed snapshots to scale 1 (#3016) via NachoSoto (@NachoSoto)Paywalls
: replaceddefaultLocale
withpreferredLocales
(#3003) via NachoSoto (@NachoSoto)Paywalls
: improvedPaywallDisplayMode.condensedCard
layout (#3001) via NachoSoto (@NachoSoto)Paywalls
:.card
and.condensedCard
modes (#2995) via NachoSoto (@NachoSoto)Paywalls
: prevent multiple concurrent purchases (#2991) via NachoSoto (@NachoSoto)Paywalls
: improved variable warning (#2984) via NachoSoto (@NachoSoto)Paywalls
: fixed horizontal padding on template 1 (#2987) via NachoSoto (@NachoSoto)Paywalls
: changedFooterView
to always usetext1
color (#2992) via NachoSoto (@NachoSoto)Paywalls
: retry test failures (#2985) via NachoSoto (@NachoSoto)Paywalls
: send presentedPaywallViewMode
with purchases (#2859) via NachoSoto (@NachoSoto)Paywalls
: added support for custom fonts (#2988) via NachoSoto (@NachoSoto)Paywalls
: improved template 2 unselected packages (#2982) via NachoSoto (@NachoSoto)Paywalls
: fix template 2 selected text offer details color (#2975) via Josh Holtz (@joshdholtz)Paywalls
: warm-up image cache (#2978) via NachoSoto (@NachoSoto)Paywalls
: extractedPaywallCacheWarming
(#2977) via NachoSoto (@NachoSoto)Paywalls
: fixed color in template 3 (#2980) via NachoSoto (@NachoSoto)Paywalls
: improved default template (#2973) via NachoSoto (@NachoSoto)Paywalls
: added links to documentation (#2974) via NachoSoto (@NachoSoto)Paywalls
: updated template names (#2971) via NachoSoto (@NachoSoto)Paywalls
: updated variable names (#2970) via NachoSoto (@NachoSoto)Paywalls
: added JSON debug screen todebugRevenueCatOverlay
(#2972) via NachoSoto (@NachoSoto)Paywalls
: multi-package horizontal template (#2949) via NachoSoto (@NachoSoto)Paywalls
: fixed template 3 icon aspect ratio (#2969) via NachoSoto (@NachoSoto)Paywalls
: iOS 17 tests on CI (#2955) via NachoSoto (@NachoSoto)Paywalls
: deploydebug
sample app (#2966) via NachoSoto (@NachoSoto)Paywalls
: sort offerings list in sample app (#2965) via NachoSoto (@NachoSoto)Paywalls
: initial iOS 15 support (#2933) via NachoSoto (@NachoSoto)Paywalls
: changed defaultPaywallData
to display available packages (#2964) via NachoSoto (@NachoSoto)Paywalls
: changedofferDetails
to be optional (#2963) via NachoSoto (@NachoSoto)Paywalls
: markdown support (#2961) via NachoSoto (@NachoSoto)Paywalls
: updated icon set to match frontend (#2962) via NachoSoto (@NachoSoto)Paywalls
: added support forPackageType.custom
(#2959) via NachoSoto (@NachoSoto)Paywalls
: fixedtvOS
compilation by making it explicitly unavailable (#2956) via NachoSoto (@NachoSoto)Paywalls
: fix crash when computing localization with duplicate packages (#2958) via NachoSoto (@NachoSoto)Paywalls
: UIKitPaywallViewController
(#2934) via NachoSoto (@NachoSoto)Paywalls
:presentPaywallIfNecessary
->presentPaywallIfNeeded
(#2953) via NachoSoto (@NachoSoto)Paywalls
: added support for custom and lifetime products (#2941) via NachoSoto (@NachoSoto)Paywalls
: changedSamplePaywallsList
to work offline (#2937) via NachoSoto (@NachoSoto)Paywalls
: fixed header image mask on first template (#2936) via NachoSoto (@NachoSoto)Paywalls
: removedmode
parameter frompresentPaywallIfNecessary
(#2940) via NachoSoto (@NachoSoto)Paywalls
: improvedRemoteImage
error layout (#2939) via NachoSoto (@NachoSoto)Paywalls
: added default close button when usingpresentPaywallIfNecessary
(#2935) via NachoSoto (@NachoSoto)Paywalls
: added ability to preview templates in a.sheet
(#2938) via NachoSoto (@NachoSoto)Paywalls
: avoid recomputing variableRegex
(#2944) via NachoSoto (@NachoSoto)Paywalls
: improvedFooterView
scaling (#2948) via NachoSoto (@NachoSoto)Paywalls
: added ability to calculate and localize subscription discounts (#2943) via NachoSoto (@NachoSoto)Offering
: improved description (#2912) via NachoSoto (@NachoSoto)Paywalls
: fixedFooterView
color in template 1 (#2951) via NachoSoto (@NachoSoto)Paywalls
: fixedView.scrollableIfNecessary
(#2947) via NachoSoto (@NachoSoto)Paywalls
: improvedIntroEligibilityStateView
to avoid layout changes (#2946) via NachoSoto (@NachoSoto)Paywalls
: updated offerings snapshot with new asset base URL (#2950) via NachoSoto (@NachoSoto)Paywalls
: extractedTemplateBackgroundImageView
(#2945) via NachoSoto (@NachoSoto)Paywalls
: more polish from design feedback (#2932) via NachoSoto (@NachoSoto)Paywalls
: more unit tests for purchasing state (#2931) via NachoSoto (@NachoSoto)Paywalls
: new.onPurchaseCompleted
modifier (#2930) via NachoSoto (@NachoSoto)Paywalls
: fixedLoadingPaywallView
displaying a progress view (#2929) via NachoSoto (@NachoSoto)Paywalls
: added default template toSamplePaywallsList
(#2928) via NachoSoto (@NachoSoto)Paywalls
: added a few more logs (#2927) via NachoSoto (@NachoSoto)Paywalls
added individual previews for templates (#2924) via NachoSoto (@NachoSoto)Paywalls
: improved default paywall configuration (#2926) via NachoSoto (@NachoSoto)Paywalls
: moved purchasing state toPurchaseHandler
(#2923) via NachoSoto (@NachoSoto)Paywalls
: pre-warm intro eligibility in background thread (#2925) via NachoSoto (@NachoSoto) via NachoSoto (@NachoSoto)Paywalls
: improved template accessibility support (#2920) via NachoSoto (@NachoSoto)Paywalls
: some basic polish from design feedback (#2917) via NachoSoto (@NachoSoto)Paywalls
: addedOfferingsList
to preview all paywalls (#2916) via NachoSoto (@NachoSoto)Paywalls
: fixed tappable area for a couple of buttons (#2915) via NachoSoto (@NachoSoto)Paywalls
: newtext1
andtext2
colors (#2903) via NachoSoto (@NachoSoto)Paywalls
: updated multi-package bold template design (#2908) via NachoSoto (@NachoSoto)Paywalls
: added sample paywalls toSimpleApp
(#2907) via NachoSoto (@NachoSoto)Paywalls
: one package with features template (#2902) via NachoSoto (@NachoSoto)Paywalls
: initial support for icons (#2882) via NachoSoto (@NachoSoto)Paywalls
: extracted intro eligibility out of templates (#2901)...
4.26.0-beta.1
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:
- Create a Paywall on the Dashboard for the
Offering
you intend to serve to your customers - Add the
RevenueCatUI
SPM dependency to your project 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)")
}
}
}
List of changes
Paywalls
: fixed template 2 inconsistent spacing (#3091) via NachoSoto (@NachoSoto)Paywalls
: improved test custom paywall (#3089) via NachoSoto (@NachoSoto)Paywalls
: avoid warming up cache multiple times (#3068) via NachoSoto (@NachoSoto)Paywalls
: added all localization (#3080) via NachoSoto (@NachoSoto)Paywalls
: temporarily disablePaywallTemplate.template4
(#3088) via NachoSoto (@NachoSoto)Paywalls
: enabledCatalyst
support (#3087) via NachoSoto (@NachoSoto)Paywalls
: iPad polish (#3061) via NachoSoto (@NachoSoto)Paywalls
: added MIT license to all headers (#3084) via NachoSoto (@NachoSoto)Paywalls
: improved unselected package background color (#3079) via NachoSoto (@NachoSoto)Paywalls
: handle already purchased state (#3046) via NachoSoto (@NachoSoto)Paywalls
: only dismissPaywallView
when explicitly presenting it with.presentPaywallIfNeeded
(#3075) via NachoSoto (@NachoSoto)Paywalls
: add support for generating snapshots on CI (#3055) via NachoSoto (@NachoSoto)Paywalls
: removed unnecessaryPaywallFooterView
(#3064) via NachoSoto (@NachoSoto)Paywalls
: newPaywallFooterView
to replacemodes
(#3051) via Josh Holtz (@joshdholtz)Paywalls
: rename card to footer (#3049) via Josh Holtz (@joshdholtz)Paywalls
: changedtotal_price_and_per_month
to include period (#3044) via NachoSoto (@NachoSoto)Paywalls
: finishediOS 15
support (#3043) via NachoSoto (@NachoSoto)Paywalls
: validatePaywallData
to ensure displayed data is always correct (#3019) via NachoSoto (@NachoSoto)Paywalls
: fixedtotal_price_and_per_month
for custom monthly packages (#3027) via NachoSoto (@NachoSoto)Paywalls
: tweaking colors on template 2&3 (#3011) via NachoSoto (@NachoSoto)Paywalls
: changed snapshots to scale 1 (#3016) via NachoSoto (@NachoSoto)Paywalls
: replaceddefaultLocale
withpreferredLocales
(#3003) via NachoSoto (@NachoSoto)Paywalls
: improvedPaywallDisplayMode.condensedCard
layout (#3001) via NachoSoto (@NachoSoto)Paywalls
:.card
and.condensedCard
modes (#2995) via NachoSoto (@NachoSoto)Paywalls
: prevent multiple concurrent purchases (#2991) via NachoSoto (@NachoSoto)Paywalls
: improved variable warning (#2984) via NachoSoto (@NachoSoto)Paywalls
: fixed horizontal padding on template 1 (#2987) via NachoSoto (@NachoSoto)Paywalls
: changedFooterView
to always usetext1
color (#2992) via NachoSoto (@NachoSoto)Paywalls
: retry test failures (#2985) via NachoSoto (@NachoSoto)Paywalls
: send presentedPaywallViewMode
with purchases (#2859) via NachoSoto (@NachoSoto)Paywalls
: added support for custom fonts (#2988) via NachoSoto (@NachoSoto)Paywalls
: improved template 2 unselected packages (#2982) via NachoSoto (@NachoSoto)Paywalls
: fix template 2 selected text offer details color (#2975) via Josh Holtz (@joshdholtz)Paywalls
: warm-up image cache (#2978) via NachoSoto (@NachoSoto)Paywalls
: extractedPaywallCacheWarming
(#2977) via NachoSoto (@NachoSoto)Paywalls
: fixed color in template 3 (#2980) via NachoSoto (@NachoSoto)Paywalls
: improved default template (#2973) via NachoSoto (@NachoSoto)Paywalls
: added links to documentation (#2974) via NachoSoto (@NachoSoto)Paywalls
: updated template names (#2971) via NachoSoto (@NachoSoto)Paywalls
: updated variable names (#2970) via NachoSoto (@NachoSoto)Paywalls
: added JSON debug screen todebugRevenueCatOverlay
(#2972) via NachoSoto (@NachoSoto)Paywalls
: multi-package horizontal template (#2949) via NachoSoto (@NachoSoto)Paywalls
: fixed template 3 icon aspect ratio (#2969) via NachoSoto (@NachoSoto)Paywalls
: iOS 17 tests on CI (#2955) via NachoSoto (@NachoSoto)Paywalls
: deploydebug
sample app (#2966) via NachoSoto (@NachoSoto)Paywalls
: sort offerings list in sample app (#2965) via NachoSoto (@NachoSoto)Paywalls
: initial iOS 15 support (#2933) via NachoSoto (@NachoSoto)Paywalls
: changed defaultPaywallData
to display available packages (#2964) via NachoSoto (@NachoSoto)Paywalls
: changedofferDetails
to be optional (#2963) via NachoSoto (@NachoSoto)Paywalls
: markdown support (#2961) via NachoSoto (@NachoSoto)Paywalls
: updated icon set to match frontend (#2962) via NachoSoto (@NachoSoto)Paywalls
: added support forPackageType.custom
(#2959) via NachoSoto (@NachoSoto)Paywalls
: fixedtvOS
compilation by making it explicitly unavailable (#2956) via NachoSoto (@NachoSoto)Paywalls
: fix crash when computing localization with duplicate packages (#2958) via NachoSoto (@NachoSoto)Paywalls
: UIKitPaywallViewController
(#2934) via NachoSoto (@NachoSoto)Paywalls
:presentPaywallIfNecessary
->presentPaywallIfNeeded
(#2953) via NachoSoto (@NachoSoto)Paywalls
: added support for custom and lifetime products (#2941) via NachoSoto (@NachoSoto)Paywalls
: changedSamplePaywallsList
to work offline (#2937) via NachoSoto (@NachoSoto)Paywalls
: fixed header image mask on first template (#2936) via NachoSoto (@NachoSoto)Paywalls
: removedmode
parameter frompresentPaywallIfNecessary
(#2940) via NachoSoto (@NachoSoto)Paywalls
: improvedRemoteImage
error layout (#2939) via NachoSoto (@NachoSoto)Paywalls
: added default close button when usingpresentPaywallIfNecessary
(#2935) via NachoSoto (@NachoSoto)Paywalls
: added ability to preview templates in a.sheet
(#2938) via NachoSoto (@NachoSoto)Paywalls
: avoid recomputing variableRegex
(#2944) via NachoSoto (@NachoSoto)Paywalls
: improvedFooterView
scaling (#2948) via NachoSoto (@NachoSoto)Paywalls
: added ability to calculate and localize subscription discounts (#2943) via NachoSoto (@NachoSoto)Offering
: improved description (#2912) via NachoSoto (@NachoSoto)Paywalls
: fixedFooterView
color in template 1 (#2951) via NachoSoto (@NachoSoto)Paywalls
: fixedView.scrollableIfNecessary
(#2947) via NachoSoto (@NachoSoto)Paywalls
: improvedIntroEligibilityStateView
to avoid layout changes (#2946) via NachoSoto (@NachoSoto)Paywalls
: updated offerings snapshot with new asset base URL (#2950) via NachoSoto (@NachoSoto)Paywalls
: extractedTemplateBackgroundImageView
(#2945) via NachoSoto (@NachoSoto)Paywalls
: more polish from design feedback (#2932) via NachoSoto (@NachoSoto)Paywalls
: more unit tests for purchasing state (#2931) via NachoSoto (@NachoSoto)Paywalls
: new.onPurchaseCompleted
modifier (#2930) via NachoSoto (@NachoSoto)Paywalls
: fixedLoadingPaywallView
displaying a progress view (#2929) via NachoSoto (@NachoSoto)Paywalls
: added default template toSamplePaywallsList
(#2928) via NachoSoto (@NachoSoto)Paywalls
: added a few more logs (#2927) via NachoSoto (@NachoSoto)Paywalls
added individual previews for templates (#2924) via NachoSoto (@NachoSoto)Paywalls
: improved default paywall configuration (#2926) via NachoSoto (@NachoSoto)Paywalls
: moved purchasing state toPurchaseHandler
(#2923) via NachoSoto (@NachoSoto)Paywalls
: pre-warm intro eligibility in background thread (#2925) via NachoSoto (@NachoSoto) via NachoSoto (@NachoSoto)Paywalls
: improved template accessibility support (#2920) via NachoSoto (@NachoSoto)Paywalls
: some basic polish from design feedback (#2917) via NachoSoto (@NachoSoto)Paywalls
: addedOfferingsList
to preview all paywalls (#2916) via NachoSoto (@NachoSoto)Paywalls
: fixed tappable area for a couple of buttons (#2915) via NachoSoto (@NachoSoto)Paywalls
: newtext1
andtext2
colors (#2903) via NachoSoto (@NachoSoto)Paywalls
: updated multi-package bold template design (#2908) via NachoSoto (@NachoSoto)Paywalls
: added sample paywalls toSimpleApp
(#2907) via NachoSoto (@NachoSoto)Paywalls
: one package with features template (#2902) via NachoSoto (@NachoSoto)Paywalls
: initial support for icons (#2882) via NachoSoto (@NachoSoto)Paywalls
: extracted intro eligibility out of templates (#2901) via NachoSoto (@NachoSoto)Paywalls
: changedsubtitle
to be optional (#2900) via NachoSoto (@NachoSoto)Paywalls
: added "features" toLocalizedConfiguration
(#2899) via NachoSoto (@NachoSoto)Paywalls
: fixed{{ total_price_and_per_month }}
(#2881) via NachoSoto (@NachoSoto)Paywalls
: updated template names (#2878) via NachoSoto (@NachoSoto)Paywalls
: added accent colors (#2883) via NachoSoto (@NachoSoto)Paywalls
: changed images representation to an object (#2875) via NachoSoto (@NachoSoto)Paywalls
: addedofferName
parameter (#2877) via NachoSoto (@NachoSoto)Paywalls
: new{{ period }}
variable (#2876) via NachoSoto (@NachoSoto)- `...
4.25.8
Dependency Updates
- Bump fastlane-plugin-revenuecat_internal from
b2108fb
toa297205
(#3106) via dependabot[bot] (@dependabot[bot]) - Bump activesupport from 7.0.4.3 to 7.0.7.2 in /Tests/InstallationTests/CocoapodsInstallation (#3071) via dependabot[bot] (@dependabot[bot])
- Bump activesupport from 7.0.4.3 to 7.0.7.2 (#3070) via dependabot[bot] (@dependabot[bot])
Other Changes
Integration Tests
: fixed another flaky test (#3111) via NachoSoto (@NachoSoto)CustomEntitlementComputation
: enablerestorePurchases
in public API (#3090) via NachoSoto (@NachoSoto)CustomerInfo
: addVerificationResult
todescription
(#3081) via NachoSoto (@NachoSoto)Integration Tests
: fixed race condition in flaky test (#3086) via NachoSoto (@NachoSoto)
4.25.7
Other Changes
Integration Tests
: test thatcheckTrialOrIntroDiscountEligibility
makes no API requests (#3054) via NachoSoto (@NachoSoto)visionOS
: changed CI job to Release (#3042) via NachoSoto (@NachoSoto)StoreKit 2
: added warning to paywall constructors (#3045) via NachoSoto (@NachoSoto)README
: addedvisionOS
to list of supported platforms (#3052) via NachoSoto (@NachoSoto)Tests
: added tests forClockType
(#3029) via NachoSoto (@NachoSoto)HTTPClient
: also parse errors withapplication/json;charset=utf8
(#3041) via NachoSoto (@NachoSoto)
4.25.6
4.25.5
Bugfixes
PurchasesOrchestrator
: fixed callback not invoked regression during downgrades (#3028) via NachoSoto (@NachoSoto)TransactionPoster
: don't finish transactions for non-subscriptions if they're not processed (#2841) via NachoSoto (@NachoSoto)
Performance Improvements
StoreKit 2
: only listen toStoreKit.Transaction.updates
when SK2 is enabled (#3032) via NachoSoto (@NachoSoto)CustomerInfoManager
: post transactions in parallel to POST receipts only once (#2954) via NachoSoto (@NachoSoto)
Other Changes
PostedTransactionCache
: remove implementation (#3030) via NachoSoto (@NachoSoto)Integration Tests
: improvedtestCanPurchaseMultipleSubscriptions
(#3025) via NachoSoto (@NachoSoto)GitHub
: improvedISSUE_TEMPLATE
(#3022) via NachoSoto (@NachoSoto)TransactionPoster
: added transaction ID and Date to log (#3026) via NachoSoto (@NachoSoto)TransactionPoster
: fix iOS 12 test (#3018) via NachoSoto (@NachoSoto)SystemInfo
: addedClockType
(#3014) via NachoSoto (@NachoSoto)Integration Tests
: begin tests withUIApplication.willEnterForegroundNotification
to simulate a real app (#3015) via NachoSoto (@NachoSoto)Integration Tests
: add tests to verifyCustomerInfo
+Offerings
request de-dupping (#3013) via NachoSoto (@NachoSoto)SwiftLint
: disableunneeded_synthesized_initializer
(#3010) via NachoSoto (@NachoSoto)- Added
internal
NonSubscriptionTransaction.storeTransactionIdentifier
(#3009) via NachoSoto (@NachoSoto) Integration Tests
: added tests for non-renewing and non-consumable packages (#3008) via NachoSoto (@NachoSoto)- Expanded
EnsureNonEmptyArrayDecodable
toEnsureNonEmptyCollectionDecodable
(#3002) via NachoSoto (@NachoSoto)
4.25.4
This release is compatible with Xcode 15 beta 6 and visionOS beta 3
Bugfixes
Xcode 15
: fix non-visionOS
build by replacing.custom
platform (#3005) via NachoSoto (@NachoSoto)
Other Changes
Integration Tests
: test forSignatureVerificationMode.informational
and receipt posting when fetchingCustomerInfo
(#3000) via NachoSoto (@NachoSoto)Custom Entitlement Computation
: fixedvisionOS
build (#2999) via NachoSoto (@NachoSoto)HTTPClient
: extractedHTTPRequestPath
protocol (#2986) via NachoSoto (@NachoSoto)CI
: addvisionOS
build (#2990) via NachoSoto (@NachoSoto)
4.25.3
This release is compatible with Xcode 15 beta 6 and visionOS beta 3
Bugfixes
visionOS
: support forXcode 15 beta 6
(#2989) via NachoSoto (@NachoSoto)CachingProductsManager
: avoid crash when caching different products with same identifier (#2979) via NachoSoto (@NachoSoto)PurchasesOrchestrator
: disambiguate transactions from the queue (#2890) via NachoSoto (@NachoSoto)
Performance Improvements
StoreKit2TransactionListener
: handle transactions asynchronously (#2910) via NachoSoto (@NachoSoto)
Other Changes
Atomic
: avoid race conditions modifying dictionaries (#2981) via NachoSoto (@NachoSoto)Logging
: avoid logging "updating offerings" when request is cached (#2904) via NachoSoto (@NachoSoto)StoreKit2TransactionListener
: converted into anactor
(#2909) via NachoSoto (@NachoSoto)Integration Tests
: added more observer mode tests (#2905) via NachoSoto (@NachoSoto)- Created
PostedTransactionCache
(#2911) via NachoSoto (@NachoSoto) IntroEligibility
: changed products toSet<String>
(#2976) via NachoSoto (@NachoSoto)AdServices
: RenamepostAdServicesTokenIfNeeded()
topostAdServicesTokenOncePerInstallIfNeeded()
(#2968) via Josh Holtz (@joshdholtz)SK1StoreProduct
: changedproductType
warning to debug (#2957) via NachoSoto (@NachoSoto)PrivacyInfo.xcprivacy
: addedUserDefaults
to access API types (#2913) via NachoSoto (@NachoSoto)Integration Tests
: new test to verify that SK1 purchases don't leave SK2 unfinished transactions (#2906) via NachoSoto (@NachoSoto)Logging
: log entire cache key with verbose logs (#2888) via NachoSoto (@NachoSoto)StoreProduct
: added test covering warning log (#2897) via NachoSoto (@NachoSoto)CustomEntitlementComputation
: use custom API key (#2879) via Toni Rico (@tonidero)CachingProductsManager
: removed duplicate log and added tests (#2898) via NachoSoto (@NachoSoto)Xcode 15 beta 5
: fixed test compilation (#2885) via NachoSoto (@NachoSoto)