In-app purchases and subscriptions made easy. Support for iOS, watchOS, tvOS, macOS, and visionOS.
MIT License
Bot releases are visible (Hide)
Published by RCGitBot 12 months ago
PaywallColor
: change visibility of Color.init(light:dark:)
to private
(#3345) via NachoSoto (@NachoSoto)Paywalls
: new .onPurchaseCompleted
overload with StoreTransaction
(#3323) via NachoSoto (@NachoSoto)Paywalls
: finished template 5 (#3340) via NachoSoto (@NachoSoto)Paywalls
: new onDismiss
parameter for presentPaywallIfNeeded
(#3342) via NachoSoto (@NachoSoto)Paywalls
: disable shimmering on footer loading view (#3324) via NachoSoto (@NachoSoto)ErrorUtils.purchasesError(withSKError:)
: handle URLError
s (#3346) via NachoSoto (@NachoSoto)Paywalls
: add identifier to events (#3332) via Josh Holtz (@joshdholtz)Paywalls
: create new event session when paywall appears (#3330) via Josh Holtz (@joshdholtz)HTTPClient
: verbose logs for request IDs (#3320) via NachoSoto (@NachoSoto)Paywalls Tester
: fix macOS
build (#3341) via NachoSoto (@NachoSoto)ProductFetcherSK1
: enable TimingUtil
log (#3327) via NachoSoto (@NachoSoto)Paywall Tester
: fixed paywall presentation (#3339) via NachoSoto (@NachoSoto)CI
: replace Carthage build jobs with xcodebuild
(#3338) via NachoSoto (@NachoSoto)Integration Tests
: use repetition count from test plan (#3329) via NachoSoto (@NachoSoto)Integration Tests
: new logs for troubleshooting flaky tests (#3328) via NachoSoto (@NachoSoto)CircleCI
: change iOS 17 job to use M1 Large resource (#3322) via NachoSoto (@NachoSoto)Paywalls Tester
: fix release build (#3321) via NachoSoto (@NachoSoto)Paywalls
: enable all iOS 17 tests (#3331) via NachoSoto (@NachoSoto)CI
: added workaround for Snapshots in Xcode Cloud
(#2857) via NachoSoto (@NachoSoto)StoreKit 1
: disabled finishTransactions
log on observer mode (#3314) via NachoSoto (@NachoSoto)Published by RCGitBot about 1 year ago
PaywallEventStore
: also remove legacy revenuecat
documents directory (#3317) via NachoSoto (@NachoSoto)CI
: run all iOS 17 tests (#3312) via NachoSoto (@NachoSoto)StoreKit 2
: Optionally send JWS tokens instead of receipts to the backend (#3227) via Mark Villacampa (@MarkVillacampa)CircleCI
: update simulators for Xcode 15.0.1 (#3311) via NachoSoto (@NachoSoto)StoreKit 1
: improved debug log for finishTransactions
invoked outside the SDK (#3300) via NachoSoto (@NachoSoto)Debug View
: display receipt status (#3303) via NachoSoto (@NachoSoto)Published by RCGitBot about 1 year ago
Purchases
: new cachedCustomerInfo
and cachedOfferings
(#3274) via NachoSoto (@NachoSoto)productPlanIdentifier
in EntitlementInfo
(#3290) via Toni Rico (@tonidero)Paywalls
: localize default template (#3295) via NachoSoto (@NachoSoto)Paywalls
: created ConsistentPackageContentView
to improve package change transitions (#3246) via NachoSoto (@NachoSoto)Paywalls
: visionOS
support (#3293) via NachoSoto (@NachoSoto)Paywalls
: avoid flickering when displaying paywalls with available cache (#3283) via NachoSoto (@NachoSoto)PaywallEventStore
: changed container to use URL.applicationSupportDirectory
(#3289) via NachoSoto (@NachoSoto)CI
: change visionOS
build to environment with xrOS
SDK (#3294) via NachoSoto (@NachoSoto)Paywalls
: extracted common TemplateViewType
method for previews (#3292) via NachoSoto (@NachoSoto)Tests
: improved flaky test (#3282) via NachoSoto (@NachoSoto)Published by RCGitBot about 1 year ago
Paywalls
: improved purchase-in-progress UI (#3279) via NachoSoto (@NachoSoto)SK2StoreProduct.priceFormatter
: use locale from StoreKit.Product
(#3278) via NachoSoto (@NachoSoto)AAAttribution.attributionToken
: avoid using on main thread (#3281) via NachoSoto (@NachoSoto)Paywalls Tester
: group live paywalls by template (#3276) via NachoSoto (@NachoSoto)Published by RCGitBot about 1 year ago
Paywalls
: added shimmer effect to LoadingPaywallView
(#3267) via NachoSoto (@NachoSoto)Paywalls
: fixed macOS
compilation (#3272) via NachoSoto (@NachoSoto)SwiftLint
(#3273) via NachoSoto (@NachoSoto)Paywalls
: simplified LoadingPaywallView
(#3265) via NachoSoto (@NachoSoto)Published by RCGitBot about 1 year ago
Attribution.setOnesignalUserID
(#3268) via Raquel Diez (@Raquel10-RevenueCat)Paywalls
: small PaywallsTester refactor (#3261) via NachoSoto (@NachoSoto)Published by RCGitBot about 1 year ago
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)Paywalls
: added previews for IntroEligibilityStateView
(#3248) via NachoSoto (@NachoSoto)debugRevenueCatOverlay
: added list of active entitlements (#3247) via NachoSoto (@NachoSoto)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)Published by RCGitBot about 1 year ago
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 .condensedFooter
s (#3230) via NachoSoto (@NachoSoto)Paywalls
: improved footerView
to use .continuous
rounded corners (#3222) via NachoSoto (@NachoSoto)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)Published by RCGitBot about 1 year ago
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:
Offering
you intend to serve to your customersRevenueCatUI
SPM dependency to your projectimport 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.
Debug
: add Offering
metadata to debug screen (#3137) via NachoSoto (@NachoSoto)TestStoreProduct
: new locale
parameter (#3134) via NachoSoto (@NachoSoto)Integration Tests
: fixed more flaky failures (#3218) via NachoSoto (@NachoSoto)Published by RCGitBot about 1 year ago
OperationDispatcher
: add support for "long" delays (#3168) via NachoSoto (@NachoSoto)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)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)Published by RCGitBot about 1 year ago
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:
Offering
you intend to serve to your customersRevenueCatUI
SPM dependency to your projectimport 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)")
}
)
}
}
Published by RCGitBot about 1 year ago
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:
Offering
you intend to serve to your customersRevenueCatUI
SPM dependency to your projectimport 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)")
}
}
}
Published by RCGitBot about 1 year ago
DebugViewModel
: fixed runtime crash on iOS < 16 (#3139) via NachoSoto (@NachoSoto)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)SPM
: update Package.resolved
(#3130) via NachoSoto (@NachoSoto)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)Published by RCGitBot about 1 year ago
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:
Offering
you intend to serve to your customersRevenueCatUI
SPM dependency to your projectimport 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)")
}
}
}
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 for Carthage
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 with gitignore
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
: removed presentedPaywallViewMode
(#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 disable PaywallTemplate.template4
(#3088) via NachoSoto (@NachoSoto)Paywalls
: enabled Catalyst
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 dismiss PaywallView
when explicitly presenting it with .presentPaywallIfNeeded
(#3075) via NachoSoto (@NachoSoto)Paywalls
: add support for generating snapshots on CI (#3055) via NachoSoto (@NachoSoto)Paywalls
: removed unnecessary PaywallFooterView
(#3064) via NachoSoto (@NachoSoto)Paywalls
: new PaywallFooterView
to replace modes
(#3051) via Josh Holtz (@joshdholtz)Paywalls
: rename card to footer (#3049) via Josh Holtz (@joshdholtz)Paywalls
: changed total_price_and_per_month
to include period (#3044) via NachoSoto (@NachoSoto)Paywalls
: finished iOS 15
support (#3043) via NachoSoto (@NachoSoto)Paywalls
: validate PaywallData
to ensure displayed data is always correct (#3019) via NachoSoto (@NachoSoto)Paywalls
: fixed total_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
: replaced defaultLocale
with preferredLocales
(#3003) via NachoSoto (@NachoSoto)Paywalls
: improved PaywallDisplayMode.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
: changed FooterView
to always use text1
color (#2992) via NachoSoto (@NachoSoto)Paywalls
: retry test failures (#2985) via NachoSoto (@NachoSoto)Paywalls
: send presented PaywallViewMode
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
: extracted PaywallCacheWarming
(#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 to debugRevenueCatOverlay
(#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
: deploy debug
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 default PaywallData
to display available packages (#2964) via NachoSoto (@NachoSoto)Paywalls
: changed offerDetails
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 for PackageType.custom
(#2959) via NachoSoto (@NachoSoto)Paywalls
: fixed tvOS
compilation by making it explicitly unavailable (#2956) via NachoSoto (@NachoSoto)Paywalls
: fix crash when computing localization with duplicate packages (#2958) via NachoSoto (@NachoSoto)Paywalls
: UIKit PaywallViewController
(#2934) via NachoSoto (@NachoSoto)Paywalls
: presentPaywallIfNecessary
-> presentPaywallIfNeeded
(#2953) via NachoSoto (@NachoSoto)Paywalls
: added support for custom and lifetime products (#2941) via NachoSoto (@NachoSoto)Paywalls
: changed SamplePaywallsList
to work offline (#2937) via NachoSoto (@NachoSoto)Paywalls
: fixed header image mask on first template (#2936) via NachoSoto (@NachoSoto)Paywalls
: removed mode
parameter from presentPaywallIfNecessary
(#2940) via NachoSoto (@NachoSoto)Paywalls
: improved RemoteImage
error layout (#2939) via NachoSoto (@NachoSoto)Paywalls
: added default close button when using presentPaywallIfNecessary
(#2935) via NachoSoto (@NachoSoto)Paywalls
: added ability to preview templates in a .sheet
(#2938) via NachoSoto (@NachoSoto)Paywalls
: avoid recomputing variable Regex
(#2944) via NachoSoto (@NachoSoto)Paywalls
: improved FooterView
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
: fixed FooterView
color in template 1 (#2951) via NachoSoto (@NachoSoto)Paywalls
: fixed View.scrollableIfNecessary
(#2947) via NachoSoto (@NachoSoto)Paywalls
: improved IntroEligibilityStateView
to avoid layout changes (#2946) via NachoSoto (@NachoSoto)Paywalls
: updated offerings snapshot with new asset base URL (#2950) via NachoSoto (@NachoSoto)Paywalls
: extracted TemplateBackgroundImageView
(#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
: fixed LoadingPaywallView
displaying a progress view (#2929) via NachoSoto (@NachoSoto)Paywalls
: added default template to SamplePaywallsList
(#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 to PurchaseHandler
(#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
: added OfferingsList
to preview all paywalls (#2916) via NachoSoto (@NachoSoto)Paywalls
: fixed tappable area for a couple of buttons (#2915) via NachoSoto (@NachoSoto)Paywalls
: new text1
and text2
colors (#2903) via NachoSoto (@NachoSoto)Paywalls
: updated multi-package bold template design (#2908) via NachoSoto (@NachoSoto)Paywalls
: added sample paywalls to SimpleApp
(#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
: changed subtitle
to be optional (#2900) via NachoSoto (@NachoSoto)Paywalls
: added "features" to LocalizedConfiguration
(#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
: added offerName
parameter (#2877) via NachoSoto (@NachoSoto)Paywalls
: new {{ period }}
variable (#2876) via NachoSoto (@NachoSoto)Paywalls
: disabled PaywallViewMode
s for now (#2874) via NachoSoto (@NachoSoto)Paywalls
: added new defaultPackage
configuration (#2871) via NachoSoto (@NachoSoto)Paywalls
: fixed tests on CI (#2872) via NachoSoto (@NachoSoto)Paywalls
: pre-fetch intro eligibility for paywalls (#2860) via NachoSoto (@NachoSoto)Paywalls
: clean up the error view (#2873) via Andy Boedo (@aboedo)Paywalls
: new API for easily displaying PaywallView
with just one line (#2869) via NachoSoto (@NachoSoto)Paywalls
: handle missing paywalls gracefully (#2855) via NachoSoto (@NachoSoto)Paywalls
: temporarily disable non-fullscreen PaywallView
s (#2868) via NachoSoto (@NachoSoto)Paywalls
: added test to ensure package selection maintains order (#2853) via NachoSoto (@NachoSoto)Paywalls
: added new blurredBackgroundImage
configuration (#2852) via NachoSoto (@NachoSoto)Paywalls
: fuzzy Locale
lookups (#2847) via NachoSoto (@NachoSoto)Paywalls
: basic localization support (#2851) via NachoSoto (@NachoSoto)Paywalls
: added FooterView
(#2850 via NachoSoto (@NachoSoto)Paywalls
: multi-package template (#2840) via NachoSoto (@NachoSoto)Paywalls
: disable animations during unit tests (#2848) via NachoSoto (@NachoSoto)Paywalls
: TrialOrIntroEligibilityChecker.eligibility(for packages:)
(#2846) via NachoSoto (@NachoSoto)Paywalls
: added new total_price_and_per_month
variable (#2845) via NachoSoto (@NachoSoto)Paywalls
: extracted PurchaseButton
(#2839) via NachoSoto (@NachoSoto)Paywalls
: extracted IntroEligibilityStateView
(#2837) via NachoSoto (@NachoSoto)Paywalls
: support for multiple PaywallViewMode
s (#2834) via NachoSoto (@NachoSoto)Paywalls
: add support for multiple images in template configuration (#2832) via NachoSoto (@NachoSoto)Paywalls
: extracted configuration processing into a new TemplateViewConfiguration
(#2830) via NachoSoto (@NachoSoto)Paywalls
: disable macOS
/macCatalyst
/watchOS
for now (#2821) via NachoSoto (@NachoSoto)Paywalls
: using new color information in template (#2823) via NachoSoto (@NachoSoto)Paywalls
: set up CI tests and API Tester (#2816) via NachoSoto (@NachoSoto)Paywalls
: added support for decoding colors (#2822) via NachoSoto (@NachoSoto)Paywalls
: ignore empty strings in LocalizedConfiguration
(#2818) via NachoSoto (@NachoSoto)Paywalls
: updated PaywallData
field names (#2817) via NachoSoto (@NachoSoto)Paywalls
: added support for purchasing (#2812) via NachoSoto (@NachoSoto)Paywalls
: added tests for PackageType
filtering (#2810) via NachoSoto (@NachoSoto)Paywalls
: changed variable handling to use Swift Regex
(#2811) via Andy Boedo (@aboedo)Paywalls
: added price
variable (#2809) via NachoSoto (@NachoSoto)Paywalls
: determine intro eligibility (#2808) via NachoSoto (@NachoSoto)Paywalls
: added header image to configuration (#2800) via NachoSoto (@NachoSoto)Paywalls
: added packages
to configuration (#2798) via NachoSoto (@NachoSoto)Paywalls
: add support for displaying StoreProductDiscount
s (#2796) via NachoSoto (@NachoSoto)Paywalls
: added support for variables (#2793) via NachoSoto (@NachoSoto)Paywalls
: using PaywallData
and setting up basic template loading (#2781) via NachoSoto (@NachoSoto)Paywalls
: initial configuration types (#2780) via NachoSoto (@NachoSoto)Paywalls
: initial RevenueCatUI
target setup (#2776) via NachoSoto (@NachoSoto)Published by RCGitBot about 1 year ago
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:
Offering
you intend to serve to your customersRevenueCatUI
SPM dependency to your projectimport 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)")
}
}
}
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 disable PaywallTemplate.template4
(#3088) via NachoSoto (@NachoSoto)Paywalls
: enabled Catalyst
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 dismiss PaywallView
when explicitly presenting it with .presentPaywallIfNeeded
(#3075) via NachoSoto (@NachoSoto)Paywalls
: add support for generating snapshots on CI (#3055) via NachoSoto (@NachoSoto)Paywalls
: removed unnecessary PaywallFooterView
(#3064) via NachoSoto (@NachoSoto)Paywalls
: new PaywallFooterView
to replace modes
(#3051) via Josh Holtz (@joshdholtz)Paywalls
: rename card to footer (#3049) via Josh Holtz (@joshdholtz)Paywalls
: changed total_price_and_per_month
to include period (#3044) via NachoSoto (@NachoSoto)Paywalls
: finished iOS 15
support (#3043) via NachoSoto (@NachoSoto)Paywalls
: validate PaywallData
to ensure displayed data is always correct (#3019) via NachoSoto (@NachoSoto)Paywalls
: fixed total_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
: replaced defaultLocale
with preferredLocales
(#3003) via NachoSoto (@NachoSoto)Paywalls
: improved PaywallDisplayMode.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
: changed FooterView
to always use text1
color (#2992) via NachoSoto (@NachoSoto)Paywalls
: retry test failures (#2985) via NachoSoto (@NachoSoto)Paywalls
: send presented PaywallViewMode
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
: extracted PaywallCacheWarming
(#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 to debugRevenueCatOverlay
(#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
: deploy debug
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 default PaywallData
to display available packages (#2964) via NachoSoto (@NachoSoto)Paywalls
: changed offerDetails
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 for PackageType.custom
(#2959) via NachoSoto (@NachoSoto)Paywalls
: fixed tvOS
compilation by making it explicitly unavailable (#2956) via NachoSoto (@NachoSoto)Paywalls
: fix crash when computing localization with duplicate packages (#2958) via NachoSoto (@NachoSoto)Paywalls
: UIKit PaywallViewController
(#2934) via NachoSoto (@NachoSoto)Paywalls
: presentPaywallIfNecessary
-> presentPaywallIfNeeded
(#2953) via NachoSoto (@NachoSoto)Paywalls
: added support for custom and lifetime products (#2941) via NachoSoto (@NachoSoto)Paywalls
: changed SamplePaywallsList
to work offline (#2937) via NachoSoto (@NachoSoto)Paywalls
: fixed header image mask on first template (#2936) via NachoSoto (@NachoSoto)Paywalls
: removed mode
parameter from presentPaywallIfNecessary
(#2940) via NachoSoto (@NachoSoto)Paywalls
: improved RemoteImage
error layout (#2939) via NachoSoto (@NachoSoto)Paywalls
: added default close button when using presentPaywallIfNecessary
(#2935) via NachoSoto (@NachoSoto)Paywalls
: added ability to preview templates in a .sheet
(#2938) via NachoSoto (@NachoSoto)Paywalls
: avoid recomputing variable Regex
(#2944) via NachoSoto (@NachoSoto)Paywalls
: improved FooterView
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
: fixed FooterView
color in template 1 (#2951) via NachoSoto (@NachoSoto)Paywalls
: fixed View.scrollableIfNecessary
(#2947) via NachoSoto (@NachoSoto)Paywalls
: improved IntroEligibilityStateView
to avoid layout changes (#2946) via NachoSoto (@NachoSoto)Paywalls
: updated offerings snapshot with new asset base URL (#2950) via NachoSoto (@NachoSoto)Paywalls
: extracted TemplateBackgroundImageView
(#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
: fixed LoadingPaywallView
displaying a progress view (#2929) via NachoSoto (@NachoSoto)Paywalls
: added default template to SamplePaywallsList
(#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 to PurchaseHandler
(#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
: added OfferingsList
to preview all paywalls (#2916) via NachoSoto (@NachoSoto)Paywalls
: fixed tappable area for a couple of buttons (#2915) via NachoSoto (@NachoSoto)Paywalls
: new text1
and text2
colors (#2903) via NachoSoto (@NachoSoto)Paywalls
: updated multi-package bold template design (#2908) via NachoSoto (@NachoSoto)Paywalls
: added sample paywalls to SimpleApp
(#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
: changed subtitle
to be optional (#2900) via NachoSoto (@NachoSoto)Paywalls
: added "features" to LocalizedConfiguration
(#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
: added offerName
parameter (#2877) via NachoSoto (@NachoSoto)Paywalls
: new {{ period }}
variable (#2876) via NachoSoto (@NachoSoto)Paywalls
: disabled PaywallViewMode
s for now (#2874) via NachoSoto (@NachoSoto)Paywalls
: added new defaultPackage
configuration (#2871) via NachoSoto (@NachoSoto)Paywalls
: fixed tests on CI (#2872) via NachoSoto (@NachoSoto)Paywalls
: pre-fetch intro eligibility for paywalls (#2860) via NachoSoto (@NachoSoto)Paywalls
: clean up the error view (#2873) via Andy Boedo (@aboedo)Paywalls
: new API for easily displaying PaywallView
with just one line (#2869) via NachoSoto (@NachoSoto)Paywalls
: handle missing paywalls gracefully (#2855) via NachoSoto (@NachoSoto)Paywalls
: temporarily disable non-fullscreen PaywallView
s (#2868) via NachoSoto (@NachoSoto)Paywalls
: added test to ensure package selection maintains order (#2853) via NachoSoto (@NachoSoto)Paywalls
: added new blurredBackgroundImage
configuration (#2852) via NachoSoto (@NachoSoto)Paywalls
: fuzzy Locale
lookups (#2847) via NachoSoto (@NachoSoto)Paywalls
: basic localization support (#2851) via NachoSoto (@NachoSoto)Paywalls
: added FooterView
(#2850 via NachoSoto (@NachoSoto)Paywalls
: multi-package template (#2840) via NachoSoto (@NachoSoto)Paywalls
: disable animations during unit tests (#2848) via NachoSoto (@NachoSoto)Paywalls
: TrialOrIntroEligibilityChecker.eligibility(for packages:)
(#2846) via NachoSoto (@NachoSoto)Paywalls
: added new total_price_and_per_month
variable (#2845) via NachoSoto (@NachoSoto)Paywalls
: extracted PurchaseButton
(#2839) via NachoSoto (@NachoSoto)Paywalls
: extracted IntroEligibilityStateView
(#2837) via NachoSoto (@NachoSoto)Paywalls
: support for multiple PaywallViewMode
s (#2834) via NachoSoto (@NachoSoto)Paywalls
: add support for multiple images in template configuration (#2832) via NachoSoto (@NachoSoto)Paywalls
: extracted configuration processing into a new TemplateViewConfiguration
(#2830) via NachoSoto (@NachoSoto)Paywalls
: disable macOS
/macCatalyst
/watchOS
for now (#2821) via NachoSoto (@NachoSoto)Paywalls
: using new color information in template (#2823) via NachoSoto (@NachoSoto)Paywalls
: set up CI tests and API Tester (#2816) via NachoSoto (@NachoSoto)Paywalls
: added support for decoding colors (#2822) via NachoSoto (@NachoSoto)Paywalls
: ignore empty strings in LocalizedConfiguration
(#2818) via NachoSoto (@NachoSoto)Paywalls
: updated PaywallData
field names (#2817) via NachoSoto (@NachoSoto)Paywalls
: added support for purchasing (#2812) via NachoSoto (@NachoSoto)Paywalls
: added tests for PackageType
filtering (#2810) via NachoSoto (@NachoSoto)Paywalls
: changed variable handling to use Swift Regex
(#2811) via Andy Boedo (@aboedo)Paywalls
: added price
variable (#2809) via NachoSoto (@NachoSoto)Paywalls
: determine intro eligibility (#2808) via NachoSoto (@NachoSoto)Paywalls
: added header image to configuration (#2800) via NachoSoto (@NachoSoto)Paywalls
: added packages
to configuration (#2798) via NachoSoto (@NachoSoto)Paywalls
: add support for displaying StoreProductDiscount
s (#2796) via NachoSoto (@NachoSoto)Paywalls
: added support for variables (#2793) via NachoSoto (@NachoSoto)Paywalls
: using PaywallData
and setting up basic template loading (#2781) via NachoSoto (@NachoSoto)Paywalls
: initial configuration types (#2780) via NachoSoto (@NachoSoto)Paywalls
: initial RevenueCatUI
target setup (#2776) via NachoSoto (@NachoSoto)Published by RCGitBot about 1 year ago
b2108fb
to a297205
(#3106) via dependabot[bot] (@dependabot[bot])Integration Tests
: fixed another flaky test (#3111) via NachoSoto (@NachoSoto)CustomEntitlementComputation
: enable restorePurchases
in public API (#3090) via NachoSoto (@NachoSoto)CustomerInfo
: add VerificationResult
to description
(#3081) via NachoSoto (@NachoSoto)Integration Tests
: fixed race condition in flaky test (#3086) via NachoSoto (@NachoSoto)Published by RCGitBot about 1 year ago
Integration Tests
: test that checkTrialOrIntroDiscountEligibility
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
: added visionOS
to list of supported platforms (#3052) via NachoSoto (@NachoSoto)Tests
: added tests for ClockType
(#3029) via NachoSoto (@NachoSoto)HTTPClient
: also parse errors with application/json;charset=utf8
(#3041) via NachoSoto (@NachoSoto)Published by RCGitBot about 1 year ago
Xcode 15
: fixed release build (#3034) via NachoSoto (@NachoSoto)Published by RCGitBot about 1 year ago
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)StoreKit 2
: only listen to StoreKit.Transaction.updates
when SK2 is enabled (#3032) via NachoSoto (@NachoSoto)CustomerInfoManager
: post transactions in parallel to POST receipts only once (#2954) via NachoSoto (@NachoSoto)PostedTransactionCache
: remove implementation (#3030) via NachoSoto (@NachoSoto)Integration Tests
: improved testCanPurchaseMultipleSubscriptions
(#3025) via NachoSoto (@NachoSoto)GitHub
: improved ISSUE_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
: added ClockType
(#3014) via NachoSoto (@NachoSoto)Integration Tests
: begin tests with UIApplication.willEnterForegroundNotification
to simulate a real app (#3015) via NachoSoto (@NachoSoto)Integration Tests
: add tests to verify CustomerInfo
+Offerings
request de-dupping (#3013) via NachoSoto (@NachoSoto)SwiftLint
: disable unneeded_synthesized_initializer
(#3010) via NachoSoto (@NachoSoto)internal
NonSubscriptionTransaction.storeTransactionIdentifier
(#3009) via NachoSoto (@NachoSoto)Integration Tests
: added tests for non-renewing and non-consumable packages (#3008) via NachoSoto (@NachoSoto)EnsureNonEmptyArrayDecodable
to EnsureNonEmptyCollectionDecodable
(#3002) via NachoSoto (@NachoSoto)Published by RCGitBot about 1 year ago
This release is compatible with Xcode 15 beta 6 and visionOS beta 3
Xcode 15
: fix non-visionOS
build by replacing .custom
platform (#3005) via NachoSoto (@NachoSoto)Integration Tests
: test for SignatureVerificationMode.informational
and receipt posting when fetching CustomerInfo
(#3000) via NachoSoto (@NachoSoto)Custom Entitlement Computation
: fixed visionOS
build (#2999) via NachoSoto (@NachoSoto)HTTPClient
: extracted HTTPRequestPath
protocol (#2986) via NachoSoto (@NachoSoto)CI
: add visionOS
build (#2990) via NachoSoto (@NachoSoto)