Co-authored-by: Antonio Pallares <ajpallares@users.noreply.github.com>
429 KiB
5.102.3
RevenueCat SDK
📦 Dependency Updates
- Chore(deps): Bump nokogiri from 1.19.4 to 1.19.6 (#8216) via dependabot[bot] (@dependabot[bot])
RevenueCatUI SDK
Paywallsv2
🐞 Bugfixes
- fix(paywalls): stop nested Fill stacks from hanging on iOS 17 (#8230) via Jacob Rakidzich (@JZDesign)
- ONC-46 | Close open paywall sheet after in-app purchase (#8220) via Rosie Watson (@RosieWatson)
5.102.2
RevenueCatUI SDK
🐞 Bugfixes
- Fix(Paywalls) Package Selection/Resolution (#8145) via Jacob Rakidzich (@JZDesign)
Paywallsv2
🐞 Bugfixes
- fix(Paywalls) Package selection resolution on older OSes (#8226) via Jacob Rakidzich (@JZDesign)
- Fix video controls intercepting taps outside the video (#8182) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Add workflow prewarming performance benchmark (#8206) via Facundo Menzella (@facumenzella)
- test(events): fix flaky feature event integration test (#8219) via Rick (@rickvdl)
- refactor(paywalls): remove internal paywall components prewarming (#8207) via Rick (@rickvdl)
- fix: present Test Store UI in the passed presentationContext (#7978) via Rick (@rickvdl)
- fix: centralize presentation context resolution (#7977) via Rick (@rickvdl)
- test(storekit): work around iOS 27 active repurchase hang (#8214) via Rick (@rickvdl)
- test: fix flaky StoreKit 1 receipt retry test (#8213) via Rick (@rickvdl)
- WFL-822 | Add Maestro tests for workflow branch routing (#8210) via Rosie Watson (@RosieWatson)
- Warn CocoaPods users to migrate to Swift Package Manager (#8203) via Antonio Pallares (@ajpallares)
5.102.1
RevenueCat SDK
🐞 Bugfixes
- fix: prevent race in sandbox environment detection (#8202) via Rick (@rickvdl)
RevenueCatUI SDK
🐞 Bugfixes
- Fix(Paywalls) correctly identify tab content (#8198) via Jacob Rakidzich (@JZDesign)
Paywallsv2
🐞 Bugfixes
- Prefetch paywall images only for the displayed localization (#8188) via Josh Holtz (@joshdholtz)
🔄 Other Changes
- Let testing apps simulate API source outages (#8196) via Antonio Pallares (@ajpallares)
- Remove the usesRemoteConfigAPISources dangerous setting and enable API sources for everyone (#8195) via Antonio Pallares (@ajpallares)
- Chore(deps): Bump fastlane-plugin-revenuecat_internal from
996879cto1e7875c(#8201) via dependabot[bot] (@dependabot[bot]) - Move rc-maestro to Projects and rename it AutomatedSDKTestsApp (#8190) via Facundo Menzella (@facumenzella)
5.102.0
RevenueCat SDK
✨ New Features
- feat(ads): dispatch checkpoint ad presentation by format (#7786) via Peter Porfy (@peterporfy)
- feat(ads): extend admob presenter with rewarded support (#7785) via Peter Porfy (@peterporfy)
🐞 Bugfixes
- fix: preserve workflow attribution in custom paywall impressions (#8183) via Álvaro Marco (@amarco90)
Paywallsv2
🐞 Bugfixes
- fix: Reduce CPU usage when downloading large assets (#8177) via Rick (@rickvdl)
RevenueCatUI SDK
🐞 Bugfixes
- Fix(Paywalls) Prioritize app locale (#8165) via Jacob Rakidzich (@JZDesign)
🔄 Other Changes
- feat(checkpoints): Add internal error dialog factory for checkpoints (#8134) via Cesar de la Vega (@vegaro)
- Move PurchaseTester to Projects (#8189) via Facundo Menzella (@facumenzella)
- other: move the checkpoint samples to SampleCat and delete CheckpointTester (#8162) via Facundo Menzella (@facumenzella)
- lint: add SwiftLint rule against Int for epoch milliseconds (#8181) via Will Taylor (@fire-at-will)
- ci: limit the Lock Threads token to
issues: write(#8178) via Álvaro Brey (@AlvaroBrey) - ci: run actionlint from the shared workflow (#8159) via Álvaro Brey (@AlvaroBrey)
- WFL-800 send step analytics for all step types in a flow (#8160) via Rosie Watson (@RosieWatson)
5.101.0
RevenueCat SDK
✨ New Features
- feat(ads): AdMob interstitial checkpoint presenter (#7784) via Peter Porfy (@peterporfy)
🐞 Bugfixes
- Fix diagnostics timestamp overflow on 32-bit watchOS (#8170) via Josh Holtz (@joshdholtz)
📦 Dependency Updates
- [RENOVATE] Update dependency revenuecat to v4.7.1 (#8168) via RevenueCat Git Bot (@RCGitBot)
RevenueCatUI SDK
Paywallsv2
✨ New Features
- feat(paywalls): Resume each carousel on its last page when returning to its tab (#8077) via Vinh P. Dinh (@vpdn)
🐞 Bugfixes
- Fix video playback on inactive workflow pages (#8131) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Support Google IAM identities (#8136) via Dave DeLong (@davedelong)
5.100.0
RevenueCat SDK
✨ New Features
- feat(checkpoints): ad checkpoint presenter (#7783) via Peter Porfy (@peterporfy)
🐞 Bugfixes
- Avoid repeated rejected SK2 observer-mode history submissions (#8142) via Josh Holtz (@joshdholtz)
RevenueCatUI SDK
🐞 Bugfixes
- fix: Explain why a workflow step's offering is not found (#8141) via Cesar de la Vega (@vegaro)
🔄 Other Changes
- Chore(deps): Bump fastlane from 2.241.1 to 2.241.2 (#8158) via dependabot[bot] (@dependabot[bot])
- Don't block releases on CocoaPods publishing (#8125) via Álvaro Brey (@AlvaroBrey)
- Detect Carthage source installations (#8144) via Antonio Pallares (@ajpallares)
- Fix flaky StoreKit transaction fetcher test on iOS 17 (#8139) via Rick (@rickvdl)
- docs: add behavior testing guide (#8106) via Facundo Menzella (@facumenzella)
- other(maestro): add checkpoint purchase flows with the SDK presenter (#8132) via Facundo Menzella (@facumenzella)
5.99.2
RevenueCat SDK
🐞 Bugfixes
- fix(flows) share in-flight flow prewarming decodes (#8130) via Rick (@rickvdl)
RevenueCatUI SDK
🐞 Bugfixes
- fix(paywalls): items above hero not being pushed below safe area (#8124) via Sufi Gaffar (@sufigaffar)
5.99.1
RevenueCat SDK
🐞 Bugfixes
- Coordinate overlapping intro eligibility cache warm-ups (#8108) via Antonio Pallares (@ajpallares)
RevenueCatUI SDK
🐞 Bugfixes
- Fix(Paywalls) Correct Hero Safe Area detection (#8126) via Jacob Rakidzich (@JZDesign)
🔄 Other Changes
- other(maestro): add checkpoint resolution screen (#8088) via Facundo Menzella (@facumenzella)
- [SDK-4552] Add no_new_public_inits SwiftLint rule (#8076) via Toni Rico (@tonidero)
- feat(ads): add RevenueCatAds package skeleton (#8009) via Peter Porfy (@peterporfy)
- Add Maestro SDK update tests verifying persisted state (#7900) via Antonio Pallares (@ajpallares)
- Fix API sources integration tests build after HTTP path types refactor (#8122) via Antonio Pallares (@ajpallares)
- Parse paywall gating in checkpoint workflows (#8121) via Cesar de la Vega (@vegaro)
- test(remote-config): add backend integration tests for API sources (#8061) via Antonio Pallares (@ajpallares)
- Let ForceServerErrorStrategy fake API source health checks (#8110) via Antonio Pallares (@ajpallares)
5.99.0
RevenueCat SDK
✨ New Features
- (Experimental) Allow configuring intro eligibility warm-up task priority (#8117) via Antonio Pallares (@ajpallares)
🐞 Bugfixes
- Share StoreKit 2 intro eligibility checks by subscription group (#8109) via Antonio Pallares (@ajpallares)
RevenueCatUI SDK
🐞 Bugfixes
- Fix(paywalls) Native delayed back button (#8114) via Jacob Rakidzich (@JZDesign)
🔄 Other Changes
- Simplify HTTP path types (#7987) via Dave DeLong (@davedelong)
5.98.0
RevenueCat SDK
🐞 Bugfixes
- Share one product cache between offerings and intro eligibility (#8085) via Antonio Pallares (@ajpallares)
- Fix product cache invalidation and shared request results (#8084) via Antonio Pallares (@ajpallares)
- Handle re-login as the same user (#8100) via Dave DeLong (@davedelong)
RevenueCatUI SDK
Paywallsv2
✨ New Features
- 6 of 6: Support native Back and Close in paywall workflows (#8025) via Josh Holtz (@joshdholtz)
- 5 of 6: Show native paywall buttons in UIKit (#8024) via Josh Holtz (@joshdholtz)
- 4 of 6: Show native paywall buttons in SwiftUI (#8023) via Josh Holtz (@joshdholtz)
- 3 of 6: Connect native paywall buttons to existing actions (#8022) via Josh Holtz (@joshdholtz)
- 2 of 6: Register native paywall button actions (#8027) via Josh Holtz (@joshdholtz)
- 1 of 6: Add native paywall button preferences (#8021) via Josh Holtz (@joshdholtz)
🐞 Bugfixes
- 8 of 8: Replace nested paywall navigation buttons (#8075) via Josh Holtz (@joshdholtz)
- 7 of 7: Hide caller Back when native paywall controls are shown (#8071) via Josh Holtz (@joshdholtz)
- fix: avoid redacting packages without applicable offers (#8074) via Antonio Pallares (@ajpallares)
🔄 Other Changes
- Improve intro eligibility debug logging (#8104) via Antonio Pallares (@ajpallares)
- 10 of 10: Verify native and embedded navigation analytics (#8082) via Josh Holtz (@joshdholtz)
- 9 of 9: Share paywall component traversal (#8080) via Josh Holtz (@joshdholtz)
- Remove snapshots for iOS versions no longer tested on CI (#8092) via Antonio Pallares (@ajpallares)
- Run iOS 26 tests on Xcode 26.6 with the iOS 26.2 simulator (#8090) via Antonio Pallares (@ajpallares)
- Update fallback offerings snapshot for Filipino locale (#8102) via Josh Holtz (@joshdholtz)
- Revert "Migrate existing anonymous user IDs when logging in" (#8101) via Dave DeLong (@davedelong)
5.97.0
RevenueCat SDK
✨ New Features
- Load configured ad rewards from remote config (#7912) via Pol Miro (@polmiro)
- Add configured ad rewards API (#7911) via Pol Miro (@polmiro)
Storekit 2
✨ New Features
- feat: parse OwnershipType.assigned (#8064) via Will Taylor (@fire-at-will)
RevenueCatUI SDK
Paywallsv2
✨ New Features
- feat(paywalls): add discount variables (#8038) via andsolleiro (@andsolleiro)
🐞 Bugfixes
- Fix relative discounts calculated from rounded monthly prices (#8062) via Josh Holtz (@joshdholtz)
🔄 Other Changes
- Clarify StoreProduct identifier choices for billing plans (#8096) via Antonio Pallares (@ajpallares)
- other: handle assigned ownership type in Customer Center and winback offers (#8072) via Will Taylor (@fire-at-will)
- Run iOS 15 tests on Xcode 15.4 and drop the Xcode 14.3.1 test jobs (#8091) via Antonio Pallares (@ajpallares)
- other(paywalls-tester): show checkpoint results the same way as Android (#8093) via Facundo Menzella (@facumenzella)
- other(paywalls-tester): pick a presentation mode and run a simulated error (#8087) via Facundo Menzella (@facumenzella)
- Build docs on Xcode 26.6 instead of the deprecated Xcode 14.3.1 image (#7942) via Antonio Pallares (@ajpallares)
- other(paywalls-tester): list the project's checkpoints in the Checkpoints tab (#8070) via Facundo Menzella (@facumenzella)
- feat(checkpoints): always deliver the customer's information in
CheckpointResult(#8060) via Toni Rico (@tonidero) - feat(checkpoints): expand
CheckpointResultwith customer and purchase details (#8002) via Rick (@rickvdl)
5.96.1
RevenueCatUI SDK
🐞 Bugfixes
- Fix(Paywalls) Adjust loading state during eligibility check (#8055) via Jacob Rakidzich (@JZDesign)
- Fix(Paywalls) Intro Offer Eligibility checks were not resumable and sometimes slow (#8054) via Jacob Rakidzich (@JZDesign)
Paywallsv2
🐞 Bugfixes
- fix(paywalls): Match Android swipe behaviour for Paywalls V2 carousel (#7857) via Jamie Holwill (@jholwill)
🔄 Other Changes
- Use a dedicated session id for diagnostics events (#8066) via Toni Rico (@tonidero)
- Fix Customer Center preview tests on Xcode 14.3.1 (#8063) via Monika Mateska (@MonikaMateska)
- other: attribute checkpoint offering purchases to their hit (#8058) via Facundo Menzella (@facumenzella)
- Chore(deps): Bump fastlane from 2.241.0 to 2.241.1 (#8059) via dependabot[bot] (@dependabot[bot])
- feat(customer-center): Add stateful Customer Center preview actions and diagnostics (#7951) via Monika Mateska (@MonikaMateska)
- docs: require explicit fields in data model initializers (#8057) via Pol Miro (@polmiro)
5.96.0
RevenueCat SDK
✨ New Features
- feat(ads): add revenuecat mediator type (#8007) via Peter Porfy (@peterporfy)
🐞 Bugfixes
- fix(test-store): Forward Test Store purchase attribution context (#8020) via Álvaro Marco (@amarco90)
- fix(billing plans): use product.id in log messages (#8003) via Will Taylor (@fire-at-will)
Checkpoints
🐞 Bugfixes
- fix(checkpoints): suppress callbacks for terminal checkpoint errors (#7984) via Rick (@rickvdl)
- fix(checkpoints): respect preferred locale override in local rules (#7953) via Rick (@rickvdl)
RevenueCatUI SDK
Customer Center
🐞 Bugfixes
- Fix Customer Center purchase details and action state (#7948) via Monika Mateska (@MonikaMateska)
- fix(customer-center): stop the hang on iOS 16 and 17 when the single-purchase screen opens purchase history (#7993) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- test: fix CI failures on main (non-UIKit test compile, offline cache key regex) (#8050) via Toni Rico (@tonidero)
- Attribute workflow purchases to their launching checkpoint (#8037) via Cesar de la Vega (@vegaro)
- test(customer-center): fix preview tests compiling on Xcode 14.3.1 (#8046) via Monika Mateska (@MonikaMateska)
- fix(checkpoints): prevent presentation conflicts from blocking future calls (#8048) via Rick (@rickvdl)
- Rename simulated error checkpoint identifier (#8047) via JayShortway (@JayShortway)
- feat(customer-center): Render isolated Customer Center preview paywalls (#8015) via Monika Mateska (@MonikaMateska)
- chore: route CODEOWNERS review requests to owning teams (#8033) via Cesar de la Vega (@vegaro)
- Link RevenueCatUI in MagicWeatherSwiftUI (#8039) via Facundo Menzella (@facumenzella)
- feat(checkpoints): add
CheckpointResultresult container (#8035) via Rick (@rickvdl) - docs(remote-config): clarify when diagnostics are enabled (#8004) via Rick (@rickvdl)
- other(paywalls-tester): list and open flows by id (#7962) via Facundo Menzella (@facumenzella)
- fix(checkpoints): localize default error presenter messages (#8032) via Rick (@rickvdl)
- fix(checkpoints): report workflow navigation failures without ending the flow (#8031) via Rick (@rickvdl)
- fix(checkpoints): route all errors through error presenter (#7994) via Rick (@rickvdl)
- refactor(checkpoints): simplify error presenter completion (#8012) via Rick (@rickvdl)
- feat(customer-center): Add isolated Customer Center preview data and actions (#8014) via Monika Mateska (@MonikaMateska)
- Migrate existing anonymous user IDs when logging in (#8017) via Dave DeLong (@davedelong)
- Chore(deps): Bump fastlane from 2.240.1 to 2.241.0 (#8019) via dependabot[bot] (@dependabot[bot])
- feat(ads): add new capture methods (#7988) via Peter Porfy (@peterporfy)
- fix(checkpoints): log unknown checkpoint hit as informational (#7970) via Rick (@rickvdl)
5.95.0
RevenueCat SDK
✨ New Features
- feat(ads): allow manual rewarded ad earned tracking (#7954) via Pol Miro (@polmiro)
🐞 Bugfixes
- Render lifetime period variables on Paywalls V2 (#7798) via Josh Holtz (@joshdholtz)
Checkpoints
🐞 Bugfixes
- fix(checkpoints): Prevent duplicate workflow error alerts when an error presenter is configured (#7981) via Rick (@rickvdl)
Paywallsv2
✨ New Features
- Open the in-app web checkout from the purchase button (#7862) via Antonio Pallares (@ajpallares)
RevenueCatUI SDK
Paywallsv2
🐞 Bugfixes
- fix: a tab switch can show the previous tab's image (#7975) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Stop the web checkout page flickering after the sheet is dragged (#7983) via Antonio Pallares (@ajpallares)
- other(workflows): maestro flow for the experiment variant after a log in (#7922) via Facundo Menzella (@facumenzella)
- Expose subscriber attributes publicly (#7968) via Dave DeLong (@davedelong)
- Retry a rate-limited hosted checkout status request (#7972) via Antonio Pallares (@ajpallares)
- Report a hosted checkout purchase as started (#7967) via Antonio Pallares (@ajpallares)
- Track how a hosted checkout that never opens ended (#7939) via Antonio Pallares (@ajpallares)
- Keep the web checkout usable when a step fails or its process ends (#7966) via Antonio Pallares (@ajpallares)
- Report the transaction a hosted checkout made to onPurchaseCompleted (#7940) via Antonio Pallares (@ajpallares)
- Decode the purchase a succeeded hosted checkout session made (#7937) via Antonio Pallares (@ajpallares)
- Show hosted checkout alerts from the paywall instead of the purchase button (#7928) via Antonio Pallares (@ajpallares)
- Fix crash in async PurchasesDelegateTests from MockOperationDispatcher race (#7964) via Antonio Pallares (@ajpallares)
- Bump CI to Ruby 3.3 (#7963) via Josh Holtz (@joshdholtz)
5.94.0
RevenueCat SDK
🐞 Bugfixes
- fix(paywalls): videos with fit width not rendering (#7958) via Sufi Gaffar (@sufigaffar)
RevenueCatUI SDK
✨ New Features
- feat(paywalls): show the branch loading screen for every user (#7947) via Facundo Menzella (@facumenzella)
- feat(workflows): turn on workflow branch routing (#7908) via Facundo Menzella (@facumenzella)
🐞 Bugfixes
- [EXTERNAL] Add accessibility header trait to legacy v1 paywall titles (#5909) via @shiftingsand (#7943) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Fix Swift 5.10 build error in TransactionMetadataSyncHelper (#7959) via Antonio Pallares (@ajpallares)
- Don't retain TransactionMetadataSyncHelper while its delayed sync is pending (#7933) via Antonio Pallares (@ajpallares)
5.93.0
RevenueCat SDK
✨ New Features
- feat(paywalls): prewarm videos for current locale (#7915) via Sufi Gaffar (@sufigaffar)
- feat(paywalls): implement support for localized videos on iOS (#7914) via Sufi Gaffar (@sufigaffar)
🐞 Bugfixes
- fix(paywalls): use video size for thumbnail overlay (#7918) via Sufi Gaffar (@sufigaffar)
RevenueCatUI SDK
🐞 Bugfixes
- fix(paywalls): use the passed Offering instance for matching workflow steps (#7932) via Toni Rico (@tonidero)
- FIX(Paywalls) Custom Component not rendering in iOS 27 (#7897) via Jacob Rakidzich (@JZDesign)
- Report cancelled paywall purchases even when CustomerInfo can't be fetched (#7895) via Antonio Pallares (@ajpallares)
- Remove video fade-in over the paywall thumbnail (#7905) via Cesar de la Vega (@vegaro)
Paywallsv2
✨ New Features
- FEAT(Paywalls) enable min/max sizing (#7904) via Jacob Rakidzich (@JZDesign)
🐞 Bugfixes
- Honor explicit no-scroll on root z-layer paywalls (#7870) via Josh Holtz (@joshdholtz)
Customer Center
🐞 Bugfixes
- Customer Center: fix crash on iOS 17 and 18 with Xcode 27 builds (#7917) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- other: expose StoreProduct.id internally (#7930) via Will Taylor (@fire-at-will)
- Confirm a kept hosted checkout once when its page succeeds during a buy tap (#7927) via Antonio Pallares (@ajpallares)
- Let the backend decide which hosted checkout session the customer continues (#7910) via Antonio Pallares (@ajpallares)
- Confirm a hosted checkout whose page succeeds after the sheet was closed (#7891) via Antonio Pallares (@ajpallares)
- Keep a paywall's hosted checkout so buying again carries on with it (#7890) via Antonio Pallares (@ajpallares)
- Resume a customer's previous hosted checkout session (#7889) via Antonio Pallares (@ajpallares)
- Resolve workflow offerings through a single WorkflowOfferings wrapper (#7938) via Toni Rico (@tonidero)
- Add Maestro flow for developer-provided offering filtering packages (#7934) via Toni Rico (@tonidero)
- other: send fallback_original_step_id and always send blob_ref on workflow events (#7878) via Facundo Menzella (@facumenzella)
- Add checkpoint testing to PaywallsTester (#7923) via Rick (@rickvdl)
- feat(checkpoints): resolve subscriber dimensions from config and receipts endpoints (#7919) via Rick (@rickvdl)
- feat(checkpoints): read subscriber dimensions from remote config (#7902) via Rick (@rickvdl)
- Use shared Sentry CI metadata action (#7854) via Rick (@rickvdl)
- Chore(deps): Bump fastlane-plugin-revenuecat_internal from
c3e3afeto4c49d48(#7921) via dependabot[bot] (@dependabot[bot]) - feat(checkpoints): add error presenter API (#7901) via Rick (@rickvdl)
- feat(checkpoints): add presentation modes to checkpoint flows (#7894) via Rick (@rickvdl)
- other(workflows): pin each user to a variant in the experiment maestro flow (#7896) via Facundo Menzella (@facumenzella)
- other(workflows): route the first step with the workflow's initial trigger (#7879) via Facundo Menzella (@facumenzella)
- Chore(deps): Bump fastlane-plugin-revenuecat_internal from
9f7a03etoc3e3afe(#7909) via dependabot[bot] (@dependabot[bot]) - Add Maestro flow for a workflow screen without text (#7899) via Facundo Menzella (@facumenzella)
- Tell the customer when the hosted checkout cannot be started (#7851) via Antonio Pallares (@ajpallares)
- Confirm hosted checkout purchases with an alert before reporting them (#7888) via Antonio Pallares (@ajpallares)
- Settle hosted checkout paywalls on what the backend confirms (#7887) via Antonio Pallares (@ajpallares)
- Poll the hosted checkout session before settling an in-app web purchase (#7886) via Antonio Pallares (@ajpallares)
- Add the hosted checkout session status endpoint (#7885) via Antonio Pallares (@ajpallares)
- Remove the hosted checkout cancel URL (#7881) via Antonio Pallares (@ajpallares)
- Title the already-owned hosted checkout alert as a purchase (#7893) via Antonio Pallares (@ajpallares)
- AGENTS.md update 2026 September (#7884) via cursor[bot] (@cursor[bot])
- feat(ads): send ad unit id to backend during reward polling (#7872) via Peter Porfy (@peterporfy)
- feat(diagnostics): support collection through SDK settings with explicit developer approval (#7815) via Rick (@rickvdl)
- refactor(remote-config): introduce config lifecycle observers (#7875) via Rick (@rickvdl)
- other(paywalls): extract prototype skeleton UI (#7873) via Facundo Menzella (@facumenzella)
5.92.0
RevenueCat SDK
✨ New Features
- refactor(ads): rename rewarded ad prompt types to AdRewardPrompt* (#7880) via Drago Crnjac (@popcorn)
- feat(ads): track rewarded ad prompt shown and accepted events (#7858) via Drago Crnjac (@popcorn)
- Allow opting in to external purchase custom links (experimental) (#7809) via Antonio Pallares (@ajpallares)
🐞 Bugfixes
- fix(customerinfo): notify observers when active entitlements change (#7820) via Peter Porfy (@peterporfy)
📦 Dependency Updates
- [RENOVATE] Update dependency revenuecat to v4.6.2 (#7847) via RevenueCat Git Bot (@RCGitBot)
RevenueCatUI SDK
🐞 Bugfixes
- Fix(paywalls) Crash on logout (#7836) via Jacob Rakidzich (@JZDesign)
Customer Center
🐞 Bugfixes
- Fix Customer Center survey title wrapping on iOS 26 (#7843) via Josh Holtz (@joshdholtz)
Paywallsv2
🐞 Bugfixes
- Fix Paywalls V2 picking a random regional locale (#7835) via Jamie Holwill (@jholwill)
🔄 Other Changes
- Run RevenueCatUI tests on macOS (#7869) via Facundo Menzella (@facumenzella)
- Enable signature verification for web purchase redemption (#7874) via Rick (@rickvdl)
- other(workflows): route a branch trigger action to the step its audiences pick (#7853) via Facundo Menzella (@facumenzella)
- Chore(Paywalls): Add DEBUG-only JSON paywall preview renderer (#7746) via Jacob Rakidzich (@JZDesign)
- Chore(Paywalls): Apply min/max to Fill sizes only (#7770) via Jacob Rakidzich (@JZDesign)
- Fix iOS AdMob capture method (#7844) via Pol Miro (@polmiro)
- Use a positive simulator external purchase setting (#7856) via Antonio Pallares (@ajpallares)
- [SDK-4501] Add
is_syncedtocustomer_infopurchase records (#7849) via Toni Rico (@tonidero) - refactor(checkpoints): rename invite-only API SPI (#7852) via Rick (@rickvdl)
- Allow web purchases in the simulator regardless of storefront (experimental) (#7828) via Antonio Pallares (@ajpallares)
- Tell ineligible customers a web purchase is unavailable (#7831) via Antonio Pallares (@ajpallares)
- Offer no external purchase outside the storefronts the backend allows (#7791) via Antonio Pallares (@ajpallares)
- Chore(deps): Bump fastlane-plugin-sentry from 2.7.0 to 2.8.0 (#7850) via dependabot[bot] (@dependabot[bot])
- Chore(deps): Bump rubyzip from 2.4.1 to 3.4.0 in /Tests/InstallationTests/CocoapodsInstallation (#7845) via dependabot[bot] (@dependabot[bot])
- feat(remote-config): add SDK settings config provider (#7813) via Rick (@rickvdl)
- Give web checkout requests their own backend lane (#7774) via Antonio Pallares (@ajpallares)
- feat(remote-config): prewarm checkpoint rules and audiences (#7781) via Rick (@rickvdl)
- Tell the customer when they already own what the in-app checkout would sell (#7756) via Antonio Pallares (@ajpallares)
- Let a Test Store key run the in-app web checkout and Apple's flow (#7750) via Antonio Pallares (@ajpallares)
- Present the in-app web checkout when external purchases do not apply (#7749) via Antonio Pallares (@ajpallares)
5.91.0
RevenueCat SDK
🐞 Bugfixes
- Prevent subscriber attribute sync before CustomerInfo is available (#7793) via Rick (@rickvdl)
RevenueCatUI SDK
✨ New Features
- [EXTERNAL] Hide decorative paywall media from VoiceOver (#7545) via @t9mike (#7702) via Facundo Menzella (@facumenzella)
🐞 Bugfixes
- Fix(Paywalls): Prevent Fill children from expanding the paywall root (#7782) via Jacob Rakidzich (@JZDesign)
- Fix(Paywalls) Support Web Views in looping carousels (#7688) via Jacob Rakidzich (@JZDesign)
Paywallsv2
🐞 Bugfixes
- fix: keep VoiceOver inside the bottom sheet when the paywall scrolls (#7810) via Facundo Menzella (@facumenzella)
- Fix relative discounts for workflow paywalls with plans in sheets (#7775) via Josh Holtz (@joshdholtz)
🔄 Other Changes
- other: maestro e2e notifications on recovery, and run the workflow flows like e2e (#7807) via Facundo Menzella (@facumenzella)
- other: Add trace_id to the checkpoint hit event (#7811) via Facundo Menzella (@facumenzella)
- Add signature verification failure context to diagnostics (#7800) via Rick (@rickvdl)
- Extract signature verification failure reasons (#7777) via Rick (@rickvdl)
- other(workflows): maestro flows for workflow experiments (#7805) via Facundo Menzella (@facumenzella)
- other(billing plans): run SKConfig unit + integration tests for billing plans (#6899) via Will Taylor (@fire-at-will)
- other(CI): introduce iOS 27 CI jobs (#7705) via Will Taylor (@fire-at-will)
- Chore(deps): Bump fastlane-plugin-sentry from 2.6.3 to 2.7.0 (#7795) via dependabot[bot] (@dependabot[bot])
- Only announce backend integration test successes on recovery (#7776) via Facundo Menzella (@facumenzella)
- Chore(deps): Bump fastlane from 2.240.0 to 2.240.1 (#7796) via dependabot[bot] (@dependabot[bot])
- Chore(deps): Bump fastlane-plugin-revenuecat_internal from
a65e499to9f7a03e(#7794) via dependabot[bot] (@dependabot[bot]) - Auto-approve the next-version SNAPSHOT PR (#7792) via Álvaro Brey (@AlvaroBrey)
- Chore(deps): Bump fastlane-plugin-sentry from 2.6.1 to 2.6.3 (#7772) via dependabot[bot] (@dependabot[bot])
- fix(checkpoints): only continue flows for restores that grant access (#7771) via Rick (@rickvdl)
- feat(checkpoints): follow-up improvements (#7752) via Rick (@rickvdl)
- Upload iOS size analysis builds to Sentry (#7275) via Rick (@rickvdl)
- refactor(checkpoints): disable exit offers for checkpoint paywalls (#7761) via Rick (@rickvdl)
- feat(checkpoints): add app-owned offering presenter API (#7626) via Rick (@rickvdl)
- docs: Link the paywall interaction event reference (#7732) via Álvaro Brey (@AlvaroBrey)
5.90.2
RevenueCat SDK
🐞 Bugfixes
- Fix fallback config signature verification for 304 responses (#7753) via Rick (@rickvdl)
RevenueCatUI SDK
🐞 Bugfixes
- fix: keep VoiceOver inside the bottom sheet (#7703) via Facundo Menzella (@facumenzella)
Paywallsv2
🐞 Bugfixes
- fix: switching tabs kept the previous tab's plan selected (#7757) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Chore(Paywalls): gate min/max size JSON decoding behind a compiler flag (#7735) via Jacob Rakidzich (@JZDesign)
- Chore(deps): Bump fastlane from 2.239.0 to 2.240.0 (#7764) via dependabot[bot] (@dependabot[bot])
5.90.1
RevenueCat SDK
🐞 Bugfixes
- Do not apply a previous user's CustomerInfo after an identity change (#7758) via Toni Rico (@tonidero)
🔄 Other Changes
- ci: approve the release hold automatically when the release PR is approved (#7760) via Álvaro Brey (@AlvaroBrey)
5.90.0
RevenueCat SDK
🐞 Bugfixes
- fix: preserve errors when Result's Success is inferred as optional (#7723) via Antonio Pallares (@ajpallares)
RevenueCatUI SDK
✨ New Features
- feat(paywalls): add
offer_price_with_zerovariables (#7684) via Facundo Menzella (@facumenzella)
🐞 Bugfixes
- [EXTERNAL] Announce the package selection state to VoiceOver (#7545) via @t9mike (#7701) via Facundo Menzella (@facumenzella)
- Fix original paywall footer layout on iOS 27 (#7700) via Josh Holtz (@joshdholtz)
- [EXTERNAL] Package terms as words instead of abbreviations (#7545) via @t9mike (#7698) via Facundo Menzella (@facumenzella)
- [EXTERNAL] Expose markdown links as VoiceOver custom actions (#7545) via @t9mike (#7680) via Facundo Menzella (@facumenzella)
Paywallsv2
🐞 Bugfixes
- fix: keep fixed stack size when overflow is scroll (#7652) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- other(workflows): decode branch trigger action (#7613) via Facundo Menzella (@facumenzella)
- other: report what a checkpoint resolved to on the hit event (#7729) via Facundo Menzella (@facumenzella)
- Add the hosted checkout entry point the paywall can call (#7657) via Antonio Pallares (@ajpallares)
- Decode the hosted web checkout purchase button method (#7653) via Antonio Pallares (@ajpallares)
- Present the checkout web view in a bottom sheet (#7642) via Antonio Pallares (@ajpallares)
- Add the checkout web view host (#7623) via Antonio Pallares (@ajpallares)
- feat(checkpoints): add gate-focused checkpoint API (#7621) via Rick (@rickvdl)
- feat(checkpoints): distinguish back navigation from close actions (#7685) via Rick (@rickvdl)
- Skip StaticString tests (#7713) via Dave DeLong (@davedelong)
- refactor(checkpoints): remove checkpoint listener API (#7672) via Rick (@rickvdl)
- feat(checkpoints): Resolve the offering per workflow step (#7658) via Rick (@rickvdl)
- Warn when configure app user ID differs from cached ID (#7694) via Rick (@rickvdl)
- Apply the PaywallsTester entitlements file in the Tuist target (#7690) via Antonio Pallares (@ajpallares)
- other: echo step experiment params on workflow events (#7659) via Facundo Menzella (@facumenzella)
- Compare object keys by UTF-16 code unit in the rules engine (#7562) via Antonio Pallares (@ajpallares)
- [EXTERNAL] Add the decorative media paywall fixture and accessibility control view (#7545) via @t9mike (#7676) via Facundo Menzella (@facumenzella)
5.89.0
RevenueCat SDK
✨ New Features
- feat(ads): ad tracking and rewarded ad grants beta (#7490) via Peter Porfy (@peterporfy)
🐞 Bugfixes
- Fix Paywall V2 rendering when components are provided by an offering (#7655) via Rick (@rickvdl)
- fix: send X-Is-Sandbox header when using a Test Store API key (#7624) via Álvaro Brey (@AlvaroBrey)
- Fix URL-open publishing on a background thread (#7631) via Rick (@rickvdl)
RevenueCatUI SDK
✨ New Features
- feat(paywalls): Add onPaywallInteraction callback (#7583) via Álvaro Brey (@AlvaroBrey)
🐞 Bugfixes
- fix: use each rule's own badge contents (#7532) via Facundo Menzella (@facumenzella)
Paywallsv2
✨ New Features
- Run Apple's external purchase flow before opening a web purchase link (experimental) (#7663) via Antonio Pallares (@ajpallares)
- Add window size conditions for paywall component overrides (#7645) via Josh Holtz (@joshdholtz)
- Feat(Paywalls): Underline text support (#5935) via Jacob Rakidzich (@JZDesign)
🐞 Bugfixes
- Present sheet content only after its first layout pass (#7630) via Facundo Menzella (@facumenzella)
Customer Center
✨ New Features
- feat(customer center): show Resubscribe for cancelled subscriptions (#7617) via Facundo Menzella (@facumenzella)
🐞 Bugfixes
- fix(customer center): hide refund and change plan on family-shared subs (#7605) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Prepare one external purchase at a time (#7671) via Antonio Pallares (@ajpallares)
- Add a dangerous setting for external purchase custom links (#7662) via Antonio Pallares (@ajpallares)
- Tell payment authorization apart from external purchase eligibility (#7667) via Antonio Pallares (@ajpallares)
- Answer canMakePayments through AppStore rather than SKPaymentQueue (#7669) via Antonio Pallares (@ajpallares)
- Remove assertion (#7665) via Dave DeLong (@davedelong)
- feat(checkpoints): log checkpoint rule evaluation (#7650) via Rick (@rickvdl)
- refactor(checkpoints): remove backend predicate results (#7603) via Rick (@rickvdl)
- fix(checkpoints): fix audience loading and missing-dimension evaluation (#7602) via Rick (@rickvdl)
- fix(checkpoints): ensure remote config reads are generation consistent (#7575) via Rick (@rickvdl)
- Chore(deps): Bump fastlane from 2.238.0 to 2.239.0 (#7654) via dependabot[bot] (@dependabot[bot])
- Skip the external purchase flow when configured with a Test Store key (#7643) via Antonio Pallares (@ajpallares)
- Add the manager that orchestrates the external purchase StoreKit calls (#7628) via Antonio Pallares (@ajpallares)
- feat(remote-config): remove the remote config session kill switch (#7524) via Rick (@rickvdl)
- Add the networking layer for starting a hosted checkout (#7627) via Antonio Pallares (@ajpallares)
- Add the networking layer for registering external purchase tokens (#7596) via Antonio Pallares (@ajpallares)
- Add an internal wrapper over StoreKit's ExternalPurchaseCustomLink (#7594) via Antonio Pallares (@ajpallares)
- feat(Checkpoints): namespace checkpoint result and context types (#7570) via Rick (@rickvdl)
- fix(Checkpoints): Fail rule resolution when the app user changes (#7554) via Rick (@rickvdl)
- feat(Checkpoints): Cache subscriber dimensions and evaluate rules against them (#7553) via Rick (@rickvdl)
- feat(Checkpoints): Add customer purchases and entitlements as rule evaluation properties (#7550) via Rick (@rickvdl)
- feat(Checkpoints): Reshape rule evaluation properties (#7544) via Rick (@rickvdl)
- feat(Checkpoints): consume canonical audience configuration (#7543) via Rick (@rickvdl)
- Remove unused shouldWarnCustomersAboutMultipleSubscriptions (#7618) via Facundo Menzella (@facumenzella)
- Expand "isAnonymous" check (#7591) via Dave DeLong (@davedelong)
- Add IAM-specific webbilling paths (#7572) via Dave DeLong (@davedelong)
- ci: bump external PR notifications workflow to v8 (#7604) via Álvaro Brey (@AlvaroBrey)
- Remove the transform entry point from the rules engine (#7576) via Antonio Pallares (@ajpallares)
- ci: notify external PRs feed on PRs from outside the org (#7601) via Álvaro Brey (@AlvaroBrey)
- Add
DangerousSettings.forceAllowTestStoreInReleaseBuilds(#7600) via Toni Rico (@tonidero) - Remove access token revocation (#7573) via Dave DeLong (@davedelong)
- Chore(Paywalls): Update models to support min/max sizes (#7590) via Jacob Rakidzich (@JZDesign)
- Move the shared web view code out of the paywall component folder (#7598) via Antonio Pallares (@ajpallares)
5.88.0
RevenueCat SDK
🐞 Bugfixes
- Surface attribute sync errors when fetching offerings (#7539) via Rick (@rickvdl)
- Fall back to "en" when a workflow screen omits
default_locale(#7523) via Monika Mateska (@MonikaMateska) - Cache web purchase redemption CustomerInfo for the initiating App User ID (#7533) via Rick (@rickvdl)
RevenueCatUI SDK
🐞 Bugfixes
- feat: Give the paywall sticky footer a bottom margin in mac and vision devices (#7560) via Facundo Menzella (@facumenzella)
- [EXTERNAL] Give the paywall sticky footer a bottom margin where there is no safe area (#7548) via @t9mike (#7559) via Facundo Menzella (@facumenzella)
- Fix(Paywalls MacOS) resolve an attribute graph cycle hang/crash (#7480) via Jacob Rakidzich (@JZDesign)
Paywallsv2
✨ New Features
- Feat(Paywalls): Web Views can observe paywall data (#7542) via Jacob Rakidzich (@JZDesign)
🐞 Bugfixes
- fix: resolve the paywall video when the appearance changes (#7569) via Facundo Menzella (@facumenzella)
Customer Center
🐞 Bugfixes
- fix(customer center): show the most recent one-time purchases (#7534) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Share one arity check across the strict operators (#7571) via Antonio Pallares (@ajpallares)
- Add rc.regexReplace custom operator (#7558) via Antonio Pallares (@ajpallares)
- Add rc.regexExtract custom operator (#7557) via Antonio Pallares (@ajpallares)
- Add rc.regexMatch custom operator (#7556) via Antonio Pallares (@ajpallares)
- Remove the rc.length and rc.indexOf custom operators (#7568) via Antonio Pallares (@ajpallares)
- feat(Checkpoints): refine result and listener APIs (#7526) via Rick (@rickvdl)
- Index substr by UTF-16 code unit (#7552) via Antonio Pallares (@ajpallares)
- Chore(deps): Bump fastlane from 2.237.0 to 2.238.0 (#7565) via dependabot[bot] (@dependabot[bot])
- Add rc.indexOf custom operator (#7555) via Antonio Pallares (@ajpallares)
- Gate the iOS 17 scroll anchor snapshot test behind Xcode 15 (#7564) via Facundo Menzella (@facumenzella)
- Compare strings by UTF-16 code unit in the rules engine (#7518) via Antonio Pallares (@ajpallares)
- Match the separator by code unit in rc.split (#7551) via Antonio Pallares (@ajpallares)
- Add rc.let custom operator (#7506) via Antonio Pallares (@ajpallares)
- Chore(Paywalls): Create Web View Context - #7530 (#7541) via Jacob Rakidzich (@JZDesign)
- Add rc.slice custom operator (#7505) via Antonio Pallares (@ajpallares)
- Add rc.sortBy custom operator (#7504) via Antonio Pallares (@ajpallares)
- Expose access token via AuthenticationDelegate (#7536) via Dave DeLong (@davedelong)
- Unify internal authentication delegate (#7547) via Dave DeLong (@davedelong)
- Expose OIDC and Firebase identities (#7537) via Dave DeLong (@davedelong)
- Chore(deps): Bump fastlane-plugin-revenuecat_internal from
7dd9ab9to6db1da0(#7540) via dependabot[bot] (@dependabot[bot]) - (Internal) Spend virtual currencies (#7507) via Dave DeLong (@davedelong)
- chore: don't run danger on main (#7503) via Cesar de la Vega (@vegaro)
- refactor(Checkpoints): remove Objective-C compatibility (#7515) via Rick (@rickvdl)
- refactor(Checkpoints): remove CheckpointParams from the public API (#7512) via Rick (@rickvdl)
5.87.1
RevenueCatUI SDK
🐞 Bugfixes
- fix: Keep a duplicate package component's promo offer code (#7521) via Facundo Menzella (@facumenzella)
Paywallsv2
🐞 Bugfixes
- fix(paywalls): add user context to custom web checkout URLs (#7520) via Cesar de la Vega (@vegaro)
🔄 Other Changes
- ci: delete the per-PR machinery and the dedup the main-only API feed made dead (#7516) via Álvaro Brey (@AlvaroBrey)
- refactor(Checkpoints): consolidate result types (#7510) via Rick (@rickvdl)
- feat(Checkpoints): refine public API (#7508) via Rick (@rickvdl)
5.87.0
RevenueCat SDK
✨ New Features
- feat(singular) add $singularDeviceId subscriber attribute for Singular V2 (#7488) via Guillem Corominas (@guillemcorominas)
RevenueCatUI SDK
Paywallsv2
✨ New Features
- Feat(Paywalls): Web View Prewarming (#7470) via Jacob Rakidzich (@JZDesign)
🔄 Other Changes
- Name dropping build metadata unvalidated as a semver concession (#7502) via Antonio Pallares (@ajpallares)
- Announce public API changes from main only (#7500) via Facundo Menzella (@facumenzella)
- Refresh two rules engine doc comments that outlived their examples (#7498) via Antonio Pallares (@ajpallares)
- Add rc.semverCompare custom operator (#7472) via Antonio Pallares (@ajpallares)
- Remove unused background.jpg asset from RevenueCatUI (#7489) via Monika Mateska (@MonikaMateska)
- feat(checkpoints): add subscriber attribute editor to CheckpointTester (#7491) via Rick (@rickvdl)
5.86.0
RevenueCat SDK
✨ New Features
- feat: add confirmInScene & confirmInWindow purchase params (#4779) via Will Taylor (@fire-at-will)
- feat: Expose displayName and originalPurchaseDate on NonSubscriptionTransaction (#7471) via Facundo Menzella (@facumenzella)
- Track checkpoint hits through the analytics events pipeline (#7447) via Facundo Menzella (@facumenzella)
RevenueCatUI SDK
Paywallsv2
🐞 Bugfixes
- Remove already-subscribed logic from paywalls (#7487) via Antonio Pallares (@ajpallares)
- fix(paywalls): render
product.offer_pricewith the same currency format as other prices (#7270) via Cesar de la Vega (@vegaro) - Fix workflows ignoring
zero_decimal_place_countries(#7474) via Cesar de la Vega (@vegaro)
Customer Center
🐞 Bugfixes
- Fix Customer Center prices for subscriptions from different Apple IDs (#7427) via Cesar de la Vega (@vegaro)
🔄 Other Changes
- Remove
@objcfrom the newconfirmInpurchase params (#7493) via Antonio Pallares (@ajpallares) - Add a transform entry point to the rules engine (#7486) via Antonio Pallares (@ajpallares)
- Add nested variable rc.lower fixture case (#7484) via Antonio Pallares (@ajpallares)
- [CI] Collapse the two check-api-changes jobs into one (#7476) via Antonio Pallares (@ajpallares)
- Add rc.entries and rc.fromEntries custom operators (#7435) via Antonio Pallares (@ajpallares)
- Raise an error for unresolved variables instead of degrading to null (#7460) via Antonio Pallares (@ajpallares)
- Adopt shared Renovate config (#7485) via Álvaro Brey (@AlvaroBrey)
- Add unwrapped rc.length fixture case (#7483) via Antonio Pallares (@ajpallares)
- Add rc.split custom operator (#7473) via Antonio Pallares (@ajpallares)
- Inject and refresh IAM tokens (#7440) via Dave DeLong (@davedelong)
- Implement IAM Login Operations (#7439) via Dave DeLong (@davedelong)
- HTTP Paths can change their absolute path based on IAM enablement (#7422) via Dave DeLong (@davedelong)
- IAM Login part 2 (#7410) via Dave DeLong (@davedelong)
- Fix Test run for watch and tvos (#7479) via Jacob Rakidzich (@JZDesign)
- Bump sdks-common-config to 4.6.1 to cache the mise toolchain (#7478) via Antonio Pallares (@ajpallares)
- Properly publish API modifications (no add/delete) in the SDK API feed (#7451) via Álvaro Brey (@AlvaroBrey)
- Chore: Walk the workflow tree to broadcast prewarming data (#7420) via Jacob Rakidzich (@JZDesign)
- Chore(Paywalls): Invoke the warmer from the coordinator (#7469) via Jacob Rakidzich (@JZDesign)
- [CI] Build the nine platform swiftinterfaces in parallel (#6454) via Antonio Pallares (@ajpallares)
- Fix(CI): Skip tests on unsupported os versions (#7477) via Jacob Rakidzich (@JZDesign)
- Chore: Create WebBundleCachePrewarmer (#7429) via Jacob Rakidzich (@JZDesign)
- Add rc.lower and rc.upper custom operators (#7436) via Antonio Pallares (@ajpallares)
- Fix(CI): Correct type and add compiler check for old xcode version support (#7462) via Jacob Rakidzich (@JZDesign)
- Chore: Signal purchases-ui on purchases configuration (#7407) via Jacob Rakidzich (@JZDesign)
- Chore: Set up mechanism for WebView Caching (started with Clearing) (#7409) via Jacob Rakidzich (@JZDesign)
- Rename the checkpoint event's
session_idtoapp_session_id(#7459) via Cesar de la Vega (@vegaro) - Add rc.length operator for strings and arrays (#7437) via Antonio Pallares (@ajpallares)
5.85.0
RevenueCat SDK
✨ New Features
- feat(ads): admob adapter support for reward tracking (#7344) via Peter Porfy (@peterporfy)
🐞 Bugfixes
- fix: order queue receipt post after in-flight purchase post (#7072) via Antonio Pallares (@ajpallares)
RevenueCatUI SDK
Paywallsv2
🐞 Bugfixes
- Fix font scaling setting on workflow paywalls (#7428) via Cesar de la Vega (@vegaro)
🔄 Other Changes
- Add rc.rootVar operator for root scope in RulesEngine (#7432) via Antonio Pallares (@ajpallares)
- feat(checkpoints): Add the app's subscriber attributes as a rules dimension (#7443) via Rick (@rickvdl)
- feat(checkpoints): Add date and record collection rules dimension values (#7442) via Rick (@rickvdl)
- feat(Checkpoints): validate checkpoint identifiers (#7441) via Rick (@rickvdl)
- Read the SDK API feed channel from the CI context (#7446) via Álvaro Brey (@AlvaroBrey)
- Chore(deps): Bump fastlane-plugin-revenuecat_internal from
7fbbe66to7dd9ab9(#7449) via dependabot[bot] (@dependabot[bot]) - Add Scope plumbing and custom operator extension point (#7433) via Antonio Pallares (@ajpallares)
- Announce a public API change in the SDK API feed once per PR (#7431) via Álvaro Brey (@AlvaroBrey)
5.84.0
RevenueCat SDK
✨ New Features
- feat(ads): add optional tracking metadata to pollRewardVerification (#7341) via Peter Porfy (@peterporfy)
🐞 Bugfixes
- fix(paywalls): Resolve bundled fonts by name before downloading (#7394) via Monika Mateska (@MonikaMateska)
- fix(paywalls): tolerate duplicate font names when registering (#7396) via Monika Mateska (@MonikaMateska)
RevenueCatUI SDK
🐞 Bugfixes
- fix(paywalls): don't leave a hidden package selected on paywalls with tabs (#7404) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Evaluate checkpoint audiences 2/2 (#7426) via Facundo Menzella (@facumenzella)
- Label the platform and inline declarations in the API feed message (#7425) via Álvaro Brey (@AlvaroBrey)
- Unify custom variable validation across paywall entry points (#7406) via Rick (@rickvdl)
- feat(checkpoints): expose CheckpointParams custom variables as paywall custom variables (#7403) via Rick (@rickvdl)
- Chore: Convert to Set to Array on WebBunbleEventBus (#7430) via Jacob Rakidzich (@JZDesign)
- Evaluate checkpoint audiences 1/2 (#7414) via Facundo Menzella (@facumenzella)
- feat(checkpoints): Support headless offering checkpoints (#7405) via Facundo Menzella (@facumenzella)
- feat(ads): add AdRewardGranted ad tracking event (#7335) via Peter Porfy (@peterporfy)
- feat(checkpoints): Integrate Checkpoint audience rules (#7401) via Rick (@rickvdl)
- refactor(checkpoints): Reuse CustomVariableValue for checkpoint parameters (#7400) via Rick (@rickvdl)
- Fix tvOS paywall cache warming test compilation (#7416) via Rick (@rickvdl)
- Remove duplicate Slack failure notifications (#7413) via Cesar de la Vega (@vegaro)
- IAM Login, Part 1 (#7398) via Dave DeLong (@davedelong)
- feat(checkpoints): add store dimensions for local rule evaluation (#7399) via Rick (@rickvdl)
- feat(checkpoints): support custom variables in local rules (#7393) via Rick (@rickvdl)
- feat(checkpoints): add device dimensions for local rule evaluation (#7391) via Rick (@rickvdl)
5.83.2
RevenueCat SDK
🐞 Bugfixes
- fix(remote-config): Fix misleading ui_config warnings for projects without paywalls (#7389) via Rick (@rickvdl)
RevenueCatUI SDK
🐞 Bugfixes
- fix(paywalls): don't leave a hidden package selected by default (#7380) via Facundo Menzella (@facumenzella)
- Add accessibility labels for some paywall buttons (#7357) via Facundo Menzella (@facumenzella)
- fix(paywalls): dismiss the UIKit exit offer instead of deferring to the host (#7371) via Facundo Menzella (@facumenzella)
Paywallsv2
🐞 Bugfixes
- fix(paywalls-v2): select each tab's own default package on workflows (#7373) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- feat(checkpoints): Add local rules evaluation foundation (#7306) via Rick (@rickvdl)
- feat(checkpoints): Resolve checkpoints from remote configuration (#7385) via Rick (@rickvdl)
- feat(checkpoints): Expand CheckpointTester use cases (#7382) via Rick (@rickvdl)
- refactor(checkpoints): Only expose APIs behind a feature flag (#7381) via Rick (@rickvdl)
- Chore: reduce component tree traversals on cache warming (#7379) via Jacob Rakidzich (@JZDesign)
- Ingest audiences config topic (#7390) via Cesar de la Vega (@vegaro)
- Chore: Create WebBundleEventBus (#7386) via Jacob Rakidzich (@JZDesign)
- Chore(deps): Bump json from 2.20.0 to 2.21.2 (#7387) via dependabot[bot] (@dependabot[bot])
- fix(checkpoints): Refine unknown checkpoint and workflow resolution (#7384) via Rick (@rickvdl)
- Ingest the checkpoints config topic (#7370) via Facundo Menzella (@facumenzella)
- feat(checkpoints): UI presentation (#7368) via Rick (@rickvdl)
- feat(checkpoints): core engine (#7365) via Rick (@rickvdl)
- feat(checkpoints): CheckpointTester app (#7375) via Rick (@rickvdl)
- feat(checkpoints): public API surface (#7361) via Rick (@rickvdl)
- Chore(deps): Bump fastlane-plugin-revenuecat_internal from
b4e1e7fto7fbbe66(#7378) via dependabot[bot] (@dependabot[bot]) - test(paywalls): Maestro flow for closing the exit offer from UIKit (#7372) via Facundo Menzella (@facumenzella)
5.83.1
RevenueCatUI SDK
Paywallsv2
🐞 Bugfixes
- Fix web_view component flashing on paywall load (#7318) via Antonio Pallares (@ajpallares)
- fix(paywalls): apply tab state rules on workflow-backed paywalls (#7347) via Álvaro Brey (@AlvaroBrey)
🔄 Other Changes
- ci: report public API changes and pings to #feed-sdk-new-api (#7309) via Facundo Menzella (@facumenzella)
- Chore(deps): Bump fastlane-plugin-revenuecat_internal from
dd577eetob4e1e7f(#7358) via dependabot[bot] (@dependabot[bot]) - Use internalPaywallComponents property in tests (#7346) via Rick (@rickvdl)
- Bound blob downloads with per-source timeouts (#7185) via Antonio Pallares (@ajpallares)
- Re-tier HTTP request timeouts around per-host memory (#7179) via Antonio Pallares (@ajpallares)
- Chore(deps): Bump danger from 9.6.0 to 9.6.1 (#7350) via dependabot[bot] (@dependabot[bot])
- Chore(deps): Bump fastlane-plugin-revenuecat_internal from
3421c88todd577ee(#7351) via dependabot[bot] (@dependabot[bot]) - Add a Maestro flow for the config kill switch tripping mid-session (#7324) via Antonio Pallares (@ajpallares)
- Fix
fastlane setup_devin submodule checkouts and with PATH-installed swiftlint (#7330) via Álvaro Brey (@AlvaroBrey) - fix(remote-config): improve logging when remote config is disabled through to killswitch (#7337) via Rick (@rickvdl)
5.83.0
RevenueCat SDK
Remote-config
🐞 Bugfixes
- Refresh remote config when syncing attributes and offerings (#7323) via Antonio Pallares (@ajpallares)
RevenueCatUI SDK
✨ New Features
- feat: add onURLOpened to paywall listener surfaces (#7320) via Toni Rico (@tonidero)
Paywallsv2
✨ New Features
- Enable support for multipage paywalls (#7327) via Facundo Menzella (@facumenzella)
🐞 Bugfixes
- Send
paywall_idandtrace_idon post receipt (#7311) via Cesar de la Vega (@vegaro)
🔄 Other Changes
- fix(remote-config): clear last attempt timestamp for cooldown after successful response (#7328) via Rick (@rickvdl)
- fix(maestro): tap the relabeled Continue buttons in the workflow flows (#7332) via Antonio Pallares (@ajpallares)
- chore: align 5.82.0 changelog entry for #7233 with release notes (#7326) via Antonio Pallares (@ajpallares)
- feat(remote-config): force the config kill-switch via query param in E2E tests (#7317) via Antonio Pallares (@ajpallares)
- Send
paywall_id,workflow_idandtrace_idon paywall events (#7322) via Cesar de la Vega (@vegaro) - Re-resolve pruned offerings when the config kill switch trips (#7321) via Antonio Pallares (@ajpallares)
- feat(remote-config): use the server clock for X-RC-Last-Refresh-Time (#7314) via Rick (@rickvdl)
- test(paywalls): drop the nested background landscape test (#7319) via Facundo Menzella (@facumenzella)
- refactor: model ForceServerErrorStrategy interception as a single Action enum (#7315) via Antonio Pallares (@ajpallares)
5.82.0
RevenueCatUI SDK
✨ New Features
- Add onWebCheckoutOpened to paywall listener surfaces (#7260) via Álvaro Brey (@AlvaroBrey)
🐞 Bugfixes
- fix(paywalls): stop media backgrounds from swallowing taps (#7297) via Facundo Menzella (@facumenzella)
Paywallsv2
🐞 Bugfixes
- fix(paywalls): workflow paywalls to the screen edges in landscape (#7310) via Facundo Menzella (@facumenzella)
Paywallv2
✨ New Features
- feat(paywalls-v2): add haptic feedback on package/tab selection (#7167) via Facundo Menzella (@facumenzella)
- feat(paywalls-v2): Support Custom components (#7233) via Jacob Rakidzich (@JZDesign)
🔄 Other Changes
- Revert "feat: send workflow attribution on paywall events" (#7313) via Cesar de la Vega (@vegaro)
- feat(remote-config): send X-RC-Last-Refresh-Time on config requests (#7308) via Rick (@rickvdl)
- feat: send workflow attribution on paywall events (#7304) via Cesar de la Vega (@vegaro)
- feat(paywalls): apply hero top-inset treatment to full-width web_view (#7300) via Antonio Pallares (@ajpallares)
- test(remote-config): cover app restart refreshing and applying updated config (#7254) via Facundo Menzella (@facumenzella)
- feat(remote-config): health-check-gated API source failover in HTTPClient (#7294) via Toni Rico (@tonidero)
5.81.3
RevenueCat SDK
Storekit 2
🐞 Bugfixes
- fix(12mo commitments): use commitmentTotalDisplayPrice for localizedPriceString for 12mo commitment products (#7299) via Will Taylor (@fire-at-will)
🔄 Other Changes
- Build CircleCI trigger payload with jq (#7302) via Antonio Pallares (@ajpallares)
- Chore(deps): Bump fastlane-plugin-revenuecat_internal from
d392939to3421c88(#7301) via dependabot[bot] (@dependabot[bot]) - Use mise lockfile and install-mise-tools in CI (#7207) via Álvaro Brey (@AlvaroBrey)
- refactor: namespace rules engine types under RulesEngine (#7295) via Antonio Pallares (@ajpallares)
- [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#7296) via RevenueCat Git Bot (@RCGitBot)
- feat(remote-config): add health checker and API source failover components (#7293) via Toni Rico (@tonidero)
- refactor: move rules engine into core SDK as internal (#7292) via Antonio Pallares (@ajpallares)
- feat(paywalls): support visibility overrides for web_view component (#7291) via Antonio Pallares (@ajpallares)
- fix(paywalls): arbitrate web_view drag gestures with paywall scroll on iOS (#7283) via Antonio Pallares (@ajpallares)
- Avoid decoding legacy paywall components for workflows (#7264) via Rick (@rickvdl)
- Improve fallback paywall error description (#7288) via Antonio Pallares (@ajpallares)
- Bounce web_view scroll at its content edges on iOS (#7290) via Antonio Pallares (@ajpallares)
- fix: create Local.xcconfig when missing so TUIST_RC_API_KEY isn't dropped (#7286) via Antonio Pallares (@ajpallares)
- fix(paywalls): allow web_view content to scroll on iOS (#7282) via Antonio Pallares (@ajpallares)
- Chore(deps): Bump json from 2.10.2 to 2.19.9 in /Tests/InstallationTests/CocoapodsInstallation (#7285) via dependabot[bot] (@dependabot[bot])
- Chore(deps): Bump fastlane-plugin-revenuecat_internal from
b52fca5tod392939(#7284) via dependabot[bot] (@dependabot[bot]) - Harden paywall web view diagnostics and failure handling (#7280) via Antonio Pallares (@ajpallares)
- Allow media playback without a user gesture in paywall web views (#7279) via Antonio Pallares (@ajpallares)
5.81.2
RevenueCatUI SDK
Paywallsv2
🐞 Bugfixes
- Preserve background audio after videos close (#7197) via Cesar de la Vega (@vegaro)
- Reset bottom sheet content identity when switching sheets (#7216) via Cesar de la Vega (@vegaro)
🔄 Other Changes
- Rename workflow event names to singular (#7099) via Cesar de la Vega (@vegaro)
- Add
DangerousSettings(autoSyncPurchases:uiPreviewMode:useWorkflows:)init (#7276) via Cesar de la Vega (@vegaro) - Fix xcodeproj remove stale
PaywallWebViewAPIreferences (#7277) via Cesar de la Vega (@vegaro) - Remove unused draft paywall components (#7271) via Rick (@rickvdl)
- test: fix RevenueCatUI test compilation on older Xcode versions (#7272) via Cesar de la Vega (@vegaro)
- Retry
@RCGitBot please testapproval while CircleCI setup is still running (#7268) via Antonio Pallares (@ajpallares) - refactor(paywalls): WebViewOrigin value type for origin gating (#7266) via Antonio Pallares (@ajpallares)
- fix(paywalls): open web_view bridge channel only after init is delivered (#7269) via Antonio Pallares (@ajpallares)
- feat(paywalls): web_view component view + view model, not yet wired (6/7) (#7232) via Jacob Rakidzich (@JZDesign)
- Deduplicate workflow font install during prewarming (#7259) via Rick (@rickvdl)
- feat(paywalls): web_view bridge session with document-reset lifecycle (5/7) (#7231) via Jacob Rakidzich (@JZDesign)
- Support Xcode 27 in Tuist-generated projects (#7208) via Antonio Pallares (@ajpallares)
- Chore(deps): Bump fastlane-plugin-revenuecat_internal from
9b928b6tob52fca5(#7263) via dependabot[bot] (@dependabot[bot]) - Support Carthage from-source builds on Xcode 27 (#7051) via Antonio Pallares (@ajpallares)
- feat(paywalls): web_view schema component, not yet registered (4/7) (#7230) via Jacob Rakidzich (@JZDesign)
- feat(paywalls): web_view navigation/origin policy (3/7) (#7229) via Jacob Rakidzich (@JZDesign)
- feat(paywalls): add web_view wire envelope (2/7) (#7228) via Jacob Rakidzich (@JZDesign)
- fix(danger): don't crash on renamed production Swift files (#7262) via Antonio Pallares (@ajpallares)
- test(workflows): cover offline config behavior (default paywall cold, cached workflow warm) (#7250) via Facundo Menzella (@facumenzella)
- Chore(deps): Bump fastlane-plugin-revenuecat_internal from
9e334ffto9b928b6(#7261) via dependabot[bot] (@dependabot[bot]) - feat(paywalls): internal web_view JSON value type (#7227) via Jacob Rakidzich (@JZDesign)
5.81.1
RevenueCat SDK
Remote-config
🐞 Bugfixes
- fix(remote-config): Cache remote config workflows in-memory to avoid loading flash (#7213) via Rick (@rickvdl)
🔄 Other Changes
- Eagerly prewarm workflow assets without retaining decoded workflows (#7256) via Rick (@rickvdl)
- fix(remote-config): lazy-decode prefetched workflows (#7246) via Rick (@rickvdl)
- test(workflows): add Maestro flows for custom variable default + override (#7243) via Facundo Menzella (@facumenzella)
- fix(paywalls): restore MainActor isolation on exit-offer View helpers (#7253) via Facundo Menzella (@facumenzella)
- Chore(deps): Bump fastlane-plugin-revenuecat_internal from
dab6765to9e334ff(#7255) via dependabot[bot] (@dependabot[bot]) - test(workflows): add Maestro flow for Spanish workflow localizations (#7242) via Facundo Menzella (@facumenzella)
- other(paywalls): gate workflow exit offer by step on the present(offering:) path (#7245) via Facundo Menzella (@facumenzella)
- Avoid paywall loading state when remote config is disabled through killswitch (#7251) via Rick (@rickvdl)
- Move initial paywall data seeding into purchase handler (#7239) via Rick (@rickvdl)
- Fix RemoteConfigManagerTests missing fetchContext on main (#7252) via Antonio Pallares (@ajpallares)
- fix(remote-config): throttle failed refresh attempts (#7191) via Rick (@rickvdl)
- refactor(remote-config) reduce offerings memory when using remote-config (and thus workflows) (#7220) via Rick (@rickvdl)
- Chore: Add default size to Fit sizes (#7226) via Jacob Rakidzich (@JZDesign)
- feat(remote-config): source API base host from remote-config sources (#7123) via Antonio Pallares (@ajpallares)
- Deprecate Offering.paywallComponents (#7244) via Antonio Pallares (@ajpallares)
- other(paywalls): render the default paywall when an offering has no workflow (#7240) via Facundo Menzella (@facumenzella)
- ci: run the workflow Maestro flows on every PR (#7241) via Facundo Menzella (@facumenzella)
- test(remote-config): fix integration test conformance to usesRemoteConfigAPISources (#7238) via Antonio Pallares (@ajpallares)
- feat(remote-config): add internal usesRemoteConfigAPISources dangerous setting (#7236) via Antonio Pallares (@ajpallares)
5.81.0
RevenueCatUI SDK
🐞 Bugfixes
- Fix Paywalls V2 carousel image stuck in size-unknown state on first display (#7180) via Jacob Rakidzich (@JZDesign)
Paywallv2
✨ New Features
- feat(paywalls): support transparent sticky footers (#7188) via Álvaro Brey (@AlvaroBrey)
🔄 Other Changes
- feat(remote-config): force app_start on the first config request (#7219) via Antonio Pallares (@ajpallares)
- test(workflows): add Maestro flow for classic-paywall fallback on config failure (#7235) via Facundo Menzella (@facumenzella)
- test(workflows): add Maestro flow for workflow paywall back navigation (#7224) via Facundo Menzella (@facumenzella)
- test(remote-config): don't send app_start in no-content config tests (#7222) via Antonio Pallares (@ajpallares)
- test(workflows): add Maestro flow that navigates a workflow paywall to purchase (#7221) via Facundo Menzella (@facumenzella)
- ci(remote-config): run the blob health monitor (#7218) via Facundo Menzella (@facumenzella)
- test(remote-config): add a real-backend health check for CDN blob downloads (#7215) via Facundo Menzella (@facumenzella)
- feat(remote-config): send fetch_context on config endpoint requests (#7214) via Antonio Pallares (@ajpallares)
- Internal
DangerousSettings.useWorkflowsto enable remote config/workflows programmatically (#7209) via Cesar de la Vega (@vegaro) - test(remote-config): cover downloading several config blobs at once (#7212) via Facundo Menzella (@facumenzella)
- test(remote-config): cover getOfferings delivering when a prefetch blob fails (#7211) via Facundo Menzella (@facumenzella)
- Use short timeouts for remote config blob downloads (#7210) via Rick (@rickvdl)
- perf(remote-config): give /config its own request lane so it overlaps /offerings (#7196) via Facundo Menzella (@facumenzella)
- Pass Tuist Swift conditions to local package (#7195) via Rick (@rickvdl)
- other(remote-config): stabilize flaky RemoteConfig blob integration test (#7193) via Antonio Pallares (@ajpallares)
- Chore(deps): Bump excon from 0.112.0 to 1.5.0 in /Tests/InstallationTests/CocoapodsInstallation (#7190) via dependabot[bot] (@dependabot[bot])
- fix(ci): stop mirroring main to purchases-ios-spm, tags only (#7189) via Álvaro Brey (@AlvaroBrey)
- feat(remote-config): add static fallback config endpoint (#7182) via Rick (@rickvdl)
- Chore(deps): Bump cocoapods from 1.16.2 to 1.17.0 (#7187) via dependabot[bot] (@dependabot[bot])
- Don't switch hosts on device-connectivity errors (#7176) via Antonio Pallares (@ajpallares)
- other(offerings): gate getOfferings delivery on ui_config and stale-cache paths (#7181) via Facundo Menzella (@facumenzella)
- fix(remote-config): align edge-case handling with Android implementation (#7173) via Rick (@rickvdl)
- fix(paywalls): fail decoding a present-but-malformed custom_variables (#7184) via Antonio Pallares (@ajpallares)
- Chore(deps): Bump fastlane from 2.236.1 to 2.237.0 (#7175) via dependabot[bot] (@dependabot[bot])
- fix(remote-config): bind refresh requests to identity clears (#7150) via Rick (@rickvdl)
- New IAMEnabled configuration option (#7146) via Dave DeLong (@davedelong)
5.80.3
RevenueCat SDK
🐞 Bugfixes
- Fix decode for sheet actions without inline sheet (#7158) via Monika Mateska (@MonikaMateska)
- Expose preferred UI locale override APIs to Objective-C (#7121) via Álvaro Brey (@AlvaroBrey)
RevenueCatUI SDK
🐞 Bugfixes
- fix(paywalls-v2): fix package selection resetting unexpectedly when switching tabs (#7148) via Facundo Menzella (@facumenzella)
Paywallv2
🐞 Bugfixes
- fix(paywalls-v2): skip stale onChange invocations when propagating tab package to parent (#7168) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- other(workflows): unify workflows and remote config into a single gate (#7166) via Facundo Menzella (@facumenzella)
- perf(remote-config): merge blob data via byte concatenation (#7163) via Antonio Pallares (@ajpallares)
- other(paywalls): fall back to the offerings paywall when the workflow fetch fails (#7143) via Facundo Menzella (@facumenzella)
- test(remote-config): add additional regression test coverage (#7164) via Rick (@rickvdl)
- feat(remote-config): use merged blobs helper for ui config (#7153) via Rick (@rickvdl)
- other(networking): remove unused workflows OperationQueue and HTTP path cases (#7145) via Facundo Menzella (@facumenzella)
- other(networking): delete the dead workflows endpoint (#7144) via Facundo Menzella (@facumenzella)
- other(paywalls): read workflows from remote config (#7141) via Facundo Menzella (@facumenzella)
- refactor(remote-config): encapsulate topic-ready waiting on RemoteConfigManager (#7157) via Facundo Menzella (@facumenzella)
- test(remote-config): add integration test coverage with mocked API responses (#7147) via Rick (@rickvdl)
- other(paywalls): gate getOfferings on remote-config readiness (#7142) via Facundo Menzella (@facumenzella)
- feat(remote-config): add merged blob data API (#7149) via Rick (@rickvdl)
- other(remote-config): read ui_config via remote config (#7140) via Facundo Menzella (@facumenzella)
- fix(remote-config): use RemoteConfigTopic enum in disk cache tests (#7139) via Antonio Pallares (@ajpallares)
- perf(remote-config): cache persisted config in memory in RemoteConfigDiskCache (#7136) via Antonio Pallares (@ajpallares)
- feat(remote-config): add APIs for reading topic/blob data from RemoteConfigManager (#7134) via Rick (@rickvdl)
- Add SecureItemStorage (#7094) via Dave DeLong (@davedelong)
- Decode id on PaywallComponent.PackageComponent (#7135) via Facundo Menzella (@facumenzella)
- feat(remote-config): add observability logs (#7132) via Rick (@rickvdl)
- feat(remote-config): wire up remote config manager behind feature flag (#7130) via Rick (@rickvdl)
- Support multi-grant reward + moreRewards in reward verification (#7039) via Pol Miro (@polmiro)
- Add CI build step for app extension safe API checks (#7131) via Rick (@rickvdl)
- fix(remote-config): rearm exhausted blob sources + in memory knownRefs (#7120) via Rick (@rickvdl)
- feat(remote-config): disable refresh after client errors (#7118) via Rick (@rickvdl)
5.80.2
RevenueCat SDK
🐞 Bugfixes
- UIApplication may not be available in extensions (#7124) via Dave DeLong (@davedelong)
🔄 Other Changes
- feat(remote-config): add blob fetcher (#7115) via Rick (@rickvdl)
- feat(remote-config): RemoteConfigManager cache invalidation (#7111) via Rick (@rickvdl)
5.80.1
RevenueCat SDK
🐞 Bugfixes
- [EXTERNAL] Fix T-SAN crash due to memory misalignment when building with Xcode 27.0 (b1 and b2) (#7070) via @salling (#7105) via Antonio Pallares (@ajpallares)
🔄 Other Changes
- feat(remote-config): persist full topic index (#7110) via Rick (@rickvdl)
- fix(remote-config): avoid using Brotli compression on iOS versions below 16.0 (#7113) via Rick (@rickvdl)
- feat(remote-config): drive RemoteConfigSourceProvider from a topic store (#7106) via Antonio Pallares (@ajpallares)
- refactor(remote-config): prefer lowest priority number for source ordering (#7112) via Antonio Pallares (@ajpallares)
- feat(remote-config): add rc container compression support (#7107) via Rick (@rickvdl)
- feat(workflows): gate all paywall events by step screen_type (#7109) via Facundo Menzella (@facumenzella)
- feat(workflows): gate paywall impressions by step screen_type (#7104) via Facundo Menzella (@facumenzella)
- feat(remote-config): add production signing integration tests (#7097) via Rick (@rickvdl)
- Workflow preview injection via (@_spi) (#7103) via Facundo Menzella (@facumenzella)
- Chore(deps): Bump faraday from 1.10.5 to 1.10.6 in /Tests/InstallationTests/CocoapodsInstallation (#7101) via dependabot[bot] (@dependabot[bot])
- Chore(deps): Bump faraday from 1.10.5 to 1.10.6 (#7102) via dependabot[bot] (@dependabot[bot])
- Chore(deps): Bump fastlane-plugin-revenuecat_internal from
70bf5c7todab6765(#7100) via dependabot[bot] (@dependabot[bot]) - feat(remote-config): switch config request to v1 and send app user id (#7080) via Rick (@rickvdl)
- [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#7096) via RevenueCat Git Bot (@RCGitBot)
- feat(remote-config): store inlined blobs to disk (#7073) via Rick (@rickvdl)
- refactor(remote-config): make rc container validation domain-specific (#7074) via Rick (@rickvdl)
- feat(remote-config): add RemoteConfigSourceProvider for source failover (#7093) via Antonio Pallares (@ajpallares)
- feat(remote-config): add RemoteConfigManager (#7067) via Rick (@rickvdl)
- Add WeightedSourceSelector for remote config source selection (#7077) via Antonio Pallares (@ajpallares)
- feat(remote-config): add manifest disk persistence (#7076) via Rick (@rickvdl)
- Make LargeItemCache writes atomic (#7081) via Rick (@rickvdl)
- feat(remote-config): verify RC container signatures (#7046) via Rick (@rickvdl)
5.80.0
RevenueCat SDK
✨ New Features
- Expose
autoResumeDateandproductPlanIdentifieronSubscriptionInfo(#7049) via Álvaro Brey (@AlvaroBrey) - Log reward verification failure reason (#6892) via Pol Miro (@polmiro)
- Report ad event capture method (#7020) via Pol Miro (@polmiro)
RevenueCatUI SDK
✨ New Features
- Preview paywalls via deep link (#6922) via Dave DeLong (@davedelong)
Paywallv2
🐞 Bugfixes
- Extract ImageRenderPlan and add unit tests (#7069) via Alexander Repty (@alexrepty)
🔄 Other Changes
- fix: align RulesEngineInternal with json-logic-js (undefined & missing_some) (#7066) via Antonio Pallares (@ajpallares)
- feat(remote-config): update request and response models according to spec (#7022) via Rick (@rickvdl)
- fix(ci): install pinned xcodes prebuilt binary for visionOS support (#7065) via Antonio Pallares (@ajpallares)
- feat(workflows): add workflows_close abandonment event (#7040) via Facundo Menzella (@facumenzella)
- test(ads): add api signature test for newly exposed reward primitives (#7045) via Peter Porfy (@peterporfy)
- Model entitlement reward variant in reward verification (#7038) via Pol Miro (@polmiro)
- Chore(deps): Bump nokogiri from 1.19.3 to 1.19.4 in /Tests/InstallationTests/CocoapodsInstallation (#7063) via dependabot[bot] (@dependabot[bot])
- Chore(deps): Bump concurrent-ruby from 1.3.6 to 1.3.7 in /Tests/InstallationTests/CocoapodsInstallation (#7062) via dependabot[bot] (@dependabot[bot])
- Send
presented_workflow_idandpresented_step_idin post-receipt body (#7024) via Cesar de la Vega (@vegaro) - Chore(deps): Bump nokogiri from 1.19.3 to 1.19.4 (#7061) via dependabot[bot] (@dependabot[bot])
- Chore(deps): Bump danger from 9.5.3 to 9.6.0 (#7060) via dependabot[bot] (@dependabot[bot])
- feat(remote-config): support RC Container format in network stack and use for remote-config request (#7037) via Rick (@rickvdl)
- Bump sdks-common-config orb to 4.1.0 (#7050) via Álvaro Brey (@AlvaroBrey)
- feat(remote-config): add RC Container format V1 + parser (#7030) via Rick (@rickvdl)
- Upload paywall rendering validation screenshots to Emerge in PRs (#6979) via JayShortway (@JayShortway)
- Remove unused pollRewardVerificationStatus (#7042) via Pol Miro (@polmiro)
- Add Danger check to discourage large PRs (#7041) via Toni Rico (@tonidero)
- Update baseline swiftinterface files for
main(#7036) via RevenueCat Git Bot (@RCGitBot) - refactor(ads): reuse SDK retry classification for poll errors (#7009) via Antonio Pallares (@ajpallares)
- Migrate update_error_codes to the outputs parameter (#7035) via Álvaro Brey (@AlvaroBrey)
- refactor(ads): move reward verification to coresdk (#6895) via Peter Porfy (@peterporfy)
5.79.0
RevenueCat SDK
✨ New Features
- State-driven Paywalls: Tab selected-state (#7019) via Monika Mateska (@MonikaMateska)
- [EXTERNAL] feat: expose revocationDate and revocationReason on StoreTransaction via @mvanhorn (#7012) via Rick (@rickvdl)
RevenueCatUI SDK
✨ New Features
- Add Slovenian locale support in paywalls (#7007) via Monika Mateska (@MonikaMateska)
- Show DefaultPaywall warning view in UI preview mode (#6973) via Antonio Pallares (@ajpallares)
Paywallv2
🐞 Bugfixes
- Use AVPlayerLayer for no-controls; fix KVO crash (#6987) via Alexander Repty (@alexrepty)
🔄 Other Changes
- Update sdks-common-config orb to 3.21.2 (#7028) via Antonio Pallares (@ajpallares)
- feat(RevenueCatUI): evaluate state conditions in the override resolver (#6993) via Monika Mateska (@MonikaMateska)
- [AUTOMATIC] Update generated error codes (#7025) via RevenueCat Git Bot (@RCGitBot)
- feat(RevenueCatUI): add presentation-session PaywallStateStore (#6992) via Monika Mateska (@MonikaMateska)
- feat(paywalls): add dedicated state condition to component overrides (#6991) via Monika Mateska (@MonikaMateska)
- feat(paywalls): add decode-only stateUpdates on interactive components (#6990) via Monika Mateska (@MonikaMateska)
- feat(paywalls): decode top-level state declaration map (#6989) via Monika Mateska (@MonikaMateska)
- [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#7023) via RevenueCat Git Bot (@RCGitBot)
- Removes stale paywall template screenshots if necessary (#6984) via JayShortway (@JayShortway)
- Update backend integration tests snapshots to include Slovenian localizations (#7018) via Antonio Pallares (@ajpallares)
- feat: simulate promo offer eligibility in paywall previews (#6994) via Facundo Menzella (@facumenzella)
- chore: Add 3-day Dependabot cooldown, excluding fastlane plugin (#7013) via Toni Rico (@tonidero)
- WFL-303 | Add fallback URL for workflows (#7008) via Rosie Watson (@RosieWatson)
- fix(paywalls): skip workflow fetch for offerings with no mapped workflow (#7002) via Facundo Menzella (@facumenzella)
- Fix RevenueCatUI build on older Xcode: use legacy AVPlayerItemDidPlayToEndTime (#7003) via Alexander Repty (@alexrepty)
- Remove legacy BackendIntegrationTests targets from RevenueCat.xcodeproj (#7006) via Facundo Menzella (@facumenzella)
- Adopt scene lifecycle in UnitTestsHostApp for iOS 27 support (#6980) via Will Taylor (@fire-at-will)
- Update baseline swiftinterface files for
main(#7004) via RevenueCat Git Bot (@RCGitBot) - [AUTOMATIC] Update generated error codes (#7001) via RevenueCat Git Bot (@RCGitBot)
- Fix tvOS/visionOS build: import AVFoundation in VideoPlayerViewUIView (#7000) via Alexander Repty (@alexrepty)
- Danger: block manual edits to generated error codes (#6996) via Álvaro Brey (@AlvaroBrey)
- Chore(deps): Bump fastlane-plugin-revenuecat_internal from
d911a06to70bf5c7(#6999) via dependabot[bot] (@dependabot[bot]) - Add macCatalyst availability check (#6997) via Alexander Repty (@alexrepty)
- Add mise setup-worktree task for one-command worktree setup (#6983) via Facundo Menzella (@facumenzella)
- Use a snapshot-env-free macOS executor for update-error-codes (#6995) via Álvaro Brey (@AlvaroBrey)
- Use Tuist workspace for BackendIntegrationTests in CI (#6774) via Facundo Menzella (@facumenzella)
- Add update-error-codes workflow (#6981) via Álvaro Brey (@AlvaroBrey)
- [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#6986) via RevenueCat Git Bot (@RCGitBot)
- test(workflows): verify purchase/restore callbacks fire from any workflow step (#6855) via Facundo Menzella (@facumenzella)
- fix(workflows): compute intro eligibility for inherited packages on packageless workflow screens (#6978) via Facundo Menzella (@facumenzella)
- Makes
run_plugin_action_in_current_directoryresilient to missing subdirectories (#6976) via JayShortway (@JayShortway) - Adopt generated ErrorCode (#6970) via Álvaro Brey (@AlvaroBrey)
- Chore(deps): Bump fastlane from 2.236.0 to 2.236.1 (#6975) via dependabot[bot] (@dependabot[bot])
- Add internal RulesEngine evaluate API surface (#6966) via Antonio Pallares (@ajpallares)
- Replace
RulesEngine.loggerglobal with task-local override + module default (#6963) via Antonio Pallares (@ajpallares) - feat(workflows): serve stale workflow detail while revalidating (#6961) via Facundo Menzella (@facumenzella)
- [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#6964) via RevenueCat Git Bot (@RCGitBot)
- Clean up changelogs from workflows PRs (#6960) via Facundo Menzella (@facumenzella)
- feat(workflows): wire workflow step lifecycle events in PaywallViewModel (#6868) via Facundo Menzella (@facumenzella)
- Fix flaky SK1 trial eligibility network request test (#6956) via Rick (@rickvdl)
- Use the
logoperator to strengthen rules-engine fixtures (#6957) via Antonio Pallares (@ajpallares) - Add JSON Logic
logoperator (#6945) via Antonio Pallares (@ajpallares) - Add JSON Logic iteration operators (
none,map,filter,reduce) (#6834) via Antonio Pallares (@ajpallares) - Chore(deps): Bump fastlane from 2.235.0 to 2.236.0 (#6959) via dependabot[bot] (@dependabot[bot])
- fix(workflows): Don't leak the previous user's workflows after a login or logout (#6944) via Facundo Menzella (@facumenzella)
5.78.0
RevenueCat SDK
🐞 Bugfixes
- Xcode 27 Beta Compilation Fix (#6949) via Will Taylor (@fire-at-will)
- Fix badge stack shadow not being rendered (#6921) via Monika Mateska (@MonikaMateska)
- Don't log App Store / StoreKit messages when using a Test Store API key (#6906) via Rick (@rickvdl)
RevenueCatUI SDK
Paywallv2
✨ New Features
- [PW-128] Redact text in V2 paywalls while eligibility checks are pending (#6775) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- fix(workflows): Don't serve stale workflows when the backend rejects the request (#6946) via Facundo Menzella (@facumenzella)
- feat(workflows): persist prefetched workflow detail on disk (#6917) via Facundo Menzella (@facumenzella)
- feat(workflows): bridge workflow exit offer into PaywallViewController (#6911) via Facundo Menzella (@facumenzella)
- feat(workflows): synchronously seed workflow paywall from warm cache (#6905) via Facundo Menzella (@facumenzella)
- fix: skip RootView layout snapshot tests on iOS 15 (#6953) via Antonio Pallares (@ajpallares)
- other(workflows): Run workflow detail prefetches on a dedicated concurrent queue (#6916) via Facundo Menzella (@facumenzella)
- [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#6942) via RevenueCat Git Bot (@RCGitBot)
- Skip Swift Testing predicate tests on Xcode 14/15 (#6937) via Antonio Pallares (@ajpallares)
- Represent ±Infinity in test fixtures via test-only variables (#6936) via Antonio Pallares (@ajpallares)
- Add JSON Logic
minandmaxoperators (#6825) via Antonio Pallares (@ajpallares) - Add JSON Logic iteration operators (
some,all) (#6817) via Antonio Pallares (@ajpallares) - Skip release-or-main when manual snapshot workflows run (#6935) via Antonio Pallares (@ajpallares)
- Migrate base RulesEngineInternal operator unit tests to JSON predicate fixtures (#6885) via Antonio Pallares (@ajpallares)
- docs: add PR sizing and description guidelines to AGENTS.md (#6915) via Antonio Pallares (@ajpallares)
- Update some CI jobs to Xcode 26.5 (#6555) via Antonio Pallares (@ajpallares)
- fix(tuist): add missing test target deps (#6894) via Peter Porfy (@peterporfy)
- Fix flaky tests caused by data races in MockDeviceCache (#6888) via Rick (@rickvdl)
5.77.0
RevenueCat SDK
✨ New Features
- feat(workflows): fetch workflows list with offerings and clear it on identity changes (#6883) via Facundo Menzella (@facumenzella)
🐞 Bugfixes
- Fix: erroneous initializations of the PurchaseHandler from a button (#6827) via Jacob Rakidzich (@JZDesign)
- [Billing Plans]: Use total commitment price for StoreProduct.price when representing a billing plan (#6910) via Will Taylor (@fire-at-will)
RevenueCatUI SDK
🐞 Bugfixes
- Fix decoded image cache concurrency deadlock (#6907) via Cesar de la Vega (@vegaro)
- fix(workflows): preserve workflow page state across navigation (#6889) via Facundo Menzella (@facumenzella)
Paywallv2
✨ New Features
- feat(workflows): Enable workflow resolution for PaywallView (#6887) via Facundo Menzella (@facumenzella)
5.76.0
RevenueCat SDK
✨ New Features
- feat(test-store): Add support for free trials in Test Store (#6884) via Toni Rico (@tonidero)
- Add presented offering context to custom paywall events (#6707) via Rick (@rickvdl)
🐞 Bugfixes
- Fix Paywalls V2 root z-layer stacks not scrolling in bounded containers (#6873) via Monika Mateska (@MonikaMateska)
Storekit 2
✨ New Features
- [Billing Plans] Support fetching & purchasing products with billing plans (#6783) via Will Taylor (@fire-at-will)
🔄 Other Changes
- feat(workflows): add WorkflowEvent model and wire format serialization (#6858) via Facundo Menzella (@facumenzella)
- fix(tests): add missing iOS 14/15 snapshots for BackendGetWorkflowsListTests (#6861) via Rick (@rickvdl)
- Don't send interaction event for workflow trigger button actions (#6771) via Cesar de la Vega (@vegaro)
- feat(networking): add getWorkflows list endpoint (#6853) via Facundo Menzella (@facumenzella)
- fix workflow header transitions (#6880) via Facundo Menzella (@facumenzella)
- fix workflow page transitions (#6877) via Facundo Menzella (@facumenzella)
- Bump Max Log Count in Tests (#6901) via Will Taylor (@fire-at-will)
- feat(workflows): add WorkflowManager with list fetch, prefetch and offeringId resolution (#6882) via Facundo Menzella (@facumenzella)
- feat(workflows): add WorkflowsCache and disk persistence for workflows list (#6881) via Facundo Menzella (@facumenzella)
- feat(remote-config): add network scaffolding for GET /v2/config endpoint (#6854) via Rick (@rickvdl)
- Add JSON Logic string + array operators (#6793) via Antonio Pallares (@ajpallares)
- Fix flaky metadata-sync & consent-status unit tests (#6876) via Rick (@rickvdl)
- Chore(deps): Bump fastlane-plugin-revenuecat_internal from
af7bb5ctoce6a7ef(#6879) via dependabot[bot] (@dependabot[bot]) - refactor: extract Offering.presentedOfferingContext helper and apply … (#6865) via Rick (@rickvdl)
- feat(ads): add rewarded-ad reward event types and AdTracker methods (#6843) via Pol Miro (@polmiro)
- Bump jwt from 2.10.1 to 3.2.0 in /Tests/InstallationTests/CocoapodsInstallation (#6848) via dependabot[bot] (@dependabot[bot])
- [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#6871) via RevenueCat Git Bot (@RCGitBot)
- Add JSON Logic comparison operators (<, <=, >, >=) (#6792) via Antonio Pallares (@ajpallares)
- Allow overriding PaywallsTester bundle ID via Tuist env var (#6869) via Facundo Menzella (@facumenzella)
- Add JSON Logic arithmetic operators (+, -, *, /, %) (#6791) via Antonio Pallares (@ajpallares)
- Lint: Enforce no-new-public-enums policy via SwiftLint custom rule (#6778) via Antonio Pallares (@ajpallares)
- RulesEngineInternal: add JSON Logic predicate evaluator (#6789) via Antonio Pallares (@ajpallares)
- Forbid plain
import RulesEngineInternalvia SwiftLint custom rule (#6788) via Antonio Pallares (@ajpallares) - Add presentWorkflow for workflow (#6847) via Cesar de la Vega (@vegaro)
- Add RulesEngine skeleton module (#6787) via Antonio Pallares (@ajpallares)
5.75.0
RevenueCat SDK
🐞 Bugfixes
- Warm intro eligibility cache for all offerings (#6839) via Antonio Pallares (@ajpallares)
🔄 Other Changes
- Propagate default package across workflow steps (#6790) via Facundo Menzella (@facumenzella)
- Fix workflow paywall safe area clipping (#6816) via Facundo Menzella (@facumenzella)
- ci(admob): run revenuecat-admob-tests on every PR push (#6850) via Pol Miro (@polmiro)
- fix(ads/admob): update test fakes for non-optional CapableAd.responseInfo (#6849) via Pol Miro (@polmiro)
- feat(ads/admob): add impression_id to SSV customRewardText payload (#6841) via Pol Miro (@polmiro)
- refactor(ads/admob): propagate FailureReason through poller and dispatcher (#6842) via Pol Miro (@polmiro)
- Bump fastlane from 2.234.0 to 2.235.0 (#6844) via dependabot[bot] (@dependabot[bot])
5.74.0
RevenueCat SDK
✨ New Features
- Dedupe
Purchases.configure(with:)calls with equalConfiguration(#6811) via Antonio Pallares (@ajpallares)
RevenueCatUI SDK
🐞 Bugfixes
- Fix repeated paywall purchase cancellations (#6826) via Jacob Rakidzich (@JZDesign)
Paywallv2
🐞 Bugfixes
- Add conditional visibility to ButtonComponent (#6821) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Post GitHub PR comment on CI test failure (#6818) via Facundo Menzella (@facumenzella)
- [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#6823) via RevenueCat Git Bot (@RCGitBot)
- Expand
DangerousSettingsAPI tester coverage (#6810) via Antonio Pallares (@ajpallares)
5.73.1
RevenueCatUI SDK
Customer Center
🐞 Bugfixes
- Filter changePlans path for expired subscriptions in CustomerCenter (#6814) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Fix workflow exit offer presentation across sheet boundaries (#6804) via Facundo Menzella (@facumenzella)
- Removes
swiftPMImportfrom cinterop package name (#6803) via JayShortway (@JayShortway) - [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#6819) via RevenueCat Git Bot (@RCGitBot)
- Rename reward verification completion callback (#6800) via Pol Miro (@polmiro)
- Open workflow exit offer as a second workflow (#6756) via Facundo Menzella (@facumenzella)
5.73.0
RevenueCat SDK
✨ New Features
- Reward Verification APIs (#6696) via Pol Miro (@polmiro)
RevenueCatUI SDK
🐞 Bugfixes
- Fix: Auto Scaling Font Setting Serialization (#6769) via Jacob Rakidzich (@JZDesign)
🔄 Other Changes
- Add
close_workflowbutton action (#6753) via Facundo Menzella (@facumenzella) - Make
Offering.PaywallComponentsandpaywallComponentspublic (#6742) via Antonio Pallares (@ajpallares) - Fix Custom Entitlement Computation SPM installation test (#6770) via Antonio Pallares (@ajpallares)
- [Billing Plans]: Introduce Xcode 26.5 build job + handle StoreKitError.paymentMethodBindingConfigurationRequired (#6767) via Will Taylor (@fire-at-will)
- Auto-invalidate VC cache for verified rewards (#6765) via Pol Miro (@polmiro)
- Require rewardVerificationResult callback (#6762) via Pol Miro (@polmiro)
- Bump fastlane from 2.233.1 to 2.234.0 (#6764) via dependabot[bot] (@dependabot[bot])
- Fix example app disable controls during reward verification (#6761) via Pol Miro (@polmiro)
- Add reward verification support to AdMobIntegrationSample example app (#6746) via Pol Miro (@polmiro)
- Remove redundant isVerified from AdMob reward verification result (#6760) via Pol Miro (@polmiro)
- Remove unused test plans (#6759) via Facundo Menzella (@facumenzella)
- Bump nokogiri from 1.19.1 to 1.19.3 in /Tests/InstallationTests/CocoapodsInstallation (#6757) via dependabot[bot] (@dependabot[bot])
- Replace RevenueCatUITestsDev with PaywallScreenshotTests Tuist project (#6744) via Facundo Menzella (@facumenzella)
- Resolve exit offer offering ID from workflow singleStepFallbackId (#6755) via Facundo Menzella (@facumenzella)
- Parse exit_offers field on WorkflowScreen (#6754) via Facundo Menzella (@facumenzella)
5.72.0
RevenueCat SDK
✨ New Features
- Add support for intro offer eligibility override in non-cec mode (#6748) via Mark Villacampa (@MarkVillacampa)
RevenueCatUI SDK
Paywallv2
✨ New Features
- FEAT: Allow disabling of automatic font scaling (#6727) via Jacob Rakidzich (@JZDesign)
🔄 Other Changes
- Resolve price/period variables on packageless workflow screens (#6737) via Facundo Menzella (@facumenzella)
- [Billing Plans]: Parse platform_product_plan_identifier in offerings response (#6738) via Will Taylor (@fire-at-will)
- fix for CI - add missing JSON field (#6747) via Jacob Rakidzich (@JZDesign)
- chore: add logging to reward verification (#6745) via Peter Porfy (@peterporfy)
- Add internal reward-verification adapter pipeline (#6663) via Pol Miro (@polmiro)
5.71.0
RevenueCatUI SDK
Paywallsv2
🐞 Bugfixes
- Fix fullscreen paywall overflow for fill-mode videos (#6726) via Monika Mateska (@MonikaMateska)
- Fix: Enforce vertical bounds in RootView (#6708) via Jacob Rakidzich (@JZDesign)
- Fix layout direction override (PWENG-39) (#6723) via Alexander Repty (@alexrepty)
🔄 Other Changes
- Prewarm workflow assets after offerings refresh (#6732) via Facundo Menzella (@facumenzella)
- Fix workflow page transition layering (#6717) via Facundo Menzella (@facumenzella)
- Bump fastlane-plugin-revenuecat_internal from
21e02ectoaf7bb5c(#6734) via dependabot[bot] (@dependabot[bot]) - Parse single_step_fallback_id in PublishedWorkflow (#6733) via Facundo Menzella (@facumenzella)
- Introduce Tracking namespace and extract delegate stores (#6681) via Pol Miro (@polmiro)
- Add BYPASS_SIMULATED_STORE_RELEASE_CHECK compilation flag (#6710) via Antonio Pallares (@ajpallares)
- Bump fastlane-plugin-revenuecat_internal from
2d11430to21e02ec(#6731) via dependabot[bot] (@dependabot[bot]) - Only run snapshot-bump workflow when
.versionchanged (#6724) via Antonio Pallares (@ajpallares) - Bump shared rerun-danger workflow to pick up missing-workflow guard (#6728) via Rick (@rickvdl)
- Bump fastlane-plugin-revenuecat_internal from
d24ab26to2d11430(#6729) via dependabot[bot] (@dependabot[bot]) - [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#6730) via RevenueCat Git Bot (@RCGitBot)
- Move deploy-purchase-tester after make-release (#6725) via Antonio Pallares (@ajpallares)
- Bump fastlane from 2.233.0 to 2.233.1 (#6718) via dependabot[bot] (@dependabot[bot])
- Fail PRs when Swift files are missing from RevenueCat.xcodeproj (#6716) via Antonio Pallares (@ajpallares)
- Update sdks-common-config orb to v3.20.0 (#6709) via Rick (@rickvdl)
5.70.0
RevenueCat SDK
✨ New Features
- Add placement and targeting rule to paywall events (#6476) via Dan Pannasch (@dpannasch)
- Move paywall analytics APIs to Internal SPI (#6700) via Monika Mateska (@MonikaMateska)
🐞 Bugfixes
- Replace print with Logger.debug in ISODurationFormatter (#6691) via Facundo Menzella (@facumenzella)
RevenueCatUI SDK
🐞 Bugfixes
- FIX: Optimize time to load paywalls (#6694) via Jacob Rakidzich (@JZDesign)
Paywallsv2
🐞 Bugfixes
- Fix product.currency_symbol for mismatched formatter locales (#6572) via Facundo Menzella (@facumenzella)
Customer Center
🐞 Bugfixes
- Fix Customer Center showing wrong management options for expired subscribers (#6674) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Add explicit directional step transitions to WorkflowPaywallView (#6703) via Facundo Menzella (@facumenzella)
- Add WorkflowPaywallView for multipage workflow step rendering (#6692) via Facundo Menzella (@facumenzella)
- Add workflowTrigger to ButtonComponent.Action (#6693) via Facundo Menzella (@facumenzella)
- Fix WorkflowTriggerAction.stepId to be optional (String?) (#6687) via Facundo Menzella (@facumenzella)
- Add workflow-based paywall resolution for multipage paywalls (#6640) via Facundo Menzella (@facumenzella)
- Add workflow-based paywall resolution (#6675) via Facundo Menzella (@facumenzella)
- Add RequestSizeCalculation.swift to RevenueCat.xcodeproj (#6713) via Antonio Pallares (@ajpallares)
- Bump nokogiri from 1.19.2 to 1.19.3 (#6705) via dependabot[bot] (@dependabot[bot])
- Align workflow trigger matching with Android: typed enums + sealed WorkflowTriggerAction (#6698) via Facundo Menzella (@facumenzella)
- [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#6272) via RevenueCat Git Bot (@RCGitBot)
- Expose Logger to internal consumers (#6690) via Pol Miro (@polmiro)
- Delete claude.yml workflow (#6688) via Cesar de la Vega (@vegaro)
- Decode reward payload in RewardVerification poll response (#6678) via Pol Miro (@polmiro)
- Document Tuist environment variables in AGENTS.md (#6689) via Facundo Menzella (@facumenzella)
- Add WorkflowContext to surface full workflow state from PurchaseHandler (#6685) via Facundo Menzella (@facumenzella)
- Add workflowTriggerAction environment hook for button workflow triggers (#6684) via Facundo Menzella (@facumenzella)
- Add swiftinterface API diff tracking for RevenueCatUI (#6450) via Facundo Menzella (@facumenzella)
- Add WorkflowNavigator for multipage workflow step navigation (#6680) via Facundo Menzella (@facumenzella)
- Add id to PaywallButtonComponent (#6679) via Facundo Menzella (@facumenzella)
- Rename internal SSV symbols, URL and metric to RewardVerification (#6667) via Pol Miro (@polmiro)
5.69.0
RevenueCat SDK
🐞 Bugfixes
- Resolve the issue around tab control context identity (PWENG-31) (#6634) via Alexander Repty (@alexrepty)
- Fall back to getCustomerInfo when posting unfinished receipt fails (#6650) via Rick (@rickvdl)
- fix(RevenueCatUI): legacy paywall
component_nameparity with Android (#6662) via Monika Mateska (@MonikaMateska) - Clip carousel pages to card width to fix transient overlay artifact (#6657) via Monika Mateska (@MonikaMateska)
- Fix SPM 'unhandled file' warning for RevenueCatUIDev.xctestplan (#6625) via Rick (@rickvdl)
RevenueCatUI SDK
🐞 Bugfixes
- Defer paywall dismissal after purchase callbacks (#6621) via Jacob Rakidzich (@JZDesign)
Paywallsv2
🐞 Bugfixes
- Replace fatalError with assertionFailure + throw for fallbackHeader (#6636) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Add workflows network layer for multipage paywalls (#6557) via Cesar de la Vega (@vegaro)
- fix: fallback_pr_lookup boolean check in Fastfile (#6672) via Antonio Pallares (@ajpallares)
- Add opt-in bump_with_fallback_pr_lookup CircleCI parameter (#6669) via Antonio Pallares (@ajpallares)
- Bump fastlane-plugin-revenuecat_internal from
b822f01tod24ab26(#6670) via dependabot[bot] (@dependabot[bot]) - AdMob SSV: add
@_spi(Internal)poll endpoint onPurchases(#6641) via Pol Miro (@polmiro) - Skip CI on auto-generated snapshot branches (#6633) via Rick (@rickvdl)
- Add TUIST_LAUNCH_ARGUMENTS env var for injecting launch arguments at generation time (#6664) via Facundo Menzella (@facumenzella)
- Add workflow to re-run Danger on PR label change (#6660) via Rick (@rickvdl)
- Fix rcgitbot_please_test token permissions for PR comments (#6655) via Antonio Pallares (@ajpallares)
- Add pr:other label to auto-generated snapshot PRs (#6631) via Rick (@rickvdl)
- Add TUIST_SWIFT_CONDITIONS for injecting compiler flags at project generation time (#6661) via Facundo Menzella (@facumenzella)
- Skip SPM Release Build steps during snapshot-generation pipelines (#6659) via Antonio Pallares (@ajpallares)
- Fix iOS 15 snapshot-generation job hanging indefinitely (#6658) via Antonio Pallares (@ajpallares)
- Bump fastlane-plugin-revenuecat_internal from
e348913tob822f01(#6651) via dependabot[bot] (@dependabot[bot]) - Use env-var interpolation in rcgitbot_please_test workflow (#6649) via Antonio Pallares (@ajpallares)
- Expose
apiKeyonPurchasesvia@_spi(Internal)(#6635) via Pol Miro (@polmiro) - Bump fastlane from 2.232.2 to 2.233.0 (#6639) via dependabot[bot] (@dependabot[bot])
- Bump fastlane-plugin-revenuecat_internal from
a1eed48toe348913(#6638) via dependabot[bot] (@dependabot[bot]) - Add @RCGitBot please test on-demand job trigger (#6607) via Antonio Pallares (@ajpallares)
- Migrate CircleCI to dynamic configuration (#6605) via Antonio Pallares (@ajpallares)
- Bump fastlane from 2.229.1 to 2.232.2 and fix Mac Catalyst archive export (#6370) via dependabot[bot] (@dependabot[bot])
- Add automated GitHub releases for purchases-ios-admob (#6537) via Pol Miro (@polmiro)
- Add missing source files to RevenueCat.xcodeproj (#6624) via Rick (@rickvdl)
- UI events for paywall component interactions (#6523) via Monika Mateska (@MonikaMateska)
- Run paywalls V1 snapshot recording on main and release branches (#6620) via Rick (@rickvdl)
- fix(ads): remove mistake masking behavior (#6613) via Peter Porfy (@peterporfy)
- Use shared run_maestro_e2e_tests action from fastlane plugin (#6616) via Antonio Pallares (@ajpallares)
- Bump fastlane-plugin-revenuecat_internal from
20911d1toa1eed48(#6618) via dependabot[bot] (@dependabot[bot])
5.68.0
RevenueCat SDK
✨ New Features
- feat(ads): add possibility to update fullscreen content delegate (#6581) via Peter Porfy (@peterporfy)
- Convert full-screen ad loading to async/throws (#6592) via Antonio Pallares (@ajpallares)
- feat(ads): placement override at show time (#6570) via Peter Porfy (@peterporfy)
🐞 Bugfixes
- Fixes incorrect icon reuse in legacy Paywalls (#6611) via JayShortway (@JayShortway)
- Fix macOS build in record_and_push_paywall_template_screenshots (#6612) via Rick (@rickvdl)
RevenueCatUI SDK
🐞 Bugfixes
- Fix: Use DefaultPaywallView in all the places (#6580) via Jacob Rakidzich (@JZDesign)
- Fix image size/render flow (#6593) via Jacob Rakidzich (@JZDesign)
Paywallsv2
✨ New Features
- Add header component (#6604) via Cesar de la Vega (@vegaro) and (#6548) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Sort no-paywall offerings to bottom of list in PaywallsTester (#6610) via Cesar de la Vega (@vegaro)
- Upload V1 template snapshots to Emerge via BYOS (#6574) via Rick (@rickvdl)
- Bump fastlane-plugin-revenuecat_internal from
894bb1bto20911d1(#6594) via dependabot[bot] (@dependabot[bot]) - Make RCAdMobFullScreenContentDelegate @MainActor (#6591) via Antonio Pallares (@ajpallares)
- Bump fastlane-plugin-revenuecat_internal from
ceecf91to894bb1b(#6583) via dependabot[bot] (@dependabot[bot]) - Update CODEOWNERS default owner to @RevenueCat/sdk (#6579) via Antonio Pallares (@ajpallares)
5.67.2
RevenueCatUI SDK
Paywallsv2
🐞 Bugfixes
- PW-1178 | Add visible flag and overrides support to PackageComponent (#6520) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Bump addressable from 2.8.8 to 2.9.0 (#6563) via dependabot[bot] (@dependabot[bot])
- Bump addressable from 2.8.7 to 2.9.0 in /Tests/InstallationTests/CocoapodsInstallation (#6561) via dependabot[bot] (@dependabot[bot])
- Fix iOS 14.5 simulator runtime install retry logic (#6533) via Rick (@rickvdl)
- Bump fastlane-plugin-revenuecat_internal from
6289be1toceecf91(#6560) via dependabot[bot] (@dependabot[bot]) - Make PaywallComponents API @_spi(Internal) (#6551) via Antonio Pallares (@ajpallares)
- Bump fastlane-plugin-revenuecat_internal from
5d6e93fto6289be1(#6550) via dependabot[bot] (@dependabot[bot]) - Bump fastlane-plugin-revenuecat_internal from
b5a7159to5d6e93f(#6547) via dependabot[bot] (@dependabot[bot])
5.67.1
RevenueCat SDK
🐞 Bugfixes
- [EXTERNAL] Fix #5549: Use entitlement identifier as title for promotional entitlements (#6530) via @cruisediary (#6539) via Cesar de la Vega (@vegaro)
- Fix: icon sizing bug - Margins calculated as padding (#6538) via Jacob Rakidzich (@JZDesign)
- Fix flaky iOS 26 UI snapshot and event tests (#6511) via Rick (@rickvdl)
- Fix xcframework installation tests to actually validate xcframeworks (#6527) via Rick (@rickvdl)
- Fix XCFramework compilation error caused by SubscriptionPeriod Codable conformance (#6526) via Rick (@rickvdl)
RevenueCatUI SDK
Customer Center
🐞 Bugfixes
- Fix: purchaseIdentifier nil on custom action paths (including post-promo-offer dismissal) (#6488) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Bump fastlane-plugin-revenuecat_internal from
f11fe40tob5a7159(#6540) via dependabot[bot] (@dependabot[bot]) - Skip external dependencies in tuist install on CI (#6536) via Rick (@rickvdl)
- Rollback changes in #5660 -> Didn't work, other fix in place (#6534) via Jacob Rakidzich (@JZDesign)
- Rename simulated store purchase alert to "Test Store Purchase" (#6532) via Antonio Pallares (@ajpallares)
- Bump fastlane-plugin-revenuecat_internal from
9a6911btof11fe40(#6524) via dependabot[bot] (@dependabot[bot])
5.67.0
RevenueCat SDK
✨ New Features
- Adds ObjC inits for Paywalls-only in UIKit (#6507) via JayShortway (@JayShortway)
🐞 Bugfixes
- Sync ATT consent status on attribute sync (#6485) via Rick (@rickvdl)
- Use caches directory for AdEventStore and FeatureEventStore on tvOS (#6490) via Antonio Pallares (@ajpallares)
- Fix "Failed to create cache directory" error log on tvOS (#6487) via Antonio Pallares (@ajpallares)
RevenueCatUI SDK
🐞 Bugfixes
- Fix alert title showing raw error domain for non-ErrorCode errors (#6512) via Toni Rico (@tonidero)
Customer Center
✨ New Features
- Feat: Restore gating in paywalls UI (#6392) via Jacob Rakidzich (@JZDesign)
🐞 Bugfixes
- Fix @Published mutations off main actor in PurchaseHistoryViewModel error path (#6516) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- security: pin GitHub Actions to SHA hashes (#6514) via Alfonso Embid-Desmet (@alfondotnet)
- Add VanillaAdTrackingSample example app (#6504) via Pol Miro (@polmiro)
- Fix CI: use SSH for private repo clones in paywall screenshot job (#6517) via Antonio Pallares (@ajpallares)
- Fix iOS 14.5 simulator runtime install hanging in CI (#6513) via Rick (@rickvdl)
- Fix flaky tvOS CI test in event store tests (#6506) via Antonio Pallares (@ajpallares)
- Bump activesupport from 7.2.2.1 to 7.2.3.1 in /Tests/InstallationTests/CocoapodsInstallation (#6509) via dependabot[bot] (@dependabot[bot])
- Bump activesupport from 7.2.2.1 to 7.2.3.1 (#6508) via dependabot[bot] (@dependabot[bot])
- Add AdMobIntegrationSample example app xcodeproj and config (#6502) via Pol Miro (@polmiro)
- Unify event store directory resolution via DirectoryHelper (#6501) via Antonio Pallares (@ajpallares)
- Replace custom tag-release-branch with orb's tag-current-branch (#6505) via Antonio Pallares (@ajpallares)
- Bump json from 2.16.0 to 2.17.1.2 (#6482) via dependabot[bot] (@dependabot[bot])
- Add AdMob adapter to release pipeline (#6486) via Pol Miro (@polmiro)
- Move AdMobIntegrationSample Tuist project to Projects/ (#6493) via Antonio Pallares (@ajpallares)
- Fix API diff check by replacing external tool with direct file comparison (#6459) via Antonio Pallares (@ajpallares)
- Bump nokogiri from 1.19.1 to 1.19.2 (#6489) via dependabot[bot] (@dependabot[bot])
- Add tvOS support to RCTTester app (#6483) via Antonio Pallares (@ajpallares)
- AdMob adapter (#6278) via Pol Miro (@polmiro)
5.66.0
RevenueCat SDK
🐞 Bugfixes
- Pass presentedOfferingContext and paywallEvent through SK2 purchase path instead of caching (#6472) via Antonio Pallares (@ajpallares)
RevenueCatUI SDK
Customer Center
✨ New Features
- Add PromotionalOfferSucceededHandler with purchase data (#6420) via Cesar de la Vega (@vegaro)
🔄 Other Changes
- Fix concurrency error in CustomerCenterActionWrapperTests on Xcode 15 (#6477) via Antonio Pallares (@ajpallares)
- Improve conditional visibility previews (#6471) via Facundo Menzella (@facumenzella)
- Replace enable-auto-merge-release-pr with merge-release-pr orb job (#6470) via Antonio Pallares (@ajpallares)
- Bump fastlane-plugin-revenuecat_internal from
3e8c384to9a6911b(#6469) via dependabot[bot] (@dependabot[bot])
5.65.0
RevenueCat SDK
🐞 Bugfixes
- [EXTERNAL] Fix xcframework zip when used as a binaryTarget in SPM (#6461) via @tehsven (#6464) via Antonio Pallares (@ajpallares)
RevenueCatUI SDK
✨ New Features
- Feature: Update fallback paywall (#6359) via Jacob Rakidzich (@JZDesign)
🔄 Other Changes
- Remove experimental annotation from trackCustomPaywallImpression (#6466) via Rick (@rickvdl)
- Add offering_id to custom paywall impression event (#6456) via Rick (@rickvdl)
- Add codesign verification after zipping xcframework (#6465) via Antonio Pallares (@ajpallares)
- Bump fastlane-plugin-revenuecat_internal from
e146447to3e8c384(#6455) via dependabot[bot] (@dependabot[bot])
5.64.0
RevenueCat SDK
✨ New Features
- Make custom variable number/bool setters public for UIKit (#6452) via Facundo Menzella (@facumenzella)
- Send X-Installation-Method header in all API requests (#6431) via Antonio Pallares (@ajpallares)
RevenueCatUI SDK
🐞 Bugfixes
- Fix: Clear in-memory offerings cache on locale override to prevent stale paywall data (#6446) via Antonio Pallares (@ajpallares)
🔄 Other Changes
- Remove unnecessary throws from view model inits (#6426) via Facundo Menzella (@facumenzella)
- Fix PaywallsTester tap to use presentPaywall for exit offer support (#6449) via Drago Crnjac (@popcorn)
5.63.0
RevenueCat SDK
✨ New Features
- Expose trackCustomPaywallImpression as experimental public API (#6427) via Rick (@rickvdl)
🐞 Bugfixes
- Fix RCT Tester deploy failing due to provisioning profile on SPM targets (#6444) via Antonio Pallares (@ajpallares)
RevenueCatUI SDK
🐞 Bugfixes
- Fix presentPaywall returning PURCHASED without actual purchase in PurchasesAreCompletedBy.myApp (#6442) via Toni Rico (@tonidero)
🔄 Other Changes
- Use Xcode 26 for Purchase Tester CI deployment (#6441) via Antonio Pallares (@ajpallares)
- Remove "my apps" tab from Paywalls Tester (#6390) via Cesar de la Vega (@vegaro)
5.62.0
RevenueCat SDK
🐞 Bugfixes
- Restore
rethrowsontoPresentedOverrides(#6419) via Facundo Menzella (@facumenzella) - Fix reduced timeouts being used for HTTP requests when a proxy URL is configured (#6416) via Rick (@rickvdl)
RevenueCatUI SDK
Paywallv2
✨ New Features
- [Rules] Introduce rule system (#6285) via Facundo Menzella (@facumenzella)
Customer Center
✨ New Features
- Track paywall source for Customer Center purchases (#5691) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Remove automatic Claude code review workflow (#6429) via Cesar de la Vega (@vegaro)
- Bump fastlane-plugin-revenuecat_internal from
f5c099btoe146447(#6428) via dependabot[bot] (@dependabot[bot]) - Add slack-notify-on-fail to more CI jobs (#6328) via Antonio Pallares (@ajpallares)
- Add priority flush with rate limiting and queuing (#6408) via Rick (@rickvdl)
- Refactor ConditionContext creation and simplify presented overrides (#6423) via Facundo Menzella (@facumenzella)
- Fix PaywallsV2 label name in AGENTS.md (#6424) via Facundo Menzella (@facumenzella)
- Update sdks-common-config orb to 3.14.0 (#6417) via Antonio Pallares (@ajpallares)
- Support different modes for depending on RevenueCat when using Tuist (#5888) via Antonio Pallares (@ajpallares)
5.61.0
RevenueCat SDK
✨ New Features
- [CIA-5346] Appstack integration to ios sdk (#6366) via Damian Rubio (@DamianRubio)
🐞 Bugfixes
- [CEC] Do not fallback to offline entitlements if post receipt returns error (#6393) via Mark Villacampa (@MarkVillacampa)
RevenueCatUI SDK
🐞 Bugfixes
- Fix presented offering context lost in Customer Center purchases (#6375) via Antonio Pallares (@ajpallares)
Paywallv2
🐞 Bugfixes
- Fix carousel blocking vertical scroll in parent ScrollView (#6284) via Facundo Menzella (@facumenzella)
- Fix exit offer crash in MY_APP mode by propagating purchase handlers (#6391) via Toni Rico (@tonidero)
🔄 Other Changes
- Update to use CI commands from CircleCI orb (#6413) via Toni Rico (@tonidero)
- Bump fastlane-plugin-revenuecat_internal from
8cd957ftof5c099b(#6411) via dependabot[bot] (@dependabot[bot]) - Add internal trackCustomPaywallImpression method (#6388) via Rick (@rickvdl)
- Improve Danger xcodeproj sync warning message (#6405) via Facundo Menzella (@facumenzella)
- Add default/fallback paywall UI components and assets (#6342) via Jacob Rakidzich (@JZDesign)
- Update sdks-common-config orb to 3.13.0 (#6402) via Cesar de la Vega (@vegaro)
- Fix stale PresentedOfferingContext on purchase failure or cancellation (#6387) via Antonio Pallares (@ajpallares)
- Fix CI clone failures after GitHub App migration (#6399) via Antonio Pallares (@ajpallares)
- Add Customer Center to RCT Tester app (#6386) via Antonio Pallares (@ajpallares)
- Guard switchUser against preview mode (#6371) via Monika Mateska (@MonikaMateska)
- Enable auto-merge on release PR after deploy (#6363) via Antonio Pallares (@ajpallares)
- Log warning if SK2 purchase doesnt error but returns transaction with expiration date in the past (#6374) via Will Taylor (@fire-at-will)
- Fix scheduled pipelines triggering unintended workflows (#6369) via Antonio Pallares (@ajpallares)
- Require PR approval for release tagging (#6243) via Antonio Pallares (@ajpallares)
- Update CircleCI orb sdks-common-config to 3.12.0 (#6368) via Rick (@rickvdl)
- Add PaywallWarning model and validation documentation (#6341) via Jacob Rakidzich (@JZDesign)
- Bump fastlane-plugin-revenuecat_internal from
ea6276cto8cd957f(#6364) via dependabot[bot] (@dependabot[bot]) - Add app style extractor for icon color extraction (#6340) via Jacob Rakidzich (@JZDesign)
- CI: Unify CI jobs to reduce machine count (#6332) via Antonio Pallares (@ajpallares)
5.60.0
RevenueCat SDK
✨ New Features
- [EXTERNAL] Support SubscriptionStoreContentView (#6309) via @junpluse (#6320) via Rick (@rickvdl)
🐞 Bugfixes
- Fix extractPurchaseDates crash (#6337) via Will Taylor (@fire-at-will)
- Add compiler check for SubscriptionStoreContentView API (#6326) via Rick (@rickvdl)
- Fix millisecond precision loss in stored ad and feature events (#6304) via Pol Miro (@polmiro)
RevenueCatUI SDK
🐞 Bugfixes
- FIX: Video Low Res only on first paywall (#6307) via Jacob Rakidzich (@JZDesign)
- Fix purchase error alert not displaying when using custom purchase logic (#6330) via Rick (@rickvdl)
Paywallv2
🐞 Bugfixes
- Share PaywallPromoOfferCache between main and exit offer paywalls (#6180) via Facundo Menzella (@facumenzella)
- Fix custom variables not propagating to exit offers (#6302) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- FIX: Update ColorComputationHelpers.swift to account for WatchOS (#6355) via Jacob Rakidzich (@JZDesign)
- Add color computation helpers for fallback paywall (#6339) via Jacob Rakidzich (@JZDesign)
- Fix snapshot generation (#6343) via Antonio Pallares (@ajpallares)
- Fix PaywallsTester macOS build (#6338) via Facundo Menzella (@facumenzella)
- Update Tuist Package.resolved after swift-snapshot-testing bump (#6336) via Antonio Pallares (@ajpallares)
- Update Tuist swift-snapshot-testing dependency to match Package.swift (#6335) via Antonio Pallares (@ajpallares)
- CI: Add daily CocoaPods trunk token keepalive (#6331) via Toni Rico (@tonidero)
- Bump fastlane-plugin-revenuecat_internal from
afc9219toea6276c(#6329) via dependabot[bot] (@dependabot[bot]) - Fix flaky PurchasesAdEventsTests (#6327) via Cesar de la Vega (@vegaro)
- CI: Use Xcode 14.3.1 for iOS 15 tests (#6297) via Antonio Pallares (@ajpallares)
- Repurpose
@RCGitBot please testto approve CircleCI hold job (#6274) via Antonio Pallares (@ajpallares) - Restructure CI: split PR and release workflows with gated full test suite (#6241) via Antonio Pallares (@ajpallares)
- Disable record on regular snapshot tests to prevent from passing after retry (#6303) via Cesar de la Vega (@vegaro)
- Bump swiftinterface Xcode version to 26.3 (#6321) via Rick (@rickvdl)
- Add .claude/ to .gitignore (#6324) via Facundo Menzella (@facumenzella)
- Add CI action for recording new baseline swiftinterface (#6312) via Rick (@rickvdl)
- Generating new test snapshots for
main- revenuecatui-watchos (#6318) via RevenueCat Git Bot (@RCGitBot) - Generating new test snapshots for
main- revenuecatui-watchos (#6317) via RevenueCat Git Bot (@RCGitBot) - Generating new test snapshots for
main- ios-26 (#6306) via RevenueCat Git Bot (@RCGitBot) create_snapshot_prwhen recording RevenueCatUI snapshots (#6314) via Cesar de la Vega (@vegaro)- Remove XC-alltests test plan (#6313) via Cesar de la Vega (@vegaro)
- Bump nokogiri from 1.18.9 to 1.19.1 in /Tests/InstallationTests/CocoapodsInstallation (#6308) via dependabot[bot] (@dependabot[bot])
- Fix flaky UserDefaults tests (#6301) via Cesar de la Vega (@vegaro)
- Add tests for badge override fallback and missing localization (#6273) via Facundo Menzella (@facumenzella)
- Add code review guidelines to CLAUDE.md (#6300) via Facundo Menzella (@facumenzella)
5.59.2
🔄 Other Changes
- Add internal API to debug tracked events (#6289) via Antonio Pallares (@ajpallares)
- Add PR label guidelines to AGENTS.md (#6295) via Facundo Menzella (@facumenzella)
- Add configurable search term for PaywallsTester Sandbox Paywalls tab (#6293) via Facundo Menzella (@facumenzella)
5.59.1
RevenueCat SDK
🐞 Bugfixes
- Fix
CustomerInfoManagerdeadlock (#6276) via Cesar de la Vega (@vegaro) - Fix xcode 14 build (#6275) via Cesar de la Vega (@vegaro)
- Remove locks on read and write UserDefaults operations in DeviceCache (#5959) via Cesar de la Vega (@vegaro)
RevenueCatUI SDK
Paywallv2
🐞 Bugfixes
- Fix compilation error in VariableHandlerV2 offer price functions (#6283) via Cesar de la Vega (@vegaro)
- Fix displaying badge only in selected override and prevent fallback paywall for missing localizations (#6269) via Cesar de la Vega (@vegaro)
- Fix discount prices not respecting
showZeroDecimalPlacePrices(#6261) via Cesar de la Vega (@vegaro) - [Paywalls V2] Fix video playback glitch when URL changes (#6254) via Facundo Menzella (@facumenzella)
- Fix
product.offer_*variables show intro offer price when ineligible (#6242) via Cesar de la Vega (@vegaro)
🔄 Other Changes
- Add AGENTS.md for AI coding agent guidelines (#6264) via Facundo Menzella (@facumenzella)
- Reduce parameter count in
VariableHandlerV2andTextComponentViewModel(#6260) via Cesar de la Vega (@vegaro) - Fix CI caching for xcbeautify and xcodes (#6280) via Antonio Pallares (@ajpallares)
- RCT Tester app: automate upload to TestFlight via CI (#6265) via Antonio Pallares (@ajpallares)
- Bump nokogiri from 1.18.10 to 1.19.1 (#6277) via dependabot[bot] (@dependabot[bot])
- RCT Tester app: add app icon (#6256) via Antonio Pallares (@ajpallares)
- RCT Tester app Part 4 - Add more APIs and features to the RCT Tester app (#6240) via Antonio Pallares (@ajpallares)
- RCT Tester app Part 3 - add different RevenueCat SDK integrations (#6191) via Antonio Pallares (@ajpallares)
- CI: Consolidate installation tests jobs (all but Carthage) (#6266) via Antonio Pallares (@ajpallares)
- Use existing hasPaywall property in PaywallsTester (#6270) via Facundo Menzella (@facumenzella)
- Fix PaywallsTester build errors in
CustomVariablesEditorView(#6271) via Cesar de la Vega (@vegaro) - Improve PaywallsTester list display and sorting (#6263) via Facundo Menzella (@facumenzella)
- CI: Unify visionOS build with tvOS/watchOS/macOS build job (#6268) via Antonio Pallares (@ajpallares)
5.59.0
RevenueCatUI SDK
Paywall Components
✨ New Features
- [SDK-4254] Add onPurchaseInitiated delegate method to PaywallViewController (#6257) via Toni Rico (@tonidero)
Paywallv2
🐞 Bugfixes
- [Paywalls V2] Fix video performance in multi-page carousels (#6196) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Update CI to use Xcode 26.3 (#6258) via Antonio Pallares (@ajpallares)
- Bump fastlane-plugin-revenuecat_internal from
e6454e3toafc9219(#6253) via dependabot[bot] (@dependabot[bot]) - Fix Xcode 15 warning for main actor-isolated background task calls (#6251) via Antonio Pallares (@ajpallares)
- Bump faraday from 1.10.4 to 1.10.5 in /Tests/InstallationTests/CocoapodsInstallation (#6249) via dependabot[bot] (@dependabot[bot])
- Bump faraday from 1.10.4 to 1.10.5 (#6250) via dependabot[bot] (@dependabot[bot])
5.58.1
RevenueCatUI SDK
Paywallv2
🐞 Bugfixes
- fix: improve video autoplay with thumbnail fallback and fade transition (#6186) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Add custom StoreKit config support to PaywallsTester (#6237) via Facundo Menzella (@facumenzella)
- [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#5951) via RevenueCat Git Bot (@RCGitBot)
- Adds support for Compose Resources (#6239) via JayShortway (@JayShortway)
- Include attribution data in POST /receipt when using SK2 in Observer mode (#6233) via Antonio Pallares (@ajpallares)
5.58.0
RevenueCat SDK
✨ New Features
- [CEC Mode]: Introduce isPurchaseAllowedByRestoreBehavior() (#6192) via Will Taylor (@fire-at-will)
RevenueCatUI SDK
Paywallv2
🐞 Bugfixes
- Fix product.currency_symbol to use product currency instead of locale (#6209) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Cache
presentedOfferingContextwhen making a purchase from a paywall (#6228) via Antonio Pallares (@ajpallares) - Add XCFramework installation tests to the release checks (#6195) via Rick (@rickvdl)
- Deprioritize debug health check to avoid blocking user-facing requests at startup (#6230) via Antonio Pallares (@ajpallares)
5.57.2
🔄 Other Changes
- Make networkName nullable in ad event data types (#6229) via Pol Miro (@polmiro)
- Remove networkName from AdFailedToLoad event (#6208) via Pol Miro (@polmiro)
- Excluding xcarchive and separate dSYMs folder from XCFramework in order to reduce download size (#5967) via Rick (@rickvdl)
5.57.1
RevenueCatUI SDK
Paywallv2
🐞 Bugfixes
- Make paywall font registration idempotent (#6193) via Facundo Menzella (@facumenzella)
- fix: fixes video autoplay on first paywall open by removing broken stagedURL.publisher observation (#6114) @erenkulaksiz (#6185) via Facundo Menzella (@facumenzella)
- [EXTERNAL] fix: listen willResignActiveNotification and didBecomeActiveNotification to autoplay the video (#6116) @erenkulaksiz (#6184) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Remove fallback url caching mechanism (#6188) via Toni Rico (@tonidero)
- RCT Tester app Part 2 - Offerings + User management + Configuration persistence (#6189) via Antonio Pallares (@ajpallares)
- RCT Tester app Part 1 - Tuist project + App setup (#6187) via Antonio Pallares (@ajpallares)
- Fix
integration-tests-allon CI (#6190) via Antonio Pallares (@ajpallares) - [Maestro] Improve e2e test stability (#6182) via Antonio Pallares (@ajpallares)
5.57.0
RevenueCat SDK
✨ New Features
- Adds more ObjC compatibility (#5999) via JayShortway (@JayShortway)
🐞 Bugfixes
- Fix potential infinite recursion in MagicWeather (#6146) via Tarek M. Ben Lechhab (@bilqisium)
RevenueCatUI SDK
Paywallv2
✨ New Features
- feat: Add Custom Paywall Variables support (#6080) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Fix
backend-integration-tests-custom-entitlementson CI (#6179) via Antonio Pallares (@ajpallares) - Only run 1 backend integration tests CI job to generate all snapshots (#6170) via Antonio Pallares (@ajpallares)
- Autogenerate snapshots for more tests (#5958) via Antonio Pallares (@ajpallares)
- Only consider source files for public enums Danger rule (#6156) via Antonio Pallares (@ajpallares)
- Fix integration test (#6157) via Antonio Pallares (@ajpallares)
- Fix API tests (#6155) via Antonio Pallares (@ajpallares)
- Add troubleshooting link to the generic error message (#6152) via Engin Kurutepe (@ekurutepe)
5.56.1
RevenueCatUI SDK
🐞 Bugfixes
- Fix price_per_period for non-subscription products (PW-69) (#6136) via Drago Crnjac (@popcorn)
Paywallv2
🐞 Bugfixes
- [EXTERNAL] fix: dont show video in now playing (control center/lock screen #6115 via @erenkulaksiz (#6139) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Consolidate Maestro E2E tests into a single CI job (#6147) via Antonio Pallares (@ajpallares)
- Support for adFormat parameter in AdEvent (#6129) via Peter Porfy (@peterporfy)
- Removed support for Swift 5.7 and removed related Swift version checks (#6142) via Rick (@rickvdl)
5.56.0
RevenueCat SDK
✨ New Features
- Add Galaxy to Store Enum (#6127) via Will Taylor (@fire-at-will)
🐞 Bugfixes
- Making sure that the SK2 StorefrontListener only calls the delegate when the storefront identifier actually changed (#6030) via Rick (@rickvdl)
- Fix date parsing to support ISO8601 with fractional seconds (#6120) via Josh Holtz (@joshdholtz)
🔄 Other Changes
- Remove CircleCI M1 macOS executors (#6132) via Rick (@rickvdl)
- Introduce adyen to CI pipeline for public API changes detection (#5484) via Facundo Menzella (@facumenzella)
- Avoid public enums (#6140) via Facundo Menzella (@facumenzella)
- Simplify ad tracking API to fire-and-forget pattern for Swift and Obj-C (#6133) via Pol Miro (@polmiro)
- Small cleanup of
PurchasesOrchestrator(#6135) via Antonio Pallares (@ajpallares) - Fix
Decimalprecision issue inLocalTransactionMetadataon iOS 14 (#6138) via Antonio Pallares (@ajpallares) - Add
paywall_idto paywall events and POST /receipt requests (#6087) via Antonio Pallares (@ajpallares) - Add payload_version to POST /receipt (#6130) via Antonio Pallares (@ajpallares)
- Improve accuracy of transactions origin Part 8: sync cached local transaction metadata (#6073) via Antonio Pallares (@ajpallares)
- Fix
CodingKeysto work correctly with snake_case key decoding strategies (#6134) via Antonio Pallares (@ajpallares) - Improve accuracy of transactions origin Part 7: add
sdk_originatedto POST /receipt (#6091) via Antonio Pallares (@ajpallares) - Improve accuracy of transactions origin Part 6: add
transaction_idto POST /receipt (#6023) via Antonio Pallares (@ajpallares) - Improve accuracy of transactions origin Part 5: keep local transaction metadata when
CustomerInfois computed offline (#6131) via Antonio Pallares (@ajpallares) - Add missing APITests for Exit Offers (#6128) via Facundo Menzella (@facumenzella)
- Improve accuracy of transactions origin Part 4: store transaction metadata when
PresentedOfferingContextor paywall info are present (#6110) via Antonio Pallares (@ajpallares) - Improve accuracy of transactions origin Part 3: remove
PurchaseSourcefromPurchasedTransactionDataand rename it toPostReceiptSource(#6076) via Antonio Pallares (@ajpallares) - Added a swiftlint rule that disallows direct use of storage directory URL related APIs (#6113) via Rick (@rickvdl)
- Improve accuracy of transactions origin Part 2: store and fetch transaction metadata (#6014) via Antonio Pallares (@ajpallares)
- Improve accuracy of transactions origin Part 1: refactor to allow caching transaction metadata (#5940) via Antonio Pallares (@ajpallares)
- Fix paywall data misattributions (#6119) via Antonio Pallares (@ajpallares)
- Add missing data attribution to SK2 purchases in Observer Mode (#6117) via Antonio Pallares (@ajpallares)
5.55.3
RevenueCat SDK
🐞 Bugfixes
- Fix cache files visible in documents directory: Etags, offerings and product entitlements mapping (#6020) via Rick (@rickvdl)
- Fix paywall close tracking in PaywallViewController (#6083) via Cesar de la Vega (@vegaro)
RevenueCatUI SDK
Paywallv2
🐞 Bugfixes
- fix: Load high with high loader, load low with low loader (#6111) via Facundo Menzella (@facumenzella)
- Fix close button being tappable during transition delay (#6106) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Add LocalKhepri file to be able to work with local instance (#6123) via Facundo Menzella (@facumenzella)
- Fix loading in PaywallsTester when using present functions (#6109) via Cesar de la Vega (@vegaro)
- Use
SKPaymentQueue.default()instead of initializing a new instance in PurchaseTester app (#6108) via Antonio Pallares (@ajpallares) - Add Claude Code Review workflow configuration (#6107) via Cesar de la Vega (@vegaro)
5.55.2
RevenueCatUI SDK
Paywallv2
🐞 Bugfixes
- fix images not being updated in paywalls v2 (#6101) via Will Taylor (@fire-at-will)
🔄 Other Changes
- Update CI to Xcode 26.2 (#6088) via Antonio Pallares (@ajpallares)
- Add loading of paywall to paywall tester (#6074) via Cesar de la Vega (@vegaro)
5.55.1
RevenueCatUI SDK
Paywallv2
🐞 Bugfixes
- Fix paywall selection reset after eligibility redraw (#5972) via Facundo Menzella (@facumenzella)
- Fix gradient overlay to cover full viewport instead of image bounds (#6072) via Facundo Menzella (@facumenzella)
- Prewarm images in tabs control (#6077) via Cesar de la Vega (@vegaro)
- Fix image loading on tab switch with @StateObject (#6078) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Reduce flakiness of an Offline StoreKit integration test (#6084) via Antonio Pallares (@ajpallares)
5.55.0
RevenueCatUI SDK
Paywallv2
✨ New Features
- Add Basque and Serbian (Latin and Cyrillic) support for paywalls (#5995) via Rosie Watson (@RosieWatson)
🔄 Other Changes
- Add public initializer of
StoreTransactionfor unit tests (#6079) via Rick (@rickvdl) - Added a public initializer to the CustomerInfo class (#6075) via Rick (@rickvdl)
5.54.1
RevenueCat SDK
🐞 Bugfixes
- Fix cache files visible in documents directory: diagnostics (#6008) via Rick (@rickvdl)
- Propagate support information through navigation stack (#6019) via Rosie Watson (@RosieWatson)
RevenueCatUI SDK
Paywallv2
🐞 Bugfixes
- fix: infinite recursion crash in PaywallViewController delegate methods (#6066) via Facundo Menzella (@facumenzella)
- Fix toggle component state sync and package defaults for tabs with overlapping packages (#5982) via Facundo Menzella (@facumenzella)
- Fix Dynamic Type not updating for Paywalls V2 text (#5990) via Facundo Menzella (@facumenzella)
- fix: paywall promo eligibility updates to refresh UI on first load (#5980) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Track Exit offers (#5964) via Cesar de la Vega (@vegaro)
- Add Customer Center and Paywalls tabs to SampleCat (#5989) via Andy Boedo (@aboedo)
- Simplify
SynchronizedLargeItemCache's key to use strings (#6012) via Antonio Pallares (@ajpallares)
5.54.0
RevenueCatUI SDK
Paywallv2
✨ New Features
- Add exit offer support to PaywallViewController for hybrid SDKs (#6003) via Facundo Menzella (@facumenzella)
🐞 Bugfixes
- Add zeroDecimalPlaceCountries support for Paywalls V2 (#5991) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Added zero_decimal_place_countries in backend integration tests offerings snapshot reference (#6011) via Rick (@rickvdl)
5.53.0
RevenueCat SDK
✨ New Features
- Add Solar Engine integration support (#5992) via Lim Hoang (@limdauto)
🐞 Bugfixes
- Ensure cache writes create parent directory (#5986) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Updated Loadshedder backend integration test reference snapshot (#6001) via Rick (@rickvdl)
- Updated reference snapshot for testCanGetOfferingsFromFallbackURL test (#6000) via Rick (@rickvdl)
- chore: Update swiftlint commit hook (#5993) via Facundo Menzella (@facumenzella)
- Install Swiftlint via Mise (#5998) via Facundo Menzella (@facumenzella)
- Fix Nimble test failure reporting in Tuist workspace (#5987) via Facundo Menzella (@facumenzella)
5.52.1
RevenueCat SDK
🐞 Bugfixes
- Fix translations of purchase button in Customer Center's promotional offers (#5974) via Cesar de la Vega (@vegaro)
- Fix HTTP request deduplication being non-deterministic on cache keys (#5975) via Andy Boedo (@aboedo)
- Fixed compilation of generated XCFramework because of synthesized Codable conformance in extension (#5971) via Rick (@rickvdl)
- Fix footer background image influencing footer height when using Fill / Fit mode (#5960) via Facundo Menzella (@facumenzella)
RevenueCatUI SDK
Paywallv2
🐞 Bugfixes
- Fix Tabs component package inheritance for tabs without packages (#5929) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Remove
output_stylefromxcodebuildcalls intest_revenuecatui(#5978) via Cesar de la Vega (@vegaro) - Updated reference snapshot for load shedder offerings response (#5973) via Rick (@rickvdl)
- Removed the use of @autoclosure from Logging methods in order to reduce binary size footprint (#5956) via Rick (@rickvdl)
5.52.0
RevenueCatUI SDK
Paywallv2
✨ New Features
- Add exit offers support for paywalls (#5944) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Execute
release-trainonly when making a release (#5965) via Antonio Pallares (@ajpallares) - Fix failing ad tracking tests (#5963) via Antonio Pallares (@ajpallares)
- Re-recorded FallbackURLBackendIntegrationTests and LoadShedderIntegrationTests (#5962) via Facundo Menzella (@facumenzella)
- Bump fastlane-plugin-revenuecat_internal from
76a3a08toe6454e3(#5961) via dependabot[bot] (@dependabot[bot]) - Trigger the RC app upload when releasing a SDK version (#4853) via Antonio Pallares (@ajpallares)
- Remove compiler flag (#5943) via Pol Miro (@polmiro)
- Added Emerge binary size analysis lane in Fastlane using new barebones test app (#5941) via Rick (@rickvdl)
5.51.1
RevenueCat SDK
🐞 Bugfixes
- UserDefaults Crash Fix (#5917) via Jacob Rakidzich (@JZDesign)
🔄 Other Changes
- Revert to fastlane v2.229.1 from 2.230.0 (#5952) via Antonio Pallares (@ajpallares)
- Flush events in will resign active (#5932) via Antonio Pallares (@ajpallares)
- Bump fastlane from 2.229.1 to 2.230.0 (#5950) via dependabot[bot] (@dependabot[bot])
- Bump aws-sdk-s3 from 1.205.0 to 1.208.0 (#5948) via dependabot[bot] (@dependabot[bot])
- Bump aws-sdk-s3 from 1.182.0 to 1.208.0 in /Tests/InstallationTests/CocoapodsInstallation (#5947) via dependabot[bot] (@dependabot[bot])
- [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#5945) via RevenueCat Git Bot (@RCGitBot)
5.51.0
RevenueCat SDK
✨ New Features
- Adds
setAppsFlyerConversionDatato conveniently track AppsFlyer conversion data (#5936) via JayShortway (@JayShortway)
🐞 Bugfixes
- Jzdesign/video component load bug (#5926) via Jacob Rakidzich (@JZDesign)
🔄 Other Changes
- Fix flaky tests (#5938) via Antonio Pallares (@ajpallares)
- [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#5937) via RevenueCat Git Bot (@RCGitBot)
- Format test store price strings with same currency code and locale as localizedPriceString (#5784) via Rick (@rickvdl)
- Improve flakiness of some tests + add extra logs for easier debugging (#5919) via Antonio Pallares (@ajpallares)
- Replace
RCPurchasesErrorCodeDomainwithErrorCode.errorDomainin tests (#5924) via Antonio Pallares (@ajpallares) - Update broken docs links (#5933) via Jens-Fabian Goetzmann (@jefago)
- Remove Brewfile + lock file and fix Homebrew formula caching in CircleCI (#5927) via Rick (@rickvdl)
- Fix Carthage installation tests (#5922) via Antonio Pallares (@ajpallares)
5.50.1
RevenueCatUI SDK
Paywallv2
🐞 Bugfixes
- Respect paywall distribution if content shorter than device (#5825) via Cesar de la Vega (@vegaro)
🔄 Other Changes
- Fix compilation of RevenueCatUI in watchOS with Xcode 16 (#5923) via Antonio Pallares (@ajpallares)
- Bump fastlane-plugin-revenuecat_internal from
efca663to76a3a08(#5921) via dependabot[bot] (@dependabot[bot]) - Remove the use of scan_with_flaky_test_retries and rely on the retry mechanism of xcodebuild through the regular scan action (#5914) via Rick (@rickvdl)
- Fix flaky test (#5920) via Antonio Pallares (@ajpallares)
5.50.0
RevenueCat SDK
✨ New Features
- Support introductoryOfferEligibilityJWS and promotionalOfferJWS in CUSTOM_ENTITLEMENT_COMPUTATION mode (#5908) via Will Taylor (@fire-at-will)
🐞 Bugfixes
- Flush events in a background task to fix missing events (#5899) via Cesar de la Vega (@vegaro)
- Add missing synchronize when appending event (#5900) via Cesar de la Vega (@vegaro)
🔄 Other Changes
- Improve log message when no products found in any offerings (#5905) via Antonio Pallares (@ajpallares)
- Exclude APITester from Danger checks (#5910) via Facundo Menzella (@facumenzella)
5.49.3
RevenueCat SDK
🐞 Bugfixes
- fix: Call onRestoreCompleted if there are no subscriptions / non subscriptions (#5813) via Facundo Menzella (@facumenzella)
RevenueCatUI SDK
Customer Center
🐞 Bugfixes
- Remove extra check for showing new support ticket creation button (#5896) via Rosie Watson (@RosieWatson)
🔄 Other Changes
- Add custom purchase and restore logic handlers to UIKit paywalls (#5902) via Antonio Pallares (@ajpallares)
- Add extra non subscription events (#5895) via Pol Miro (@polmiro)
- Show redacted Test Api key in alert when detected in Release configuration (#5897) via Antonio Pallares (@ajpallares)
- Improve flakiness of some tests (#5893) via Antonio Pallares (@ajpallares)
- Improve DangerFile detection of added / deleted files (#5845) via Facundo Menzella (@facumenzella)
- Fix flaky test (#5887) via Antonio Pallares (@ajpallares)
- Remove CI step to install unused dependency (#5890) via Antonio Pallares (@ajpallares)
- Disable Emerge snapshots for mac catalyst because of flakiness (#5885) via Rick (@rickvdl)
5.49.2
RevenueCatUI SDK
Customer Center
🐞 Bugfixes
- Fix missing Customer Center actions on SK1 purchases (#5883) via Cesar de la Vega (@vegaro)
🔄 Other Changes
- Automated E2E tests for the Test Store (#5859) via Antonio Pallares (@ajpallares)
- Bump fastlane from 2.229.0 to 2.229.1 (#5882) via dependabot[bot] (@dependabot[bot])
- [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#5876) via RevenueCat Git Bot (@RCGitBot)
5.49.1
RevenueCat SDK
🐞 Bugfixes
- [MON-1122] Changes the rounding mode to
.downinstead of.plain(#5821) via Pol Piella Abadia (@polpielladev)
RevenueCatUI SDK
Paywallv2
🐞 Bugfixes
- Select default package on
BottomSheetViewdismissal (#5797) via Cesar de la Vega (@vegaro) - Set paywall as non-scrolling if shorter than screen (#5857) via Cesar de la Vega (@vegaro)
🔄 Other Changes
- Bump fastlane from 2.228.0 to 2.229.0 (#5855) via dependabot[bot] (@dependabot[bot])
- Track
connection_error_reasonproperty in diagnostics for HTTP errors (#5860) via Rick (@rickvdl) - Add client side timeout logic for endpoints that support fallback URLs (#5760) via Rick (@rickvdl)
- Prevent CI from editing root Package.resolved (#5856) via Antonio Pallares (@ajpallares)
- Fixed daily integration-tests-all run missing the Circle CI context (#5853) via Rick (@rickvdl)
- Bump fastlane-plugin-revenuecat_internal from
083ced9toefca663(#5854) via dependabot[bot] (@dependabot[bot])
5.49.0
RevenueCat SDK
🐞 Bugfixes
- Fix: Ensure the initial tab selects the package on first appearance (#5850) via Jacob Rakidzich (@JZDesign)
- Fix icon not updating on selection of package (#5846) via Jacob Rakidzich (@JZDesign)
- Fix Crashes: Move large object cacheing off of user defaults to file storage (#5652) via Jacob Rakidzich (@JZDesign)
- Prevent duplicate post receipt requests (#5795) via Antonio Pallares (@ajpallares)
RevenueCatUI SDK
Customer Center
✨ New Features
- CC-582 | Allow for support ticket creation (#5779) via Rosie Watson (@RosieWatson)
🐞 Bugfixes
- Fix SK1 products always showing Lifetime badge (#5811) via Cesar de la Vega (@vegaro)
🔄 Other Changes
- Allow downloads of paywall assets in parallel when warming up cache (#5849) via Antonio Pallares (@ajpallares)
- Simplify cache warming (#5847) via Antonio Pallares (@ajpallares)
- Update backend integration test reference snapshots (#5839) via Rick (@rickvdl)
- Add missing files to workspace (#5833) via Rick (@rickvdl)
- Runs plugin actions from correct directory (#5830) via JayShortway (@JayShortway)
- Clearing documents and cache directories used by the SDK in tests (#5831) via Rick (@rickvdl)
- Fixed passing major version as integer to send Slack alert action which accepts a string instead (#5829) via Rick (@rickvdl)
- Uses some git+GitHub lanes from Fastlane plugin (#5823) via JayShortway (@JayShortway)
- [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#5824) via RevenueCat Git Bot (@RCGitBot)
- Fix strong retain cycle on
Purchasesinstance (#5818) via Antonio Pallares (@ajpallares) - Removed Slack actions from CircleCI config for release jobs that don't add much value and were not working before (#5808) via Rick (@rickvdl)
- Migrate to slack-secrets context again after fixing conflict between orb and Fastlane Slack action (#5806) via Rick (@rickvdl)
5.48.0
RevenueCat SDK
🐞 Bugfixes
- Fix countdown component for older ios version (#5799) via Josh Holtz (@joshdholtz)
RevenueCatUI SDK
Paywallv2
✨ New Features
- Paywalls countdown component (#5790) via Josh Holtz (@joshdholtz)
🔄 Other Changes
- Fix slack_backend_integration_test_results Fastlane action crashing during integration / e2e tests (#5798) via Rick (@rickvdl)
- Backend integration / E2E test Slack alerting + health check pings (#5792) via Rick (@rickvdl)
- Reduce flakiness of some tests (#5724) via Antonio Pallares (@ajpallares)
- Support for flushing non subscription in the Events Manager (#5726) via Pol Miro (@polmiro)
- Ensure that multiline trailing commas result in an error (#5772) via Jacob Rakidzich (@JZDesign)
5.47.1
RevenueCat SDK
🐞 Bugfixes
- Add FileImageLoader to project (#5788) via Josh Holtz (@joshdholtz)
- FIX: Overlay sometimes blocking taps (#5786) via Jacob Rakidzich (@JZDesign)
- Fix icon loading animation issues and offload Image creation to background thread (#5775) via Josh Holtz (@joshdholtz)
- Support language families (#5753) via Jacob Rakidzich (@JZDesign)
- Prevent Apple Account login prompt when making a Test Store purchase (#5777) via Antonio Pallares (@ajpallares)
RevenueCatUI SDK
Customer Center
🐞 Bugfixes
- fix: Resume request refund on Promo decline or fail (#5695) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#5781) via RevenueCat Git Bot (@RCGitBot)
- Add backend source and entitlement assertions to E2E tests (#5778) via Rick (@rickvdl)
- Disabling Emerge snapshots for macOS (designed for iPad + native) since they are flaky (#5782) via Rick (@rickvdl)
- Bump fastlane-plugin-revenuecat_internal from
9362b21to1e3e3fd(#5783) via dependabot[bot] (@dependabot[bot]) - Added remaining backend source assertions in backend integration tests (#5780) via Rick (@rickvdl)
- Bump fastlane-plugin-revenuecat_internal from
525d48cto9362b21(#5776) via dependabot[bot] (@dependabot[bot]) - Automated E2E Tests on all backend environments (#5712) via Rick (@rickvdl)
5.47.0
RevenueCatUI SDK
Paywallv2
✨ New Features
- Video Background (#5704) via Jacob Rakidzich (@JZDesign)
- Add a delay hook for a purchase flow (#5690) via Jacob Rakidzich (@JZDesign)
🔄 Other Changes
- Fix pipeline: Remove trailing comma (#5771) via Jacob Rakidzich (@JZDesign)
- Add
PromotionalOfferViewTests(#5766) via Cesar de la Vega (@vegaro)
5.46.3
🔄 Other Changes
- Use cached offerings on network errors (#5707) via Antonio Pallares (@ajpallares)
- Allow the use of Test Store in release builds using the uiPreview dangerous setting for the RC Mobile app (#5765) via Rick (@rickvdl)
- Fix signature verification fallback urls (#5756) via Antonio Pallares (@ajpallares)
5.46.2
RevenueCatUI SDK
Customer Center
🐞 Bugfixes
- Fix
EXC_BAD_ACCESSwhen opening promotional offers in Customer Center (#5762) via Cesar de la Vega (@vegaro)
🔄 Other Changes
- Add Load shedder integration tests for Get Customer Info (#5713) via Antonio Pallares (@ajpallares)
- Add internal
Offeringssource properties (#5749) via Antonio Pallares (@ajpallares) - Add Internal
CustomerInfosource properties (#5737) via Antonio Pallares (@ajpallares)
5.46.1
RevenueCat SDK
🐞 Bugfixes
- FIX: background image didn't update to dark mode when the colorscheme changed (#5740) via Jacob Rakidzich (@JZDesign)
🔄 Other Changes
- Update get offerings snapshot for Load Shedder integration tests (#5758) via Antonio Pallares (@ajpallares)
- Show alert before crashing when Test API key is used in Release builds (#5755) via Antonio Pallares (@ajpallares)
- Moved load shedder API tests to us-east-1 and us-east-2 configuration from the CircleCI config into the tests itself (#5750) via Rick (@rickvdl)
- Run load shedder integration tests against both us-east-1 and us-east-2 (#5732) via Rick (@rickvdl)
- Add backend source to
VerifiedHTTPResponse(#5736) via Antonio Pallares (@ajpallares) - Added an internal API for overriding the API base URL (#5739) via Rick (@rickvdl)
- Fix CircleCI builds (#5738) via Antonio Pallares (@ajpallares)
5.46.0
RevenueCat SDK
✨ New Features
- Add PurchaseParams method to set the quantity of products to purchase (#5730) via Mark Villacampa (@MarkVillacampa)
🐞 Bugfixes
- Dynamic Color by injecting the color scheme (#5706) via Jacob Rakidzich (@JZDesign)
RevenueCatUI SDK
Customer Center
🐞 Bugfixes
- fix: Remove best effort renewal for Purchases in CustomerCenter (#5720) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Removed unused and deprecated CircleCI config values (#5731) via Rick (@rickvdl)
- Refactor: Rename and reorganize FeatureEvents test files (#5728) via Pol Miro (@polmiro)
- Refactor: Rename PaywallEventsManager to EventsManager and separate ad events (#5718) via Pol Miro (@polmiro)
5.45.1
RevenueCat SDK
🐞 Bugfixes
- FIX: Video Component speed and overlay issues (#5716) via Jacob Rakidzich (@JZDesign)
- Flush many batches paywall events (#5687) via Pol Miro (@polmiro)
- Fix image shadow issue (#5708) via Jacob Rakidzich (@JZDesign)
- Add size limit to PaywallEventStore to prevent unbounded growth (#5688) via Pol Miro (@polmiro)
- Invert priority of iOS offers when rendering Paywall Text Component (#5699) via Jacob Rakidzich (@JZDesign)
RevenueCatUI SDK
Customer Center
🐞 Bugfixes
- fix: Use tint color for See All Purchases (#5697) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Fix some incorrect tests (#5723) via Antonio Pallares (@ajpallares)
- Improve Customer Info offline computation checks in tests (#5714) via Antonio Pallares (@ajpallares)
- [CI] Set xcbeautify version for Xcode 15 (#5722) via Antonio Pallares (@ajpallares)
- Fix API tests (#5721) via Antonio Pallares (@ajpallares)
- [SDK-4153] Use static fallback urls (#5709) via Antonio Pallares (@ajpallares)
- Adapt Load Shedder Integration tests to changes in project (#5715) via Antonio Pallares (@ajpallares)
- Obj-c compatible APIs for non subscription revenue (#5685) via Pol Miro (@polmiro)
- Add non paid revenue reporting infra (#5640) via Pol Miro (@polmiro)
- Adapt integration tests to changes in project (#5711) via Antonio Pallares (@ajpallares)
- Allowing HTTP requests to be retried with fallback host after netwok / DNS errors as well as 5xx errors (#5703) via Rick (@rickvdl)
- Add infrastructure to enable richer server-down integration tests (#5700) via Antonio Pallares (@ajpallares)
5.45.0
RevenueCat SDK
🐞 Bugfixes
- Naive approach to handle the onPurchaseCompleted event for an offer code (#5655) via Jacob Rakidzich (@JZDesign)
- Fix: Promo/Intro Offer Text not always displaying (#5660) via Jacob Rakidzich (@JZDesign)
- Support Video as the hero component (#5684) via Jacob Rakidzich (@JZDesign)
- Fix
FileHandler's potential crash on writing (#5675) via Antonio Pallares (@ajpallares)
Paywallv2
✨ New Features
- MON-736 Gradient Borders (#5651) via Jacob Rakidzich (@JZDesign)
🔄 Other Changes
- Add Loadshedder integration tests for v4 (#5689) via Antonio Pallares (@ajpallares)
5.44.1
RevenueCat SDK
🐞 Bugfixes
- Fix for paywall image sometimes not showing (in carousel) (#5679) via Josh Holtz (@joshdholtz)
- Fix media not loading (#5678) via Jacob Rakidzich (@JZDesign)
🔄 Other Changes
- Bump fastlane-plugin-revenuecat_internal from
25c7fb8to525d48c(#5680) via Antonio Pallares (@ajpallares) - Update SampleCat SDK dependency version on SDK releases (#5677) via Antonio Pallares (@ajpallares)
- Bump fastlane-plugin-revenuecat_internal from
3f7fffcto25c7fb8(#5645) via dependabot[bot] (@dependabot[bot]) - Update Xcode 16.0 to 16.4 in tests because of CircleCI's deprecation later this year (#5668) via Rick (@rickvdl)
- Revert "Migrate BackendIntegrationTests to Tuist (#5657)" (#5674) via Facundo Menzella (@facumenzella)
- Migrate BackendIntegrationTests to Tuist (#5657) via Facundo Menzella (@facumenzella)
5.44.0
RevenueCat SDK
✨ New Features
- Finalize video component to include a checksum, dark mode support, and optimize memory usage for large file downloads (#5631) via Jacob Rakidzich (@JZDesign)
🐞 Bugfixes
- Winback Offer Eligibility Calculation Improvements (#5646) via Will Taylor (@fire-at-will)
🔄 Other Changes
- Add DEVELOPMENT file (#5653) via Facundo Menzella (@facumenzella)
- [Experimental] Add Locale to Storefront (#5658) via Toni Rico (@tonidero)
- Remove Paywall Image Display Log (#5659) via Will Taylor (@fire-at-will)
- Migrate APITests to Tuist workspace (#5648) via Facundo Menzella (@facumenzella)
5.43.0
RevenueCat SDK
✨ New Features
- Add support for the Test Store (#5632) via Antonio Pallares (@ajpallares)
🔄 Other Changes
- [SDK-4115] Improve log for simulated purchase failure in Test Store (#5634) via Antonio Pallares (@ajpallares)
- Disable offline entitlements in Test Store (#5642) via Antonio Pallares (@ajpallares)
5.42.0
RevenueCat SDK
🐞 Bugfixes
- [DX-520] Do not log unknown errors from health report endpoint (#5636) via Pol Piella Abadia (@polpielladev)
- MON-1374: Handle Promotional offer text in paywalls (#5628) via Jacob Rakidzich (@JZDesign)
RevenueCatUI SDK
Customer Center
✨ New Features
- Add flag to show / hide user section in CustomerCenter (#5609) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Remove unnecessary API test (#5638) via Antonio Pallares (@ajpallares)
- [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#5637) via RevenueCat Git Bot (@RCGitBot)
- Bump fastlane-plugin-revenuecat_internal from
a8770fdto3f7fffc(#5635) via dependabot[bot] (@dependabot[bot]) - Add formatted price to ProductPaidPrice (#5623) via Facundo Menzella (@facumenzella)
- Make managementURL public in SubscriptionInfo (#5629) via Facundo Menzella (@facumenzella)
- Bump fastlane-plugin-revenuecat_internal from
db640e8toa8770fd(#5633) via dependabot[bot] (@dependabot[bot]) - Don't warn empty offering for Customer Entitlement Computation in DEBUG (#5613) via Josh Holtz (@joshdholtz)
- Bump fastlane-plugin-revenuecat_internal from
e555afbtodb640e8(#5630) via dependabot[bot] (@dependabot[bot])
5.41.0
RevenueCat SDK
✨ New Features
- Add Airbridge device ID subscriber attribute (#5611) via Lim Hoang (@limdauto)
- Enable Test Store (#5596) via Antonio Pallares (@ajpallares)
🐞 Bugfixes
- MON-1231 - Fix badge border (#5603) via Jacob Rakidzich (@JZDesign)
RevenueCatUI SDK
✨ New Features
- Video Component Views (#5527) via Jacob Rakidzich (@JZDesign)
Customer Center
🐞 Bugfixes
- Show latest expired if no active subscriptions (#5614) via Facundo Menzella (@facumenzella)
- Don't hide
request refundwhen cancelling a purchase (#5612) via Facundo Menzella (@facumenzella)
Paywallv2
✨ New Features
- Fix paywalls button bottom sheet (#5591) via Josh Holtz (@joshdholtz)
🐞 Bugfixes
- [DENG-1362] Reduce repeated logs (#5546) via Antonio Pallares (@ajpallares)
🔄 Other Changes
- Update
fastlane-plugin-revenuecat_internal(#5622) via Cesar de la Vega (@vegaro) - Revert "Update fastlane-plugin-revenuecat_internal (#5624)" (#5625) via Antonio Pallares (@ajpallares)
- Updates fastlane-plugin-revenuecat_internal (#5624) via Antonio Pallares (@ajpallares)
- Revert "Update fastlane-plugin-revenuecat_internal" (#5620) via Cesar de la Vega (@vegaro)
- Update fastlane-plugin-revenuecat_internal (#5619) via Cesar de la Vega (@vegaro)
- VideoComponent Cache Prewarming: only cache warm low res videos by default (#5618) via Jacob Rakidzich (@JZDesign)
- Add India to expected response for
zero_decimal_place_countries(#5617) via Antonio Pallares (@ajpallares) - Fix failing Test Store unit test (#5616) via Antonio Pallares (@ajpallares)
- fix broken RevenueCat.xcworkspace (#5615) via Facundo Menzella (@facumenzella)
- Add displayName to SubscriptionInfo (#5604) via Facundo Menzella (@facumenzella)
- Bump fastlane-plugin-revenuecat_internal from
1593f78to7508f17(#5610) via dependabot[bot] (@dependabot[bot]) - Bump rexml from 3.4.1 to 3.4.2 in /Tests/InstallationTests/CocoapodsInstallation (#5571) via dependabot[bot] (@dependabot[bot])
- Bump rexml from 3.4.1 to 3.4.2 (#5570) via dependabot[bot] (@dependabot[bot])
- Use Xcode 26.0.1 in CircleCI (#5606) via Antonio Pallares (@ajpallares)
- Bump fastlane-plugin-revenuecat_internal from
e1c0e04to1593f78(#5605) via dependabot[bot] (@dependabot[bot]) - Fix some tests (#5602) via Antonio Pallares (@ajpallares)
- Add Monetization as CODEOWNER (#5601) via Antonio Pallares (@ajpallares)
5.40.0
RevenueCat SDK
✨ New Features
- Support StoreKitError.unsupported (#5589) via Will Taylor (@fire-at-will)
🐞 Bugfixes
- Fix: 10 Result builder limit (#5592) via Jacob Rakidzich (@JZDesign)
- MON-1206 Fix background image—gradient overlay (#5584) via Jacob Rakidzich (@JZDesign)
- Fix compilation error with XCFramework in Xcode 26 (#5587) via Antonio Pallares (@ajpallares)
RevenueCatUI SDK
🐞 Bugfixes
- MON-1296 Fix gradient rendering issue in iOS 26 (#5586) via Jacob Rakidzich (@JZDesign)
🔄 Other Changes
- Remove
github_rate_limitin release trains (#5597) via Cesar de la Vega (@vegaro) - Bump fastlane-plugin-revenuecat_internal from
401d148to24d8eda(#5598) via dependabot[bot] (@dependabot[bot]) - [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#5594) via RevenueCat Git Bot (@RCGitBot)
- Bump fastlane-plugin-revenuecat_internal from
a6dc551to401d148(#5593) via dependabot[bot] (@dependabot[bot]) - feat: Introduce CustomerCenterExternalActions to CustomerCenter (#5576) via Facundo Menzella (@facumenzella)
- Fix flaky snapshot test (#5588) via Antonio Pallares (@ajpallares)
5.39.3
RevenueCatUI SDK
Customer Center
🐞 Bugfixes
- Open promotional offers from CustomerCenter Detail screen (#5581) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Fix some more flaky tests (#5573) via Antonio Pallares (@ajpallares)
5.39.2
RevenueCat SDK
🐞 Bugfixes
- Fix issue where low res images load too often (#5577) via Josh Holtz (@joshdholtz)
5.39.1
RevenueCatUI SDK
Customer Center
🐞 Bugfixes
- Pass navigation options explicitly to dismiss button (#5565) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Fix a flaky test (#5572) via Antonio Pallares (@ajpallares)
- Add iOS 26 tests to CI (#5552) via Antonio Pallares (@ajpallares)
- Silence deprecation warnings in XCFramework (#5554) via Antonio Pallares (@ajpallares)
- CircleCI: Update deprecated Xcode versions (#5567) via Antonio Pallares (@ajpallares)
- Tuist: rename generated Xcode workspace to RevenueCat-Tuist.xcworkspace (#5566) via Antonio Pallares (@ajpallares)
- Bump fastlane-plugin-revenuecat_internal from
7d97553toa6dc551(#5562) via dependabot[bot] (@dependabot[bot]) - Tuist: fix PaywallsTester project generation (#5564) via Antonio Pallares (@ajpallares)
- Bump nokogiri from 1.18.9 to 1.18.10 (#5563) via dependabot[bot] (@dependabot[bot])
- [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#5555) via RevenueCat Git Bot (@RCGitBot)
5.39.0
RevenueCat SDK
✨ New Features
- Add support for native (non-Catalyst) Mac paywalls (#5451) via Chris Lindsay (@clindsay3)
🐞 Bugfixes
- Store file repostory contents in base directory in cache (#5557) via Josh Holtz (@joshdholtz)
- Fix integration via XCFramework (#5551) via Antonio Pallares (@ajpallares)
RevenueCatUI SDK
Customer Center
🐞 Bugfixes
- clean up a couple more places that were using the old corner radius (#5556) via Andy Boedo (@aboedo)
- Use New iOS 26 Corner Radius in VC List Section (#5553) via Will Taylor (@fire-at-will)
🔄 Other Changes
- Update paywalls tester Package.resolved for Xcode Cloud (#5558) via Josh Holtz (@joshdholtz)
- Paywalls image loading from cache is now synchronous (#5528) via Josh Holtz (@joshdholtz)
- Add SDK installation dropdown to bug report template (#5550) via Antonio Pallares (@ajpallares)
- Fix typo in PaywallsTester (#5469) via Cesar de la Vega (@vegaro)
5.38.2
RevenueCatUI SDK
Customer Center
🐞 Bugfixes
- Add a custom close for deeper navs in customer center (#5543) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Add purchase cancelled alert in Purchase Tester app (#5535) via Antonio Pallares (@ajpallares)
- Add CODEOWNERS (#5541) via Facundo Menzella (@facumenzella)
5.38.1
RevenueCatUI SDK
Customer Center
🐞 Bugfixes
- Fix customer center for iOS 16: alternative approach (#5537) via Andy Boedo (@aboedo)
🔄 Other Changes
- Fix simulated failed purchase in Test Store (#5531) via Antonio Pallares (@ajpallares)
5.38.0
RevenueCatUI SDK
Customer Center
✨ New Features
- Updating Customer Center UI to be ready for iOS 26 (#5519) via Hidde van der Ploeg (@hiddevdploeg)
🐞 Bugfixes
- Fix dismisss button for iOS15 in CustomerCenter (#5529) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Update automated tests for customer center (#5518) via Facundo Menzella (@facumenzella)
- fix emerge tools snapshots (#5530) via Facundo Menzella (@facumenzella)
- Paywall video component model creation -- Not views, just models (#5481) via Jacob Rakidzich (@JZDesign)
- New Paywalls Tester App Icon (#5525) via Engin Kurutepe (@ekurutepe)
- Move preferred locale APIs from RevenueCatUI to RevenueCat (#5523) via Antonio Pallares (@ajpallares)
- Fix compilation of RevenueCatUI in Xcode 14 (#5524) via Antonio Pallares (@ajpallares)
- Update changelog with missing changes in v5.27.1 (#5522) via Antonio Pallares (@ajpallares)
5.37.0
RevenueCat SDK
✨ New Features
- MON-1193 Optional transitions (delayed back button) (#5490) via Jacob Rakidzich (@JZDesign)
RevenueCatUI SDK
🐞 Bugfixes
- Fix Paywall from Customer Center when
purchasesAreCompletedBy == .myApp(#5512) via Antonio Pallares (@ajpallares)
Paywallv2
🐞 Bugfixes
- Fix markdown bold text in paywalls (#5517) via Antonio Pallares (@ajpallares)
🔄 Other Changes
- Refetch offerings when preferred locale is set (#5511) via Josh Holtz (@joshdholtz)
- Post receipt in for purchases in Test Store (#5515) via Antonio Pallares (@ajpallares)
- Rename Test Store to Simulated Store internally (#5459) via Antonio Pallares (@ajpallares)
- Untrack testEntitlementsComputation xcodeproj (#5514) via Facundo Menzella (@facumenzella)
- Extend appTarget settings to pass custom settings (#5470) via Facundo Menzella (@facumenzella)
- Fix compilation error in Xcode 14 (#5513) via Antonio Pallares (@ajpallares)
- Make TrialOrIntroEligibilityChecker @_spi public (#5461) via Antonio Pallares (@ajpallares)
- [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#5510) via RevenueCat Git Bot (@RCGitBot)
5.36.0
RevenueCat SDK
✨ New Features
- Add option to disable automatic ID collection when setting attribution network IDs at configuration time (#5504) via Toni Rico (@tonidero)
🐞 Bugfixes
- fix compilation errors for Xcode 14.2 (swift 5.7) (#5494) via Facundo Menzella (@facumenzella)
RevenueCatUI SDK
Customer Center
✨ New Features
- Add button_text to ScreenOffering (#5501) via Facundo Menzella (@facumenzella)
🐞 Bugfixes
- Fix dark mode button for featured offering + localized header (#5502) via Facundo Menzella (@facumenzella)
- Address virtual currencies with zero units in customer center (#5500) via Facundo Menzella (@facumenzella)
- Fix title and price of non-Google purchases in Customer Center (#5465) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Fix backend integration tests (#5505) via Toni Rico (@tonidero)
- [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#5498) via RevenueCat Git Bot (@RCGitBot)
- Fix spelling errors in the style guide (#5497) via Jacob Rakidzich (@JZDesign)
5.35.1
RevenueCatUI SDK
Customer Center
🐞 Bugfixes
- Don't show subscriptions title if there are no subscriptions (#5485) via Facundo Menzella (@facumenzella)
- Rename subscribe to buy_subscription in customer center (#5483) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Fix the tests and implicit returns that broke our CI on main (#5493) via Jacob Rakidzich (@JZDesign)
- Added APIs for hybrid SDKs to set presentedOfferingContext (#5491) via Rick (@rickvdl)
- Create File Repository for use in upcoming feature work (#5477) via Jacob Rakidzich (@JZDesign)
- [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#5488) via RevenueCat Git Bot (@RCGitBot)
- Add tag RevenueCatTests to enable tuist generate tag:RevenueCatTests (#5471) via Facundo Menzella (@facumenzella)
- Add danger rule to show a warning if new files are not added to Revenuecat.xcodeproj (#5473) via Facundo Menzella (@facumenzella)
5.35.0
RevenueCatUI SDK
Customer Center
✨ New Features
- Show a subscribe button in customer center when there are no subscriptions (#5457) via Facundo Menzella (@facumenzella)
🐞 Bugfixes
- Add NoSubscriptionsViewModel to project file (#5472) via Facundo Menzella (@facumenzella)
- fix non-renewable appstore PATHs for customer center (#5468) via Facundo Menzella (@facumenzella)
- Show account id only debug for customer center (#5466) via Facundo Menzella (@facumenzella)
Paywall Components
🐞 Bugfixes
- Package component doesn't wrap content in button if there is a purchase button inside of it (#5456) via Josh Holtz (@joshdholtz)
🔄 Other Changes
- Add private CardStyleModifier (#5467) via Facundo Menzella (@facumenzella)
- [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#5463) via RevenueCat Git Bot (@RCGitBot)
- Crash on release when using a Test Store API key (#5453) via Antonio Pallares (@ajpallares)
- Disable restore and sync purchases in Test Store (#5452) via Antonio Pallares (@ajpallares)
- Create StoreTransaction for Test Store purchases (#5434) via Antonio Pallares (@ajpallares)
- Fix PurchaseTester crash in Mac Catalyst (#5448) via Antonio Pallares (@ajpallares)
- Fix previews of paywall components not using Mac Catalyst button styling applied at top-level of Paywalls V2 (#5444) via Chris Lindsay (@clindsay3)
5.34.0
RevenueCat SDK
Customer Center
✨ New Features
- Introduce custom actions to customer center (#5407) via Facundo Menzella (@facumenzella)
🐞 Bugfixes
- Use navigation options in feedback survey in customer center (#5431) via Facundo Menzella (@facumenzella)
- Allow custom URL for empty screen in customer center (#5432) via Facundo Menzella (@facumenzella)
- Add fallback for change plans id and only display selected (#5422) via Facundo Menzella (@facumenzella)
RevenueCatUI SDK
✨ New Features
- Add Azerbaijani locale support for Paywalls (#5435) via Franco Correa (@francocorreasosa)
🐞 Bugfixes
- Improve paywall tabs default state and toggle behavior (#5430) via Josh Holtz (@joshdholtz)
Paywallv2
✨ New Features
- Add offer code redemption support to paywall buttons (#5437) via Josh Holtz (@joshdholtz)
- Add promotional offers to paywalls (#5296) via Josh Holtz (@joshdholtz)
🔄 Other Changes
- Delete .swiftpm scheme folder to avoid scheme pollution (#5440) via Facundo Menzella (@facumenzella)
- Add Test Store enum case to
Store(#5438) via Antonio Pallares (@ajpallares) - [EXTERNAL] Adds a convenience method to set the Amplitude User ID and Amplitude Device ID (#5425) via @alpennec (#5446) via Antonio Pallares (@ajpallares)
- [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#5445) via RevenueCat Git Bot (@RCGitBot)
- Add Mac Catalyst and iPad/iPhone app on Mac Paywall Validation Screenshot Generation (#5371) via Chris Lindsay (@clindsay3)
- [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#5436) via RevenueCat Git Bot (@RCGitBot)
- Add simulate failure button to Test Store purchase UI (#5429) via Antonio Pallares (@ajpallares)
- Add missing availability condition in unit tests (#5433) via Antonio Pallares (@ajpallares)
- Add Test Store Products Manager (#5426) via Antonio Pallares (@ajpallares)
- Add GetWebBillingProductsOperation (#5419) via Antonio Pallares (@ajpallares)
- Add missing file to old project (#5428) via Facundo Menzella (@facumenzella)
- Add Test Store purchase UI (#5403) via Antonio Pallares (@ajpallares)
- [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#5423) via RevenueCat Git Bot (@RCGitBot)
- Display VC Name in Customer Center (#5383) via Will Taylor (@fire-at-will)
5.33.1
RevenueCat SDK
Customer Center
🐞 Bugfixes
- Replace isLifetimeSubscription for isLifetime (#5417) via Facundo Menzella (@facumenzella)
- Dont show cancel if non-sub for customer center (#5415) via Facundo Menzella (@facumenzella)
Virtual Currencies
🐞 Bugfixes
- Update VC Caching Log Message (#5404) via Will Taylor (@fire-at-will)
🔄 Other Changes
- Fix color space on Mac screenshots. (#5375) via Chris Lindsay (@clindsay3)
- Fix issue where previews running on Emerge servers were not following specialized codepaths for previews (#5413) via Chris Lindsay (@clindsay3)
- [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#5418) via RevenueCat Git Bot (@RCGitBot)
- Add missing RevenueCatUI test plans (#5414) via Facundo Menzella (@facumenzella)
- Rename internal WebProducts APIs to WebOfferingProducts (#5416) via Antonio Pallares (@ajpallares)
- Introduce tuist-generate-workspace for CircleCI (#5412) via Facundo Menzella (@facumenzella)
- [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#5411) via RevenueCat Git Bot (@RCGitBot)
- Add an app to run paywall validation tests locally (#5370) via Chris Lindsay (@clindsay3)
- [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#5408) via RevenueCat Git Bot (@RCGitBot)
- Bump danger from 9.5.1 to 9.5.3 (#5409) via dependabot[bot] (@dependabot[bot])
- Bump fastlane from 2.227.2 to 2.228.0 (#5410) via dependabot[bot] (@dependabot[bot])
- Bump nokogiri from 1.18.8 to 1.18.9 (#5406) via dependabot[bot] (@dependabot[bot])
- Bump nokogiri from 1.18.8 to 1.18.9 in /Tests/InstallationTests/CocoapodsInstallation (#5405) via dependabot[bot] (@dependabot[bot])
- [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#5402) via RevenueCat Git Bot (@RCGitBot)
- Magic Weather Example App - Files reference correction (#5397) via Alejandra Wetsch (@mawr92)
- Fix a flaky test (#5401) via Antonio Pallares (@ajpallares)
- Tuist: fix some setup issues (#5400) via Antonio Pallares (@ajpallares)
- When taking screenshots for validation, ignore safe area. (#5376) via Chris Lindsay (@clindsay3)
- Tuist: prevent MagicWeather Xcode projects names clashing (#5398) via Antonio Pallares (@ajpallares)
- Tuist: fix compilation of RevenueCat and RevenueCatUI projects in visionOS (#5399) via Antonio Pallares (@ajpallares)
- Add date to failure messages of entitlement verification in tests (#5396) via Antonio Pallares (@ajpallares)
- Tuist: unify project settings (#5393) via Antonio Pallares (@ajpallares)
- Potential fix for flaky test (#5395) via Antonio Pallares (@ajpallares)
- [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#5394) via RevenueCat Git Bot (@RCGitBot)
- Store API key validation in memory (#5386) via Antonio Pallares (@ajpallares)
- Increase simulated renewal time in some StoreKit integration tests (#5382) via Antonio Pallares (@ajpallares)
- Add validation of Test Store API keys (#5385) via Antonio Pallares (@ajpallares)
- Fix PurchaseTester compilation in tvOS (#5390) via Antonio Pallares (@ajpallares)
- Add a mechanism to test the presentIfNeeded API in the Paywalls tester. (#5377) via Chris Lindsay (@clindsay3)
5.33.0
RevenueCat SDK
🐞 Bugfixes
- Fix rendering of buttons in Mac Catalyst mode when optimized for Mac. (#5372) via Chris Lindsay (@clindsay3)
- Update default height of paywalls when using .presentIfNeeded on Mac Catalyst to something that is more reasonable. (#5378) via Chris Lindsay (@clindsay3)
Customer Center
✨ New Features
- Add custom change plans support for customer center (#5379) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Fix VirtualCurrencyBalancesScreen Preview on Catalyst (Optimized For Mac) (#5387) via Will Taylor (@fire-at-will)
- Add
@_spito initializers of virtual currencies APIs (#5384) via Antonio Pallares (@ajpallares) - Use SwiftUI instead of UIKit to present an alert in Paywall Tester app (#5381) via Chris Lindsay (@clindsay3)
- [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#5380) via RevenueCat Git Bot (@RCGitBot)
- Add build configurations for tuist workspace (#5364) via Facundo Menzella (@facumenzella)
- Adding deep link for testing in Paywalls Tester (#5238) via Josh Holtz (@joshdholtz)
- Wait a max of 20 minutes for TestFlight processing (#5153) via Josh Holtz (@joshdholtz)
- [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#5373) via RevenueCat Git Bot (@RCGitBot)
- Generate Mac Catalyst screenshots of Paywall components to be sent to EmergeTools (#5303) via Chris Lindsay (@clindsay3)
- Use a more accurate method for generating a screenshot of a UIView (#5352) via Chris Lindsay (@clindsay3)
- Upload screenshots to Emerge in addition to pushing them to the paywall validation repo. (#5351) via Chris Lindsay (@clindsay3)
- Add a few additional VC integration tests (#5367) via Will Taylor (@fire-at-will)
- [CI] Use m1 instead of m2 executor (#5369) via Mark Villacampa (@MarkVillacampa)
5.32.0
RevenueCat SDK
🐞 Bugfixes
- Fixes API tests after changes to public API (#5365) via Pol Piella Abadia (@polpielladev)
Virtual Currencies
✨ New Features
- Virtual Currency Support (#5108) via Will Taylor (@fire-at-will)
🔄 Other Changes
- [DX-457] Re-apply Health SDK logging on app launch (#5360) via Pol Piella Abadia (@polpielladev)
- [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#5361) via RevenueCat Git Bot (@RCGitBot)
- Add basics for a working tuist workspace (#5248) via Facundo Menzella (@facumenzella)
- [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#5357) via RevenueCat Git Bot (@RCGitBot)
- Fix one flaky unit test (#5356) via Antonio Pallares (@ajpallares)
5.31.0
RevenueCat SDK
Customer Center
✨ New Features
- Add smoother loading animation to SubscriptionDetailView (#5329) via Facundo Menzella (@facumenzella)
🐞 Bugfixes
- Fix google products display for customer center (#5349) via Facundo Menzella (@facumenzella)
RevenueCatUI SDK
Customer Center
✨ New Features
- Preferred UI locale for UI components (#5292) via Antonio Pallares (@ajpallares)
- Remove trailing text for PurchaseCardView, and simplify billing information. (#5300) via Facundo Menzella (@facumenzella)
- Add account details to single purchase view (#5327) via Facundo Menzella (@facumenzella)
🐞 Bugfixes
- Fix broken Customer Center strings (#5311) via Cesar de la Vega (@vegaro)
🔄 Other Changes
- Temporary revert of automatic health reporting in the SDK (#5353) via Pol Piella Abadia (@polpielladev)
- fix
Purchasestemporary leak when running SDK health check (#5350) via Antonio Pallares (@ajpallares) - Consider Offerings cache stale when preferred locales change (#5312) via Antonio Pallares (@ajpallares)
- [DX-457] Log the SDK configuration report on every
#DEBUGrun (#5317) via Pol Piella Abadia (@polpielladev) - Update workflows/issue-notifications.yml@v2 (#5346) via Josh Holtz (@joshdholtz)
- Fix some failing tests (#5344) via Antonio Pallares (@ajpallares)
- Preferred locale override (#5288) via Antonio Pallares (@ajpallares)
- [CI] use M4 Pro Medium (#5321) via Mark Villacampa (@MarkVillacampa)
- Add shared ack workflow (#5340) via Josh Holtz (@joshdholtz)
- Use NewErrorUtils instead of RevenueCat.ErrorUtils (#5293) via Facundo Menzella (@facumenzella)
- Bump ack action to v15 (#5339) via Josh Holtz (@joshdholtz)
- Bump ack action to v11 (#5336) via Josh Holtz (@joshdholtz)
- New issue template form and issue monitoring job (#5333) via Josh Holtz (@joshdholtz)
- Add Intro Eligibility Functions to CEC Mode (#5322) via Will Taylor (@fire-at-will)
5.29.0
RevenueCat SDK
Customer Center
✨ New Features
- Use
card_store_promotionalfor RC Promos in card & history (#5275) via Facundo Menzella (@facumenzella) - Refactor PurchaseHistory to use PurchaseInformation (#5260) via Facundo Menzella (@facumenzella)
🐞 Bugfixes
- Add tests for PurchaseInformationView.Badge + rc promo (#5273) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- [Paywalls] Update ImageComponent max width after initial layout if it changes. (#5291) via Mark Villacampa (@MarkVillacampa)
- Fix index and mgiration guides docs not being updated (#5298) via Mark Villacampa (@MarkVillacampa)
- Add .yield to
PaywallViewEventsFullscreenLightModeTests(#5294) via Facundo Menzella (@facumenzella) - Add missing
@_spito import in backend tests (#5297) via Antonio Pallares (@ajpallares) - Use minimal permissions for installation tests (#5274) via JayShortway (@JayShortway)
- [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#5295) via RevenueCat Git Bot (@RCGitBot)
- [AUTOMATIC][Paywalls V2] Updates commit hash of paywall-preview-resources (#5289) via RevenueCat Git Bot (@RCGitBot)
- Delete Examples folder from carthage checkout (#5287) via Facundo Menzella (@facumenzella)
- Remove CustomerCenterConfigDataAPI from API Tests (#5286) via Facundo Menzella (@facumenzella)
- Delete duplicate OfferingsList.swift from PaywallTester (#5249) via Facundo Menzella (@facumenzella)
- Add abbrev to Gemfile (#5207) via Facundo Menzella (@facumenzella)
- Test removing example apps before Carthage installation test (#5268) via Facundo Menzella (@facumenzella)
- Add _spi(Internal) to Customer Center (#5270) via Facundo Menzella (@facumenzella)
5.28.1
RevenueCat SDK
🐞 Bugfixes
- Enable markdown in paywalls in iOS 15 and watchOS 8 (#5267) via Antonio Pallares (@ajpallares)
Customer Center
🐞 Bugfixes
- Trigger promotional offer callback from
PromotionalOfferViewModel(#5263) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- FIx image load in paywall rendering validation (#5264) via Antonio Pallares (@ajpallares)
- Include commit hash in commit message for paywall-rendering-validation (#5265) via Antonio Pallares (@ajpallares)
- Bring back paywall rendering validation (no submodules) (#5252) via Antonio Pallares (@ajpallares)
- Rename duplicate CachingProductsManagerTests to CachingProductsManagerIntegrationTests (#5244) via Facundo Menzella (@facumenzella)
- Update CustomerInfo sample with is_sandbox to make sure it works (#5203) via Facundo Menzella (@facumenzella)
- Add originalPurchaseDate & isSandbox to PurchaseInformation (#5259) via Facundo Menzella (@facumenzella)
5.28.0
RevenueCat SDK
Customer Center
✨ New Features
- Show most recent expired if no active subscriptions (#5198) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Use Mint 0.17.5 for
run-test-ios-14CI job (#5256) via Antonio Pallares (@ajpallares) - Fix Xcode 16 compilation error (#5254) via Antonio Pallares (@ajpallares)
- Add Danger rule to avoid submodules (#5250) via Antonio Pallares (@ajpallares)
5.27.1
RevenueCat SDK
🐞 Bugfixes
- Remove submodules temporarily to fix SPM (#5246) via Toni Rico (@tonidero)
RevenueCatUI SDK
Paywallv2
🐞 Bugfixes
- Fixed overflowing images (#5162) via Josh Holtz (@joshdholtz)
Customer Center
✨ New Features
- Introduce NoSubscriptions card view for empty states (#5178) via Facundo Menzella (@facumenzella)
- Use groupID to present manageSubscriptions sheet (#5182) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Add accessibility identifier to PurchaseCardView (#5176) via Facundo Menzella (@facumenzella)
- Remove dependency of Purchases.shared from UIConfigProvider (#5242) via Josh Holtz (@joshdholtz)
- Update offerings cache in UI preview mode (#5241) via Antonio Pallares (@ajpallares)
- Introduce PaywallFontManagerType to handle custom fonts in the paywall editor (#5208) via Facundo Menzella (@facumenzella)
- Warm up caches in parallel (#5240) via Antonio Pallares (@ajpallares)
- SampleCat: A new iOS Sample app that guides users through any configuration issues (#5200) via Pol Piella Abadia (@polpielladev)
- [Paywalls] Render top level tabs component stack properties (#5210) via Mark Villacampa (@MarkVillacampa)
- [Paywalls] Use tab id instead of tab index to select tab (#5209) via Mark Villacampa (@MarkVillacampa)
- Paywall screenshots for cross platform validation (#5205) via Josh Holtz (@joshdholtz)
- Fix broken URLs in 4 -> 5 Migration Guides (#5229) via Will Taylor (@fire-at-will)
- Adds
showStoreMessagesAutomaticallyparameter to CEC mode (#5230) via JayShortway (@JayShortway)
5.26.0
RevenueCat SDK
✨ New Features
- Add Paddle Store enum case (#4981) via Will Taylor (@fire-at-will)
Customer Center
🐞 Bugfixes
- Use env openURL instead of SFSafariVC to open mailto (#5221) via Facundo Menzella (@facumenzella)
Paywall Components
🐞 Bugfixes
- [Paywalls] do not ignore all safe areas when applying the zstack in bottom sheet (#5201) via Mark Villacampa (@MarkVillacampa)
🔄 Other Changes
- Fix StoreKitVersionTests on iOS 15 (#5226) via Will Taylor (@fire-at-will)
- Add @_spi(Internal) to ClockTests (#5212) via Facundo Menzella (@facumenzella)
- Use effectiveVersion.debugDescription in StoreKitVersionTests (#5213) via Facundo Menzella (@facumenzella)
- add missing import Foundation in Tests (#5206) via Facundo Menzella (@facumenzella)
5.25.3
RevenueCat SDK
🐞 Bugfixes
- CAT-1975: Dont Call POST Receipt with No Receipt or AppTransaction when Syncing Purchases with SK2 (#5161) via Will Taylor (@fire-at-will)
🔄 Other Changes
- Add isSanbox to NonSubscriptionTransaction (#5199) via Facundo Menzella (@facumenzella)
- Add missing fields to PurchaseInformation (#5184) via Facundo Menzella (@facumenzella)
- Improve descriptions for SDK Health errors (#5185) via Pol Piella Abadia (@polpielladev)
- fix pre-commit hook to lint files with spaces in the path (#5186) via Facundo Menzella (@facumenzella)
- Delete earliestExpiringTransaction from Customer Center code (#5183) via Facundo Menzella (@facumenzella)
- Remove unused durationTitle from PurchaseInformation (#5181) via Facundo Menzella (@facumenzella)
- Add new test cases for maestro + customer center (#5177) via Facundo Menzella (@facumenzella)
5.25.2
RevenueCat SDK
Customer Center
🐞 Bugfixes
- Pass productIdentifier for promo offer flow (#5179) via Facundo Menzella (@facumenzella)
- return .free for CustomerCenterStoreKitUtilities if price.isZero (#5174) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Use scrollBounceBehaviorBasedOnSize for CustomerCenter scrollview (#5175) via Facundo Menzella (@facumenzella)
- Refactor NoSubscriptionsView in CustomerCenter (#5173) via Facundo Menzella (@facumenzella)
- Add consumable and non consumable for Customer Center test app (#5172) via Facundo Menzella (@facumenzella)
- Add a push navigation to Customer Center maestro app (#5157) via Facundo Menzella (@facumenzella)
5.25.1
RevenueCat SDK
🐞 Bugfixes
- Use correct title for section (#5168) via Facundo Menzella (@facumenzella)
5.25.0
RevenueCat SDK
🐞 Bugfixes
- reload customer center after re-syncing customer info (#5166) via Facundo Menzella (@facumenzella)
Customer Center
✨ New Features
- Add price to NonSubscriptionTransaction (#5131) via Facundo Menzella (@facumenzella)
- Show other purchases in Purchases List (#5126) via Facundo Menzella (@facumenzella)
- Include PurchaseInformationCardView in SubscriptionDetail (#5121) via Facundo Menzella (@facumenzella)
🐞 Bugfixes
- fix: Do not reload actions when selecting purchase (#5164) via Facundo Menzella (@facumenzella)
- Show feedback for as a sheet instead of a push (#5156) via Facundo Menzella (@facumenzella)
- Introduce CustomerCenterButtonStyle to highlight CustomerCenter buttons (#5158) via Facundo Menzella (@facumenzella)
- Minor UI tweaks for CustomerCenter 2.0 (#5159) via Facundo Menzella (@facumenzella)
- Pass CustomerCenterViewModel as observed object to RestoreAlert (#5146) via Facundo Menzella (@facumenzella)
- Pass CustomerCenterViewModel as a ObservedObject to the detail screen (#5154) via Facundo Menzella (@facumenzella)
- Add isActive to PurchaseInformation for CustomerCenter (#5152) via Facundo Menzella (@facumenzella)
- Minor UI tweaks for Customer Center subscription list (#5150) via Facundo Menzella (@facumenzella)
- Dont show
see all purchasesbutton if there's nothing else to show (#5134) via Facundo Menzella (@facumenzella) - Filter changePlans path for lifetime purchases in CustomerCenter (#5133) via Facundo Menzella (@facumenzella)
- Add restore overlay to RelevantPurchasesListView (#5130) via Facundo Menzella (@facumenzella)
RevenueCatUI SDK
Customer Center
✨ New Features
- Introduce purchase card badges (#5118) via Facundo Menzella (@facumenzella)
- Show account details in active subscription list (#5115) via Facundo Menzella (@facumenzella)
- Deprecate ManageSubscriptionView in favor of ActiveSubscriptionList (#5101) via Facundo Menzella (@facumenzella)
🐞 Bugfixes
- Fix contact support button UI to match ButtonsView (#5129) via Facundo Menzella (@facumenzella)
- Show list if all purchases together are more than one (#5128) via Facundo Menzella (@facumenzella)
- Update margins and copies for SubscriptionList (#5127) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Make latestPurchaseDate non-optional in PurchaseInformation (#5144) via Facundo Menzella (@facumenzella)
- CircleCI: save Ruby 3.2.0 installation in cache (#5163) via Antonio Pallares (@ajpallares)
- Add README to Maestro app (#5165) via Facundo Menzella (@facumenzella)
- Fix some flaky tests (Part 3) (#5155) via Antonio Pallares (@ajpallares)
- Send slack message for load shedder v3 tests report (#5145) via Antonio Pallares (@ajpallares)
- Add ownership type to PurchaseInformation (#5143) via Facundo Menzella (@facumenzella)
- Change to use new endpoint to fetch web product info (#5135) via Toni Rico (@tonidero)
- Fixed locale in RevenueCatUI test data (#5125) via Antonio Pallares (@ajpallares)
- Introduce ActiveSubscriptionButtonsView to use it inside a scrollview (#5123) via Facundo Menzella (@facumenzella)
- Add DEBUG check to SDK Health API tests (#5122) via Antonio Pallares (@ajpallares)
- [DX-404] Adds API Tests for SDK Health Report (#5117) via Pol Piella Abadia (@polpielladev)
- Fix some flaky tests (Part 2) (#5104) via Antonio Pallares (@ajpallares)
- add missing files to Xcode workspace (#5116) via Antonio Pallares (@ajpallares)
- Remove ObservableObject from FeedbackSurveyData (#5106) via Facundo Menzella (@facumenzella)
- Update Nimble dependency to v13.7.1 (#5096) via Antonio Pallares (@ajpallares)
5.24.0
RevenueCat SDK
🐞 Bugfixes
- Fix offerings not being returned in the
offeringsproperty of the SDK Health Report (#5043) via Pol Piella Abadia (@polpielladev)
Customer Center
✨ New Features
- Add management URL to PurchaseInformation (#5080) via Facundo Menzella (@facumenzella)
- feat: Show subscription list instead of only the active subscription (#5050) via Facundo Menzella (@facumenzella)
🐞 Bugfixes
- Split
PurchaseInformation.priceintopricePaidandrenewalPrice(#5069) via Cesar de la Vega (@vegaro)
Paywallv2
🐞 Bugfixes
- Fix sheet view in v2 paywall not covering bottom safe area (#5064) via Antonio Pallares (@ajpallares)
RevenueCatUI SDK
Paywallv2
✨ New Features
- Allow custom url on purchase button (#5092) via Josh Holtz (@joshdholtz)
Customer Center
✨ New Features
- Add support for cross product promotional offers (#5031) via Cesar de la Vega (@vegaro)
- feat: Introducing billing information for PurchaseInformation in CustomerCenter (#5066) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Move RevenueCatUI CustomerCenter mocks from test target to RevenueCatUI (#5103) via Facundo Menzella (@facumenzella)
- Bump fastlane-plugin-emerge from 0.10.6 to 0.10.8 (#5099) via dependabot[bot] (@dependabot[bot])
- Introduce ScrollViewWithOSBackground to reuse in Customer Center Views (#5102) via Facundo Menzella (@facumenzella)
- Add billingInformation for PurchaseInformation (#5100) via Facundo Menzella (@facumenzella)
- Fix watchOS tests (#5098) via Cesar de la Vega (@vegaro)
- PurchaseInformation conforms to Identifiable & Hashable (#5095) via Facundo Menzella (@facumenzella)
- Introduce SubscriptionDetailViewModel & BaseManageSubscriptionViewModel (#5091) via Facundo Menzella (@facumenzella)
- Fix some flaky tests (#5082) via Antonio Pallares (@ajpallares)
- Allow previews of paywalls without offerings previews (#4968) via Antonio Pallares (@ajpallares)
- Introduce PurchaseInformationCardView (#5090) via Facundo Menzella (@facumenzella)
- Compute active subscriptions for CustomerCenter (#5089) via Facundo Menzella (@facumenzella)
- Fix build issue of PaywallsTester app in visionOS (#5087) via Antonio Pallares (@ajpallares)
- Use dateFormatter inside PurchaseInformation (#5088) via Facundo Menzella (@facumenzella)
- Add expirationDate and renewalDate to PurchaseInformation (#5085) via Facundo Menzella (@facumenzella)
- Improve mock interface for CustomerCenterConfigData (#5079) via Facundo Menzella (@facumenzella)
- Fix build of RevenueCatUI from Xcode workspace (#5075) via Antonio Pallares (@ajpallares)
- Fix flakiness of
uuidimplementation (#5074) via Antonio Pallares (@ajpallares) - revert
4087a9c(#5078) via Facundo Menzella (@facumenzella) - Fix build issue in Xcode 14.3 (#5071) via Antonio Pallares (@ajpallares)
- Revert CircleCI machine type to medium (#5065) via Mark Villacampa (@MarkVillacampa)
- Split logic between webBilling and stripe (#5057) via Cesar de la Vega (@vegaro)
5.23.0
RevenueCat SDK
✨ New Features
- Paywalls v2 sheet anysize (#5056) via Josh Holtz (@joshdholtz)
- Purchase web package (#5049) via Josh Holtz (@joshdholtz)
RevenueCatUI SDK
✨ New Features
- Add Bottom Sheet View (#5044) via Will Taylor (@fire-at-will)
Paywallv2
✨ New Features
- Fix new carousel transition (#5051) via Josh Holtz (@joshdholtz)
- [Paywalls v2] add stroke support in carousel dots (#5045) via Antonio Pallares (@ajpallares)
- feat: Introduce fade transition for loop animated CarouselView (#5047) via Facundo Menzella (@facumenzella)
Customer Center
🐞 Bugfixes
- fix: Hide cancel & refundRequest if subscription is already cancelled (#5035) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- use m1 pro large (#5060) via Mark Villacampa (@MarkVillacampa)
- use m2pro.large for all jobs (#5059) via Mark Villacampa (@MarkVillacampa)
- Add endpoint for fetching web billing products (#5055) via Toni Rico (@tonidero)
- Bump nokogiri from 1.18.5 to 1.18.8 in /Tests/InstallationTests/CocoapodsInstallation (#5054) via dependabot[bot] (@dependabot[bot])
- Bump fastlane from 2.225.0 to 2.227.2 (#5052) via dependabot[bot] (@dependabot[bot])
- Bump nokogiri from 1.18.7 to 1.18.8 (#5032) via dependabot[bot] (@dependabot[bot])
- [Paywalls] Remove url manipulation and alert from web paywall links (#5041) via Mark Villacampa (@MarkVillacampa)
- chore: Add right chevron to see all purchases (#5039) via Facundo Menzella (@facumenzella)
- other: Use not synced storekit config to avoid unwanted changes (#5037) via Facundo Menzella (@facumenzella)
- chore: Make StoreProductDiscountType @__spi public (#5034) via Facundo Menzella (@facumenzella)
- feat: Add missing pieces for maestro local execution (#5017) via Facundo Menzella (@facumenzella)
5.22.2
RevenueCat SDK
🐞 Bugfixes
- Fix Backwards compatibility errors introduced by new
testSDKHealthCheckimplementation (#5022) via Pol Piella Abadia (@polpielladev) - [Paywalls v2] fixes crash when getting invalid URL from paywall components localization (#5016) via Antonio Pallares (@ajpallares)
RevenueCatUI SDK
Paywallv2
🐞 Bugfixes
- [Paywalls v2] Fixes blank lines not showing up (#5024) via JayShortway (@JayShortway)
Customer Center
🐞 Bugfixes
- fix: Wrap viewmodel binding into another binding (#5023) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- [Paywalls] Add new button component action for web paywall links (#5029) via Mark Villacampa (@MarkVillacampa)
- [Customer center] show manage subscriptions through purchases provider (#5025) via Antonio Pallares (@ajpallares)
- [Diagnostics] add
hostparameter tohttp_request_performedevent (#4982) via Antonio Pallares (@ajpallares) - fix compilation issues in older versions of Xcode (#5021) via Antonio Pallares (@ajpallares)
- Add load shedder integration tests for consumable and non-consumable products (#5018) via Toni Rico (@tonidero)
- Use fallback API hosts when receiving server down response (#4970) via Antonio Pallares (@ajpallares)
- feat: Introduce maestro for UI testing (#5013) via Facundo Menzella (@facumenzella)
- [Paywalls v2] Adds logs to indicate whether URLs are opened successfully (#5020) via JayShortway (@JayShortway)
- [DX-345] Update the
testSDKHealthto use the new/health_reportendpoint (#4979) via Pol Piella Abadia (@polpielladev)
5.22.1
RevenueCat SDK
Customer Center
🐞 Bugfixes
- fix: Reload customer center on subscription cancelled (#4993) via Facundo Menzella (@facumenzella)
RevenueCatUI SDK
Paywallv2
🐞 Bugfixes
- [Paywalls V2] Add default values for enums (#4955) via Josh Holtz (@joshdholtz)
🔄 Other Changes
- [Customer center] missing inject of Purchases provider (#5011) via Antonio Pallares (@ajpallares)
- Fix Magic Weather SwiftUI compilation error by @pattogato at #4987 (#5012) via Toni Rico (@tonidero)
- Log a warning to iOS 18.4 Simulator users with empty offerings (#5002) via Chris Perriam (@cperriam-rc)
- Maybe fix some flaky PaywallViewEventsTests in CI (#5008) via Josh Holtz (@joshdholtz)
- Update internal fastlane plugin to not try new scan run when retried tests eventually passed (#5007) via Josh Holtz (@joshdholtz)
- [Diagnostics] Add extra fields when tracking AppTransaction errors (#5005) via Mark Villacampa (@MarkVillacampa)
- Added purchase button in package SwiftUI Preview example (#4967) via Josh Holtz (@joshdholtz)
- Parses the PR number from the merge queue branch name. (#4996) via JayShortway (@JayShortway)
5.22.0
RevenueCat SDK
✨ New Features
- Add
getStorefrontAPIs (#4997) via Toni Rico (@tonidero)
🔄 Other Changes
- [Paywalls v2] Fixes decoding
TabControlType(#5001) via JayShortway (@JayShortway)
5.21.2
RevenueCat SDK
Customer Center
🐞 Bugfixes
- fix: Unify finding active transaction for customer center (#4992) via Facundo Menzella (@facumenzella)
RevenueCatUI SDK
Paywallv2
🐞 Bugfixes
- Fix paywalls text component compilation for iOS 15 (#4995) via Josh Holtz (@joshdholtz)
- Fix Paywalls v2 Text component to not localized from bundle but support markdown (#4990) via Josh Holtz (@joshdholtz)
🔄 Other Changes
- UI preview mode: enable customer center previews (#4947) via Antonio Pallares (@ajpallares)
- Adds CEC V5 migration guide (#4984) via JayShortway (@JayShortway)
5.21.1
RevenueCatUI SDK
Paywallv2
🐞 Bugfixes
- Make Paywalls v2 Text use verbatim (#4975) via Josh Holtz (@joshdholtz)
🔄 Other Changes
- New APIs to CustomEntitlementsComputationMode SDK (#4972) via Toni Rico (@tonidero)
- Updates the changelog for hotfix 4.43.5. (#4980) via JayShortway (@JayShortway)
- Fixes unit tests compilation on Xcode 16.3/iOS 18.4 (#4977) via Antonio Pallares (@ajpallares)
- Remove preprocessor script for PaywallsTester (#4969) via Antonio Pallares (@ajpallares)
- [Customer center] unify and propagate Purchases provider (#4957) via Antonio Pallares (@ajpallares)
5.21.0
RevenueCat SDK
🐞 Bugfixes
- Remove Identifiable conformance from StoreKit2PurchaseIntentListenerType (#4964) via Will Taylor (@fire-at-will)
- Fix
CustomerCenterViewControllerview (#4960) via Antonio Pallares (@ajpallares)
RevenueCatUI SDK
Customer Center
✨ New Features
- feat: Don't hide contact support on simulator (#4951) via Facundo Menzella (@facumenzella)
- feat: Change default copy for web_subscription_manage (#4921) via Facundo Menzella (@facumenzella)
🐞 Bugfixes
- Update strings for restore purchases alerts (#4933) via Cesar de la Vega (@vegaro)
- Replace initial alert dialog with a progress view when restoring in Customer Center (#4930) via Cesar de la Vega (@vegaro)
🔄 Other Changes
- feat: Add log for promo offer eligibility (#4949) via Facundo Menzella (@facumenzella)
5.20.3
RevenueCatUI SDK
Customer Center
🐞 Bugfixes
- fix: Allow two lines for feedback survey title (#4950) via Facundo Menzella (@facumenzella)
- feat: Reload customer center onCustomerCenterPromotionalOfferSuccess (#4917) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Only preview
RestorePurchasesAlerton iOS (#4958) via Cesar de la Vega (@vegaro) - Add
X-Is-Backgroundedheader (#4938) via Toni Rico (@tonidero) - Add previews for
RestorePurchasesAlert(#4922) via Cesar de la Vega (@vegaro) - [Diagnostics] Add
storefrontproperty to more events (#4948) via Toni Rico (@tonidero) - Improve Korean translation (#4946) via Jaewoong Eum (@skydoves)
- [Diagnostics] Sync diagnostics if file reaches lower size limit (#4929) via Toni Rico (@tonidero)
- Add diagnostics event when AppTransaction fails to be fetched (#4936) via Mark Villacampa (@MarkVillacampa)
- [Paywalls] Fix gradients in angles around 135º (#4934) via Mark Villacampa (@MarkVillacampa)
- Fix load shedder integration tests after project changes (#4932) via Toni Rico (@tonidero)
- [Diagnostics] Fix cache fetch policy key not matching specs (#4924) via Toni Rico (@tonidero)
- [Paywall] Center-align all Timeline component icons by calculating and setting their max width (#4890) via Mark Villacampa (@MarkVillacampa)
- [Paywalls] Add support for TimelineItem overrides (#4875) via Mark Villacampa (@MarkVillacampa)
- [Paywalls] Extend the padding by border.width amount in components that support both (#4915) via Mark Villacampa (@MarkVillacampa)
5.20.2
RevenueCat SDK
🐞 Bugfixes
- Carousel fixes (#4869) via Josh Holtz (@joshdholtz)
Customer Center
🐞 Bugfixes
- fix: Hide subscription detail if consumable (#4906) via Facundo Menzella (@facumenzella)
RevenueCatUI SDK
🐞 Bugfixes
- Fixing fit mode on background property (#4905) via Josh Holtz (@joshdholtz)
🔄 Other Changes
- chore: Test if Package.swift is valid on CI for older tooling (#4697) via Facundo Menzella (@facumenzella)
- [Diagnostics]: add
NOT_CHECKEDvalue tocache_statusparameter ofget_offerings_resultevent (#4919) via Antonio Pallares (@ajpallares) - chore: Test action wrapper for customer center (#4916) via Facundo Menzella (@facumenzella)
- [Diagnostics] add
apple_purchase_intent_receivedevent (#4895) via Antonio Pallares (@ajpallares) - Fix nokogiri CVEs (#4914) via Cesar de la Vega (@vegaro)
- Fix build issues and tests in older versions of Xcode (#4909) via Antonio Pallares (@ajpallares)
- [Diagnostics] add
apple_transaction_update_receivedevent (#4904) via Antonio Pallares (@ajpallares) - fix build issue in iOS 15 (#4908) via Antonio Pallares (@ajpallares)
- [Diagnostics] add
purchase_startedandpurchase_resultevents (#4886) via Antonio Pallares (@ajpallares)
5.20.1
RevenueCatUI SDK
Paywallv2
🐞 Bugfixes
- [Paywalls V2] Fixes badges not being overriden (#4900) via JayShortway (@JayShortway)
🔄 Other Changes
- Skip
TrialOrIntroPriceEligibilityCheckerSK2Testsin iOS 15 (#4902) via Antonio Pallares (@ajpallares) - [Diagnostics] add
apple_trial_or_intro_eligibility_requestevent (#4894) via Antonio Pallares (@ajpallares) - [Diagnostics] add
apple_transaction_queue_receivedevent (#4898) via Antonio Pallares (@ajpallares)
5.20.0
RevenueCatUI SDK
🐞 Bugfixes
- Fix for Chinese locale scripts that aren't supported in iOS 15 (#4889) via Josh Holtz (@joshdholtz)
- Fallback to using variations of language code, script, and region for unknown
Locale(ex:zh_CNwill look forzh_Hans) (#4870) via Josh Holtz (@joshdholtz)
Customer Center
✨ New Features
- Add
onCustomerCenterManagementOptionSelectedmodifier (#4872) via Cesar de la Vega (@vegaro) - feat: Refresh customer center and purchases after restore (#4880) via Facundo Menzella (@facumenzella)
- Deprecates
CustomerCenterActionHandlerin favor of modifiers (#4844) via Cesar de la Vega (@vegaro)
🔄 Other Changes
- Fix unit tests: make
presentCodeRedemptionSheet()test only run on iOS (#4897) via Antonio Pallares (@ajpallares) - Fix possible memory leaks with diagnostics completion blocks (#4892) via Toni Rico (@tonidero)
- [Diagnostics] add
apple_present_code_redemption_sheet_requestevent (#4893) via Antonio Pallares (@ajpallares) - [Diagnostics] Add sync and restore purchases events (#4887) via Toni Rico (@tonidero)
- [Diagnostics] Add sync purchases tracking (part 1) (#4885) via Toni Rico (@tonidero)
- [Diagnostics] add
get_customer_info_startedandget_customer_info_resultevents (#4881) via Antonio Pallares (@ajpallares) - [Diagnostics] Add products start/result events (#4884) via Toni Rico (@tonidero)
- feat: Use pod_push_with_error_handling instead of pod_push for pushing Pods (#4878) via Facundo Menzella (@facumenzella)
- Update fastlane plugin (#4879) via Toni Rico (@tonidero)
- [Diagnostics] Add offerings start and result events (#4866) via Toni Rico (@tonidero)
- [Diagnostics] fix diagnostics sync retry logic (#4868) via Antonio Pallares (@ajpallares)
- Fix iOS 14 + 15 unit tests after root error issues (#4873) via Toni Rico (@tonidero)
- [Diagnostics] add
error_entering_offline_entitlements_modeevent (#4867) via Antonio Pallares (@ajpallares) - Fix crash in SwiftUI previews (#4871) via Antonio Pallares (@ajpallares)
- chore: Remove unused key from customer center event (#4837) via Facundo Menzella (@facumenzella)
- chore:
EventsManagerIntegrationTestsworking as expected (#4862) via Facundo Menzella (@facumenzella) - [Diagnostics] add
entered_offline_entitlements_modeevent (#4865) via Antonio Pallares (@ajpallares) - Add root error info to public error (#4680) via Toni Rico (@tonidero)
- [Diagnostics] add
clearing_diagnostics_after_failed_syncevent (#4863) via Antonio Pallares (@ajpallares) - [Diagnostics] add
max_diagnostics_sync_retries_reachedevent (#4861) via Antonio Pallares (@ajpallares) - Update
customerInfofrom anAsyncStreaminstead of thePurchasesDelegatein the SwiftUI sample app (#4860) via Pol Piella Abadia (@polpielladev) - Remove resetting
appSessionIdfor customer center + addappSessionIdandeventIdto diagnostics events (#4855) via Toni Rico (@tonidero) - fix: diagnostics parameter key name (#4859) via Antonio Pallares (@ajpallares)
- [Diagnostics] add missing parameter to
http_request_performedevent (#4857) via Antonio Pallares (@ajpallares) - Create
DiagnosticsEvent.Propertiesfor type safe diagnostics (#4843) via Antonio Pallares (@ajpallares) - Have snapshot tests use same encoding as SDK (#4856) via Antonio Pallares (@ajpallares)
5.19.0
RevenueCat SDK
✨ New Features
- Add
hasPaywallproperty toOffering(#4847) via Antonio Pallares (@ajpallares)
🐞 Bugfixes
- Fix compilation issues in Xcode 16.3 beta (#4840) via Andy Boedo (@aboedo)
- Correctly set PaywallsTester app API key by the CI (#4822) via Antonio Pallares (@ajpallares)
Customer Center
✨ New Features
- feat: Add onClose handler support for CustomerCenter (#4850) via Facundo Menzella (@facumenzella)
RevenueCatUI SDK
🐞 Bugfixes
- Add default refundWindowDuration to HelpPath.init (#4826) via Will Taylor (@fire-at-will)
Paywallv2
🐞 Bugfixes
- Add activity indicator to restore purchases button behavior (#4848) via Josh Holtz (@joshdholtz)
Customer Center
✨ New Features
- feat: Hide refund for purchases in trial period (#4823) via Facundo Menzella (@facumenzella)
- feat: Don't show refund if free subscription (#4805) via Facundo Menzella (@facumenzella)
- feat: Introduce refund window to control if a refund is offered for a purchase (#4784) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- feat: disable postAttributionData requests when in UI preview mode (#4824) via Antonio Pallares (@ajpallares)
- chore: Disable EventsManagerIntegrationTests till fixed (#4852) via Facundo Menzella (@facumenzella)
- Run
all-testsonmainand notify Slack (#4849) via Cesar de la Vega (@vegaro) - Fix potential wrong count on diagnosis sync (#4846) via Antonio Pallares (@ajpallares)
- [Paywalls] Always use normal stack if the relevant axis size is fit (#4842) via Mark Villacampa (@MarkVillacampa)
- Uses the remote version of
purchases-iosfor the SwiftUI sample app (#4841) via Pol Piella Abadia (@polpielladev) - [Diagnostics] Add extra parameters to
applePurchaseAttempt(#4835) via Antonio Pallares (@ajpallares) - Use array instead of sets in diagnostics events (#4839) via Antonio Pallares (@ajpallares)
- chore: Add integration test for analytics events (#4830) via Facundo Menzella (@facumenzella)
- Update changelog with 4.43.3 and 4.43.4 (#4834) via Mark Villacampa (@MarkVillacampa)
- [Diagnostics] Add
requestedProductIdsandnotFoundProductIdstoappleProductsRequest(#4828) via Toni Rico (@tonidero) - Add RCStoreMessageTypeWinBackOffer to Objc API Tester (#4827) via Will Taylor (@fire-at-will)
- chore: Enable force_unwrapping for SwiftLint (#4820) via Facundo Menzella (@facumenzella)
- chore: Delete .orig file and ignore in git ignore (#4821) via Facundo Menzella (@facumenzella)
- Post error test results to Slack (#4404) via Toni Rico (@tonidero)
- [Paywalls V2] Adds a note on publishing to the missing paywall error. (#4817) via JayShortway (@JayShortway)
- Adds
buildServer.jsonto.gitignore(#4819) via JayShortway (@JayShortway) - Empty strings in proxyURL parameters in
Local.xcconfig(#4818) via Antonio Pallares (@ajpallares) - [Paywalls] Use CSS linear-gradient spec to compute gradient start/end points (#4789) via Mark Villacampa (@MarkVillacampa)
- [Paywalls] Add support for shadows in image components (#4797) via Mark Villacampa (@MarkVillacampa)
- [Paywalls] Fix badge background not using the new background field instead of ba… (#4811) via Mark Villacampa (@MarkVillacampa)
- fix: workaround to allow using proxy URL in
Local.xcconfig(#4810) via Antonio Pallares (@ajpallares)
5.18.0
RevenueCat SDK
🐞 Bugfixes
- Fix SDK Compilation on Xcode 16.3/iOS 18.4 Beta 1 (#4814) via Will Taylor (@fire-at-will)
- Add prepaid as a period type (#4782) via Greenie (@greenietea)
RevenueCatUI SDK
🐞 Bugfixes
- Fix paywall refreshable bug (#4793) via Antonio Pallares (@ajpallares)
Customer Center
🐞 Bugfixes
- fix: [AppUpdateWarningView] Tweak buttons bottom alignment and padding (#4807) via Facundo Menzella (@facumenzella)
- fix: Remove force unwrapping from PurchaseHistoryView (#4794) via Facundo Menzella (@facumenzella)
- fix: Remove NavigationView/NavigationStack from AppWarningView (#4792) via Facundo Menzella (@facumenzella)
Paywallv2
✨ New Features
- [Paywalls V2] Carousel component (#4722) via Josh Holtz (@joshdholtz)
🐞 Bugfixes
- [Paywalls V2] Fixes parsing generic fonts. (#4801) via JayShortway (@JayShortway)
- [Paywalls V2] Scroll fix for background/padding/border (#4788) via Josh Holtz (@joshdholtz)
- [Paywalls V2] Add purchase button activity indicator (#4787) via Josh Holtz (@joshdholtz)
- [Paywalls V2] Add
visibleproperty to all components (and overrides to ones that were missing) (#4781) via Josh Holtz (@joshdholtz)
🔄 Other Changes
- UI preview mode: disable cache updates (#4809) via Antonio Pallares (@ajpallares)
- UI Preview mode: avoid intro eligibility request (#4800) via Antonio Pallares (@ajpallares)
- [Diagnostics] Fix store kit error description tracking (#4799) via Toni Rico (@tonidero)
- Add no quotes hints to build settings in
Local.xcconfig.SAMPLE(#4808) via Antonio Pallares (@ajpallares) - [Paywalls] Fix onRestoreComplete callback not being called (#4803) via Mark Villacampa (@MarkVillacampa)
- UI preview mode: disable log in and log out (#4804) via Antonio Pallares (@ajpallares)
- Config item rename (#4798) via Antonio Pallares (@ajpallares)
- Use RC API key for local development from local.xcconfig (#4795) via Antonio Pallares (@ajpallares)
- UI Preview Mode: mock
CustomerInfo(#4786) via Antonio Pallares (@ajpallares) - [Paywalls V2] Added
overflowproperty to stack (#4767) via Josh Holtz (@joshdholtz) - Add Internal support for draft paywall previews (#4761) via Antonio Pallares (@ajpallares)
5.17.0
RevenueCat SDK
Paywallv2
🐞 Bugfixes
- Fix period abbreviated when multiple days/weeks/months/years (#4769) via Josh Holtz (@joshdholtz)
RevenueCatUI SDK
Customer Center
✨ New Features
- feat: Dont show cancel path if lifetime subscription (#4755) via Facundo Menzella (@facumenzella)
- feat: Enable cancellation in CustomerCenter for catalyst (#4768) via Facundo Menzella (@facumenzella)
🐞 Bugfixes
- fix: Track impression in CustomerCenter only once (#4778) via Facundo Menzella (@facumenzella)
- Fix for survey answered event not being tracked when not setting a
customerCenterActionHandler(#4777) via Cesar de la Vega (@vegaro)
Paywallv2
🐞 Bugfixes
- Hooks up purchase handler preference keys for Paywalls V2 (#4780) via Josh Holtz (@joshdholtz)
- Fixed issues with finding some locales (ex:
zh-Hansandzh-Hant) (#4771) via Josh Holtz (@joshdholtz)
🔄 Other Changes
- feat: Introduce ISODurationFormatter (#4776) via Facundo Menzella (@facumenzella)
- [Paywalls V2] Support generic fonts (#4766) via Josh Holtz (@joshdholtz)
5.16.1
RevenueCat SDK
🐞 Bugfixes
- Always call readyForPromotedProduct on main thread/actor (#4613) via Will Taylor (@fire-at-will)
RevenueCatUI SDK
🐞 Bugfixes
- Fix Gradient Preview on iOS 15 (#4762) via Will Taylor (@fire-at-will)
🔄 Other Changes
- chore: Tweak default copy for dateWhenAppWasPurchased (#4703) via Facundo Menzella (@facumenzella)
- Rename RC Billing to Web Billing (#4734) via Antonio Borrero Granell (@antoniobg)
- Document Weak PurchasesDelegate Reference (#4756) via Will Taylor (@fire-at-will)
- chore: A simple message for posterity (#4758) via Facundo Menzella (@facumenzella)
- UI preview mode/always fetch offerings (#4754) via Antonio Pallares (@ajpallares)
- feat: Add tests for customer center events encoding (#4739) via Facundo Menzella (@facumenzella)
- UI Preview Mode: add extra header to network requests (#4752) via Antonio Pallares (@ajpallares)
- chore: Avoid gemfile.lock updates by fixing dependencies (#4694) via Facundo Menzella (@facumenzella)
- UI Preview Mode: mock products (#4735) via Antonio Pallares (@ajpallares)
- [Paywalls] Add extra gradient previews (#4750) via Mark Villacampa (@MarkVillacampa)
5.16.0
RevenueCat SDK
✨ New Features
- feat: Add paywall tester examples for simpler testing (#4710) via Facundo Menzella (@facumenzella)
🐞 Bugfixes
- fix: PaywalTester successful archive (#4736) via Facundo Menzella (@facumenzella)
- fix: Avoid the use of return switch (#4733) via Facundo Menzella (@facumenzella)
- Fix Font.TextStyle.caption3 Availabilities on tvOS (#4716) via Will Taylor (@fire-at-will)
RevenueCatUI SDK
🐞 Bugfixes
- [Paywalls] Move SwiftUI previews for badge behind DEBUG flag (#4717) via Josh Holtz (@joshdholtz)
Paywallv2
✨ New Features
- [Paywalls V2] Remove/replace
PAYWALL_COMPONENTScompiler flag and fix OS/platform compile issues (#4727) via Josh Holtz (@joshdholtz)
🐞 Bugfixes
- [Paywalls V2] Fix footer positioning and bottom padding (#4746) via Josh Holtz (@joshdholtz)
- [Paywalls V2] Ignore top safe area edges for image (#4744) via Josh Holtz (@joshdholtz)
- [Paywalls V2] Support variable mapping (#4740) via Josh Holtz (@joshdholtz)
- [Paywalls V2] Fix footer spacing issues (#4730) via Josh Holtz (@joshdholtz)
- [Paywalls V2] Fix paywalls badge rendering (#4719) via Josh Holtz (@joshdholtz)
Customer Center
🐞 Bugfixes
- fix: Revisit environment values for CustomerCenter (#4723) via Facundo Menzella (@facumenzella)
- fix: Remove buttonStyle for PurchaseHistory (#4724) via Facundo Menzella (@facumenzella)
- fix: Show close button in ErrorView (#4711) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- [Paywalls] Fix ZStack alignment (#4748) via Mark Villacampa (@MarkVillacampa)
- [Paywalls V2] Add full cover option to Paywalls Tester (#4745) via Josh Holtz (@joshdholtz)
- UI Preview Mode: app user ID (#4725) via AJPallares (@ajpallares)
- [Paywalls] Add background property to Stack component (#4743) via Mark Villacampa (@MarkVillacampa)
- [Paywalls] Do not embed the badge in an extra stack (#4742) via Mark Villacampa (@MarkVillacampa)
- Add
uiPreviewModetoDangerousSettings(#4714) via AJPallares (@ajpallares) - [Paywalls] Badge fixes (#4696) via Mark Villacampa (@MarkVillacampa)
- [Paywalls] Add Timeline component (#4713) via Mark Villacampa (@MarkVillacampa)
- [Paywalls V2] Rename
paywallFootertooriginalTemplatePaywallFooter(#4721) via Josh Holtz (@joshdholtz) - [Paywalls V2] New overrides structure (#4705) via Josh Holtz (@joshdholtz)
5.15.1
RevenueCatUI SDK
Customer Center
🐞 Bugfixes
- fix: Show expired subscriptions if nonEmpty (#4707) via Facundo Menzella (@facumenzella)
- feat: Add debug section for purchase detail (#4702) via Facundo Menzella (@facumenzella)
- fix: Use usesNavigationStack instead of usesExistingNavigation (#4706) via Facundo Menzella (@facumenzella)
- fix: Set environment values for every child view in CustomerCenter (#4704) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- [Paywalls] Fix hex colors with alpha component (#4698) via Mark Villacampa (@MarkVillacampa)
5.15.0
RevenueCat SDK
✨ New Features
- Add convenience method for setting PostHog User ID (#4679) via Cody Kerns (@codykerns)
🐞 Bugfixes
- Do not lint deleted files (#4687) via Facundo Menzella (@facumenzella)
- fix: Set https urls for packages (#4669) via Facundo Menzella (@facumenzella)
- Add purchaseWithParams to PurchasesType (#4663) via Will Taylor (@fire-at-will)
- fix: Fix versions for swift-doc, snapshot-testing & nimble (#4661) via Facundo Menzella (@facumenzella)
- fix: Use custom label for CompatibilityContentUnavailableView (#4647) via Facundo Menzella (@facumenzella)
- Deprecate misnamed purchase(params) function in Obj-C (#4645) via Will Taylor (@fire-at-will)
RevenueCatUI SDK
Customer Center
✨ New Features
- Introduce CompatibilityLabeledContent (#4659) via Facundo Menzella (@facumenzella)
- Add support for
displayPurchaseHistoryLink(#4686) via Facundo Menzella (@facumenzella) - Introduce
NavigationOptionsfor custom navigation andCustomerCenterNavigationLink(#4682) via Facundo Menzella (@facumenzella)
🐞 Bugfixes
- Revert changes to public Customer Center API (#4681) via Cesar de la Vega (@vegaro)
- Dismiss alert using binding instead of environment dismiss (#4653) via Facundo Menzella (@facumenzella)
🔄 Other Changes
- Add View extension based on CompatibilityNavigationStack (#4677) via Facundo Menzella (@facumenzella)
- fix: Add missing test for support in CustomerCenter (#4691) via Facundo Menzella (@facumenzella)
- Use config response for
displayPurchaseHistoryLink(#4690) via Facundo Menzella (@facumenzella) - Improve syntax for
CommonLocalizedString(#4688) via Facundo Menzella (@facumenzella) - [Trusted Entitlements] Enable Trusted Entitlements by default (#4672) via Toni Rico (@tonidero)
- [Trusted Entitlements] Do not clear CustomerInfo upon enabling Trusted Entitlements (#4671) via Toni Rico (@tonidero)
- [Paywalls V2] Move image mask after sizing (#4675) via Josh Holtz (@joshdholtz)
- [Paywalls V2] Add masking (concave, convex, circle) and padding/margin to image (#4674) via Josh Holtz (@joshdholtz)
- [Paywalls V2] Use V1 default paywall when footers are used with V2 paywalls (#4667) via Josh Holtz (@joshdholtz)
- [Paywalls V2] Added V1 fallback paywall into Paywall V2 error logic (#4666) via Josh Holtz (@joshdholtz)
- Do not warn when using mac API keys (#4668) via Toni Rico (@tonidero)
- [Paywalls V2] Prefetch low res images (#4658) via Josh Holtz (@joshdholtz)
- [Paywalls V2] Convert Codable structs to classes (#4665) via Josh Holtz (@joshdholtz)
- [Paywalls V2] Icon Component (#4655) via Josh Holtz (@joshdholtz)
- [Paywalls] Tabs (multi-tier / toggle) component (#4648) via Josh Holtz (@joshdholtz)
- [Paywalls V2] Fix compilation errors (#4657) via Josh Holtz (@joshdholtz)
- [Paywalls V2] Accept number as font size for text (#4654) via Josh Holtz (@joshdholtz)
- [Paywalls] Add Badge Modifier (#4596) via Mark Villacampa (@MarkVillacampa)
- [Paywalls V2] Updated outdated image component properties (#4649) via Josh Holtz (@joshdholtz)
- [Paywalls V2] Updating UIConfig aliased colors to contain both light and dark (#4650) via Josh Holtz (@joshdholtz)
- [Paywalls V2] Fix vstack and hstack growing size when fit (#4646) via Josh Holtz (@joshdholtz)
- [Paywalls] Use CALayer-backed shadows and refactor Shape.swift (#4630) via Mark Villacampa (@MarkVillacampa)
- [Paywalls V2] Optionalizing padding, margin, and corner radius properties for safety (#4644) via Josh Holtz (@joshdholtz)
- [Paywalls V2] Decode rectangle corners as optional (#4640) via Josh Holtz (@joshdholtz)
5.14.6
RevenueCat SDK
🐞 Bugfixes
- [EXTERNAL] Lock RateLimiter.shouldProceed() entirely to avoid race conditions (#4635) via @nguyenhuy (#4637) via JayShortway (@JayShortway)
🔄 Other Changes
- [Paywalls V2] Implement V2 variables and functions (#4633) via Josh Holtz (@joshdholtz)
- [Paywalls] Fix PaywallTester build (#4636) via Mark Villacampa (@MarkVillacampa)
- [Paywalls] Fix gradient orientation by shifting initial position by 90º and making it rotate clockwise (#4634) via Mark Villacampa (@MarkVillacampa)
- [Paywalls V2] Add support for alias solid hex colors (not gradients) (#4632) via Josh Holtz (@joshdholtz)
- [Paywalls V2] Support custom fonts with UIConfig (#4631) via Josh Holtz (@joshdholtz)
- [Paywalls V2] Add UIConfig to OfferingsResponse (#4628) via Josh Holtz (@joshdholtz)
5.14.5
RevenueCat SDK
🐞 Bugfixes
- add
fr_FRlocalization (#4624) via Andy Boedo (@aboedo)
RevenueCatUI SDK
Paywallv2
🐞 Bugfixes
- [Paywalls V2] Fix analytics and dismiss (#4620) via Josh Holtz (@joshdholtz)
🔄 Other Changes
- [Paywalls V2] Added fallback components (#4621) via Josh Holtz (@joshdholtz)
5.14.4
RevenueCatUI SDK
Paywallv2
🐞 Bugfixes
- [Paywalls V2] Fix current offering and sticky footer (#4617) via Josh Holtz (@joshdholtz)
Customer Center
🐞 Bugfixes
- Use SK2 RenewalInfo to get renewal prices & currency (#4608) via Will Taylor (@fire-at-will)
🔄 Other Changes
- Add Comment to StoreKit2ObserverModePurchaseDetectorTests (#4614) via Will Taylor (@fire-at-will)
- Fixing text, image, and footer render issues (#4607) via Josh Holtz (@joshdholtz)
5.14.3
RevenueCatUI SDK
Customer Center
🐞 Bugfixes
- Fix loading Customer Center when entitlement is granted by another Apple app (#4603) via Cesar de la Vega (@vegaro)
🔄 Other Changes
- Use #fileID instead of #file to avoid including the full path in the compiled binary (#4605) via Mark Villacampa (@MarkVillacampa)
5.14.2
RevenueCat SDK
🐞 Bugfixes
- Revert "Always call readyForPromotedProduct on the main actor" (#4599) via Will Taylor (@fire-at-will)
🔄 Other Changes
- [Paywalls] Fix issues with rounded corners and borders (#4594) via Mark Villacampa (@MarkVillacampa)
5.14.1
RevenueCat SDK
🐞 Bugfixes
- Always call readyForPromotedProduct on the main actor (#4584) via Will Taylor (@fire-at-will)
🔄 Other Changes
- [WEB-1757] Handle new backend error codes that may show in the redemption endpoint (#4592) via Toni Rico (@tonidero)
- Update refund granted default string (#4588) via Will Taylor (@fire-at-will)
- Make web Redemption Link APIs stable (#4591) via Toni Rico (@tonidero)
- Dont show refund cancelled message when user cancels refund (#4587) via Will Taylor (@fire-at-will)
- Remove extra beta Customer Center docs (#4585) via Cesar de la Vega (@vegaro)
- [Paywalls V2] Fix border being hidden by next sibling component (#4523) via Josh Holtz (@joshdholtz)
5.14.0
RevenueCat SDK
🐞 Bugfixes
- Support non-JSON object decodable values in
getMetadataValue(#4555) via Cody Kerns (@codykerns)
RevenueCatUI SDK
Customer Center
✨ New Features
- Support toggling update warnings & show update in restore flow (#4571) via Will Taylor (@fire-at-will)
- Add feedback survey option chosen event (#4528) via Cesar de la Vega (@vegaro)
- Expose Customer Center to UIKit (#4560) via Will Taylor (@fire-at-will)
- [Customer Center] Slight improvement to the Customer Center Promotional Offer view (#4554) via Andy Boedo (@aboedo)
🐞 Bugfixes
- Calculate restore results based on presence of purchases (#4576) via Will Taylor (@fire-at-will)
- Always reload customerInfo when Customer Center is loaded (#4575) via Will Taylor (@fire-at-will)
- Make presentCustomerCenter's onDismiss optional (#4573) via Will Taylor (@fire-at-will)
- Fix hardcoded title in WrongPlatformView (#4569) via Cesar de la Vega (@vegaro)
- Fix wrong discriminator on
CustomerCenterAnswerSubmittedEvent(#4566) via Cesar de la Vega (@vegaro)
🔄 Other Changes
- Add ErrorView to CustomerCenter (#4574) via Cesar de la Vega (@vegaro)
- Address ConfirmationDialog SwiftUI error log message (#4577) via Will Taylor (@fire-at-will)
- Refactors the creation of the subscription details in Customer Center (#4515) via Cesar de la Vega (@vegaro)
- [Paywals] Update paywalls tester Package.resolved (#4570) via Mark Villacampa (@MarkVillacampa)
- [Paywalls] Fix iOS 13/14 tests (#4568) via Mark Villacampa (@MarkVillacampa)
- Customer Center DocC updates (#4564) via Will Taylor (@fire-at-will)
- Fix paywalls tester build in
main(#4565) via Cesar de la Vega (@vegaro) - Hide mode from public init in
CustomerCenterView(#4563) via Cesar de la Vega (@vegaro) - [EXTERNAL] Polished the Polish translation (#4496) via @miszu (#4556) via JayShortway (@JayShortway)
- Revert "Remove PaywallsTesterTests" (#4557) via Cesar de la Vega (@vegaro)
5.13.0
RevenueCat SDK
✨ New Features
- Adds
subscriptionstoCustomerInfo(#4508) via Cesar de la Vega (@vegaro)
🐞 Bugfixes
- [Paywalls] Fix PaywallTester compilation on Xcode 15 (#4540) via Mark Villacampa (@MarkVillacampa)
- Paywalls: Update Finnish "restore" localization (#4493) via Jeffrey Bunn (@Jethro87)
RevenueCatUI SDK
🐞 Bugfixes
- Fix translucent navigation bar on paywalls by making it fully transparent (on iOS 16+) (#4543) via Josh Holtz (@joshdholtz)
- Fix build for app extensions (#4531) via Cesar de la Vega (@vegaro)
Customer Center
🐞 Bugfixes
- Adds missing revisionId to CustomerCenter impression event (#4537) via Cesar de la Vega (@vegaro)
- Customer Center deeplinks should always be opened externally (#4533) via Cesar de la Vega (@vegaro)
- Use
ManageSubscriptionsViewfor users without active subscriptions (#4530) via Cesar de la Vega (@vegaro)
🔄 Other Changes
- run-test-ios-15 in xcode 15 to fix incompatibilities with emergetools (#4319) via Cesar de la Vega (@vegaro)
- WebPurchaseRedemption: Rename
alreadyRedeemedresult topurchaseBelongsToOtherUser(#4542) via Toni Rico (@tonidero) - [Paywalls] Add previews for different combinations of vertical/horizontal alignment and flex distributions (#4538) via Mark Villacampa (@MarkVillacampa)
- Renames isDeeplink to isWebLink (#4535) via Cesar de la Vega (@vegaro)
- Update Package.resolved (#4534) via Cesar de la Vega (@vegaro)
- Add repo name (#4532) via Noah Martin (@noahsmartin)
- [Paywalls] Add Emerge Snapshot Tests (#4529) via Mark Villacampa (@MarkVillacampa)
- Adds API Test for
jwsRepresentationin obj-c (#4526) via Andy Boedo (@aboedo) - Create
CustomerCenterEvent(#4392) via Cesar de la Vega (@vegaro) - [Paywalls] Add support for gradient backgrounds (#4522) via Mark Villacampa (@MarkVillacampa)
5.12.1
RevenueCatUI SDK
🐞 Bugfixes
- Fix PaywallEvents failing to deserialize (#4520) via Cesar de la Vega (@vegaro)
5.12.0
RevenueCat SDK
Win-back Offers
✨ New Features
- Add eligibleWinBackOffers(forPackage) functions (#4516) via Will Taylor (@fire-at-will)
5.11.0
RevenueCat SDK
✨ New Features
- Support anonymous web purchase redemptions (#4439) via Toni Rico (@tonidero)
RevenueCatUI SDK
✨ New Features
- Add new view modifier to redeem web purchases (#4446) via Toni Rico (@tonidero)
Customer Center
🐞 Bugfixes
- Add lifetime support to the Customer Center (#4503) via Cesar de la Vega (@vegaro)
🔄 Other Changes
- [Paywalls] Remove lazy stack usages and fix alignment issues (#4514) via Mark Villacampa (@MarkVillacampa)
- Pass transactionData to handleReceiptPost in syncPurchasesSK2 (#4513) via Mark Villacampa (@MarkVillacampa)
- [Paywalls] Fix stack alignment issues by applying frame alignment to the size modifier (#4511) via Mark Villacampa (@MarkVillacampa)
- [FIX] Update License Copywrite (#4510) via Jacob Eiting (@jeiting)
- [Paywalls] Add button and shortcut to refresh the presented live paywall (#4509) via Mark Villacampa (@MarkVillacampa)
- [Paywalls V2] Add root paywall background (color and image) (#4502) via Josh Holtz (@joshdholtz)
5.10.0
RevenueCat SDK
Win-back Offers
✨ New Features
- Support fetching & redeeming eligible win-back offers in custom paywalls (#4485) via Will Taylor (@fire-at-will)
🐞 Bugfixes
- Fix transaction metadata in purchase tester app (#4505) via Will Taylor (@fire-at-will)
🔄 Other Changes
- [Paywalls] Use .frame(alignment:) to fix alignment in non-multiline text components (#4500) via Mark Villacampa (@MarkVillacampa)
- [Paywalls V2] Allowing intro eligibility overrides for text (and image and stack) (#4495) via Josh Holtz (@joshdholtz)
- [Paywalls V2] Introduce new
LocalizationProviderfor localized strings and locale (#4491) via Josh Holtz (@joshdholtz) - [Paywalls V2] Process variables in the text component (#4490) via Josh Holtz (@joshdholtz)
- Fighting flakiness: no longer uses
beCloseToDateinCustomerInfoOfflineEntitlementsStoreKitTest.verifyEntitlement(#4399) via JayShortway (@JayShortway)
5.9.0
RevenueCat SDK
Customer Center
🐞 Bugfixes
- Dismiss promotional offer sheet after successful purchase (#4475) via Will Taylor (@fire-at-will)
Win-back Offers
✨ New Features
- Support Redeeming Win-Back Offers with Streamlined Purchasing Disabled (#4370) via Will Taylor (@fire-at-will)
RevenueCatUI SDK
Customer Center
✨ New Features
- Add support for
product_mappingin promotional offers (#4489) via Cesar de la Vega (@vegaro)
🐞 Bugfixes
- Close feedback survey after picking an option (#4444) via Cesar de la Vega (@vegaro)
🔄 Other Changes
- Enable Paywall Tester to build with Paywalls V2 (#4487) via Josh Holtz (@joshdholtz)
- Fix Paywalls Tester when not being built with Paywalls V2 (#4481) via Josh Holtz (@joshdholtz)
- [Paywalls V2] Fix typo in CI script (#4480) via Mark Villacampa (@MarkVillacampa)
- [Paywalls V2] Enable PAYWALL_COMPONENTS compiler flag when building PaywallTester in Xcode Cloud (#4479) via Mark Villacampa (@MarkVillacampa)
- [Paywalls V2] Update Image to handle property overrides (#4477) via Josh Holtz (@joshdholtz)
- [Paywalls V2] Update Stack to handle property overrides (#4476) via Josh Holtz (@joshdholtz)
- [Paywalls V2] Store decoding errors in individual paywall (instead of failing entire offerings response) (#4473) via Josh Holtz (@joshdholtz)
- [Paywalls V2] Update shape spec (#4472) via Josh Holtz (@joshdholtz)
- [Paywalls V2] Update text spec (#4469) via Josh Holtz (@joshdholtz)
- [Paywalls V2] Update stack size spec (#4467) via Josh Holtz (@joshdholtz)
- [Paywalls V2] Update color spec (#4468) via Josh Holtz (@joshdholtz)
- Update PurchaseParam code sample (#4470) via Will Taylor (@fire-at-will)
5.8.0
RevenueCat SDK
✨ New Features
- Add
tenjinAnalyticsInstallationIdsetter property (#4437) via Toni Rico (@tonidero)
📦 Dependency Updates
- Bump cocoapods from 1.15.2 to 1.16.2 (#4433) via dependabot[bot] (@dependabot[bot])
RevenueCatUI SDK
🐞 Bugfixes
- Fixes reloading paywall images after they've been scrolled off screen (#4423) via JayShortway (@JayShortway)
Customer Center
🐞 Bugfixes
- Refactor
SubscriptionDetailsViewand betterWrongPlatformView(#4410) via Cesar de la Vega (@vegaro)
🔄 Other Changes
- Create paywall component view models in a factory (#4455) via Josh Holtz (@joshdholtz)
- Fix winback tests on iOS 14 & API Tester (#4453) via Will Taylor (@fire-at-will)
- Fix
RCPurchaseParamsAPI tests (#4454) via Cesar de la Vega (@vegaro) - Fixes for paywalls v2 renderer after testing some real life paywalls (#4436) via Josh Holtz (@joshdholtz)
- Skip
testCannotFlushMultipleTimesInParalleltest in xcode 14 (#4443) via Cesar de la Vega (@vegaro) - [Paywalls] Send paywall events when the app is backgrounded and after a successful purchase (#4438) via Mark Villacampa (@MarkVillacampa)
- Support fetching eligible win-back offers for a product (#4431) via Will Taylor (@fire-at-will)
- Introduce PurchaseParams to allow passing extra configuration info when making a purchase (#4400) via Mark Villacampa (@MarkVillacampa)
- Refactor Paywall events so it can be used for customer center (#4376) via Cesar de la Vega (@vegaro)
- Apply state and conditions ONLY for text component (#4417) via Josh Holtz (@joshdholtz)
- Text, Image, and Stack properties can be overridden on different states/conditions (#4414) via Josh Holtz (@joshdholtz)
- PurchaseButtonComponent is now just a container/stack like ButtonComponent (#4415) via Josh Holtz (@joshdholtz)
- Remove PackageGroup (#4413) via Josh Holtz (@joshdholtz)
- The StackComponent has an optional shadow (#4429) via JayShortway (@JayShortway)
5.7.1
RevenueCat SDK
📦 Dependency Updates
- Bump rexml from 3.3.8 to 3.3.9 (#4419) via dependabot[bot] (@dependabot[bot])
- Bump rexml from 3.3.7 to 3.3.9 in /Tests/InstallationTests/CocoapodsInstallation (#4418) via dependabot[bot] (@dependabot[bot])
RevenueCatUI SDK
Customer Center
🐞 Bugfixes
- Adds compatibility for suffix offer identifiers (#4393) via Cesar de la Vega (@vegaro)
🔄 Other Changes
- Fixes the sticky footer not drawing in the bottom safe area. (#4422) via JayShortway (@JayShortway)
- Adds long sample paywall with sticky footer to PaywallsTester (#4412) via JayShortway (@JayShortway)
RootViewactually shows the sticky footer (#4411) via JayShortway (@JayShortway)- Adds scaffolding for
StickyFooterComponent(#4409) via JayShortway (@JayShortway) - Improved JSON format for ButtonComponent codables (#4408) via Josh Holtz (@joshdholtz)
5.7.0
RevenueCat SDK
📦 Dependency Updates
- Bump danger from 9.5.0 to 9.5.1 (#4388) via dependabot[bot] (@dependabot[bot])
- Bump fastlane from 2.224.0 to 2.225.0 (#4387) via dependabot[bot] (@dependabot[bot])
RevenueCatUI SDK
Customer Center
✨ New Features
- [CustomerCenter] Add default info to support emails (#4397) via Toni Rico (@tonidero)
- Support custom URL paths in
ManageSubscriptionsView(#4382) via Toni Rico (@tonidero)
🐞 Bugfixes
- Default URL to nil in CustomerCenter HelpPaths (#4401) via Cesar de la Vega (@vegaro)
- Add default values to enums in Customer Center config response (#4386) via Cesar de la Vega (@vegaro)
- Fixes
SubscriptionDetailsViewbackground color in dark mode (#4371) via JayShortway (@JayShortway) - Better spacing in
PromotionalOfferView(#4369) via Cesar de la Vega (@vegaro)
🔄 Other Changes
- Fix integration tests simulator (#4396) via Cesar de la Vega (@vegaro)
- adds callout to SPM installation tip for visibility (#4398) via rglanz-rc (@rglanz-rc)
- Fix iOS 15, 14 tests using wrong version of
swift-snapshot-testingand API tests (#4394) via Cesar de la Vega (@vegaro) - Fixes broken references in project.pbxproj. (#4385) via JayShortway (@JayShortway)
- Fix
PaywallsTestercompilation (#4389) via Cesar de la Vega (@vegaro) - Fixes macOS snapshots for X-Is-Debug-Build header (#4383) via JayShortway (@JayShortway)
- Paywall component containers are all stacks (#4380) via Josh Holtz (@joshdholtz)
- Remove Storefront from PaymentWrapperQueue (#4377) via Will Taylor (@fire-at-will)
- Select package and purchase (#4332) via Josh Holtz (@joshdholtz)
- Added new individual corner radius and border modifier (#4328) via Josh Holtz (@joshdholtz)
- Render packages, package, and purchase button views for paywall components (#4324) via Josh Holtz (@joshdholtz)
- ButtonComponent can show the Customer Center (#4373) via JayShortway (@JayShortway)
- Added scaffolding for paywall components, view models, and views (#4321) via Josh Holtz (@joshdholtz)
- Adds actionlint to lint GitHub Actions workflows (#4326) via JayShortway (@JayShortway)
- Local.xcconfig is read by Package.swift (#4368) via JayShortway (@JayShortway)
- ButtonComponent can restore purchases (#4372) via JayShortway (@JayShortway)
- ButtonComponent can dismiss the paywall (#4365) via JayShortway (@JayShortway)
- ButtonComponent can handle URL destinations (#4360) via JayShortway (@JayShortway)
- Models the Action for the ButtonComponent (#4353) via JayShortway (@JayShortway)
- Adds scaffolding for the ButtonComponent. (#4348) via JayShortway (@JayShortway)
- Local.xcconfig is read by PurchaseTester and PaywallsTester (#4367) via JayShortway (@JayShortway)
- Adds X-Is-Debug-Build header (#4364) via JayShortway (@JayShortway)
- Adds
.index-buildto.gitignore. (#4366) via JayShortway (@JayShortway)
5.6.0
RevenueCat SDK
🐞 Bugfixes
- Fix
hasFeature(RetroactiveAttribute)check in iOS 14 (#4359) via Cesar de la Vega (@vegaro) - Only Treat Deferred StoreKit Messages as Shown When They are Shown (#4344) via Will Taylor (@fire-at-will)
📦 Dependency Updates
- Bump fastlane from 2.223.1 to 2.224.0 (#4354) via dependabot[bot] (@dependabot[bot])
- Bump fastlane-plugin-revenuecat_internal from
5b2e35cto3b1e7cf(#4347) via dependabot[bot] (@dependabot[bot])
Win-back Offers
✨ New Features
- CAT-1726: Support Deferring Win-Back StoreKit Messages (#4343) via Will Taylor (@fire-at-will)
RevenueCatUI SDK
🐞 Bugfixes
- Fixes double callbacks when using
PaywallViewController(#4333) via Cesar de la Vega (@vegaro)
Customer Center
🐞 Bugfixes
- Fix setting accent color in Customer Center (#4358) via Cesar de la Vega (@vegaro)
- Improve promotional offer button when pressed (#4342) via Cesar de la Vega (@vegaro)
- [CustomerCenter] Hide unknown paths (#4350) via Toni Rico (@tonidero)
- Remove access to Localization env variable in ManageSubscriptionsViewModel (#4339) via Cesar de la Vega (@vegaro)
🔄 Other Changes
- Update MagicWeather sample app (#4337) via nyeu (@nyeu)
- Allows enabling PAYWALL_COMPONENTS using a Local.xcconfig file. (#4341) via JayShortway (@JayShortway)
- Better logs for promotional offer view (#4336) via Cesar de la Vega (@vegaro)
- Fix Xcode 16 warnings (#4334) via Mark Villacampa (@MarkVillacampa)
- Run CI tests on iOS18/watchOS11 & Use Xcode 16 (#4295) via Will Taylor (@fire-at-will)
5.5.0
🫂 Customer Center Beta 🫂
This release adds public beta support for the new Customer Center on iOS 15.0+.
This central hub is a self-service section that can be added to your app to help your users manage their subscriptions on their own, reducing the support burden on developers like you so you can spend more time building apps and less time dealing with support issues. We are hoping adding this new section to your app can help you reduce customer support interactions, obtain feedback from your users and ultimately reduce churn by retaining them as subscribers, helping you make more money.
See our Customer Center documentation for more information.
Features currently available
- Users can cancel current subscriptions
- Users can ask for refunds
- Users can change their subscription plans
- Users can restore previous purchases and contact your support email if they have trouble restoring
- Users will be asked to update their app if they are on an older version before being able to contact your support email
- Developers can ask for reasons for cancellations or refunds, and automatically offer promo offers to retain users
- Configuration is done in the RevenueCat dashboard, and advanced configuration is available via JSON
Limitations
- Only available on iOS 15+
- Limited visual configuration options in the dashboard. It is possible to configure the Customer Center via JSON.
- We are exposing a SwiftUI view and a modifier at the moment. We haven't built a UIKit wrapper to help integrating on UIKit apps, but it's in the roadmap.
How to enable
You can use the CustomerCenterView view directly:
var body: some View {
Group {
NavigationStack {
HomeView()
.navigationTitle("Home")
.navigationBarTitleDisplayMode(.inline)
.toolbar {
ToolbarItem(placement: .topBarLeading) {
Button {
} label: {
Image(systemName: "line.3.horizontal")
}
}
ToolbarItem(placement: .topBarTrailing) {
Button {
self.isCustomerCenterPresented = true
} label: {
Image(systemName: "person.crop.circle")
}
}
}
}
}
.foregroundColor(.white)
.sheet(isPresented: $isCustomerCenterPresented) {
CustomerCenterView()
}
}
Or you can use the modifier:
VStack {
Button {
self.presentingCustomerCenter = true
} label: {
TemplateLabel(name: "Customer Center", icon: "person.fill")
}
}
.presentCustomerCenter(isPresented: self.$presentingCustomerCenter) {
self.presentingCustomerCenter = false
}
Listening to events
You can listen to events in the Customer Center using the customerCenterActionHandler closure:
CustomerCenterView { customerCenterAction in
switch customerCenterAction {
case .restoreStarted:
case .restoreFailed(_):
case .restoreCompleted(_):
case .showingManageSubscriptions:
case .refundRequestStarted(_):
case .refundRequestCompleted(_):
}
}
or if using the modifier:
.presentCustomerCenter(
isPresented: self.$presentingCustomerCenter,
customerCenterActionHandler: { action in
switch action {
case .restoreCompleted(let customerInfo):
case .restoreStarted:
case .restoreFailed(let error):
case .showingManageSubscriptions:
case .refundRequestStarted(let productId):
case .refundRequestCompleted(let status):
case .feedbackSurveyCompleted(let surveyOptionID):
}
}
) {
self.presentingCustomerCenter = false
}
Release Notes
RevenueCatUI SDK
Paywall Components
🐞 Bugfixes
- Match text, image, and stack properties and behaviors from dashboard (#4261) via Josh Holtz (@joshdholtz)
Customer Center
🐞 Bugfixes
- More customer center docs and fix init (#4304) via Cesar de la Vega (@vegaro)
- Remove background from FeedbackSurveyView (#4300) via Cesar de la Vega (@vegaro)
🔄 Other Changes
- Fix iOS 15 tests (#4320) via Cesar de la Vega (@vegaro)
- Generating new test snapshots for
main- watchos (#4323) via RevenueCat Git Bot (@RCGitBot) - Generating new test snapshots for
main- macos (#4322) via RevenueCat Git Bot (@RCGitBot) - Adds an
onDismisscallback toErrorDisplay(#4312) via JayShortway (@JayShortway) - Added previews for text component, image component, and paywall for template 1 (#4306) via Josh Holtz (@joshdholtz)
- Remove
CUSTOMER_CENTER_ENABLED(#4305) via Cesar de la Vega (@vegaro) - [Diagnostics] Refactor diagnostics track methods to handle background work automatically (#4270) via Toni Rico (@tonidero)
- [Diagnostics] Add
apple_products_requestevent (#4247) via Toni Rico (@tonidero) - Bump webrick from 1.7.0 to 1.8.2 in /Tests/InstallationTests/CocoapodsInstallation (#4313) via dependabot[bot] (@dependabot[bot])
- Bump fastlane from 2.222.0 to 2.223.1 (#4309) via dependabot[bot] (@dependabot[bot])
- Bump fastlane-plugin-revenuecat_internal from
55a0455to5b2e35c(#4310) via dependabot[bot] (@dependabot[bot])
5.4.0
RevenueCat SDK
✨ New Features
- Add
kochavaintegration (#4274) via Toni Rico (@tonidero)
RevenueCatUI SDK
Customer Center
🐞 Bugfixes
- Cleanup of strings in Customer Center (#4294) via Cesar de la Vega (@vegaro)
🔄 Other Changes
- [Diagnostics] Add
apple_purchase_attemptevent (#4253) via Cesar de la Vega (@vegaro) - Temporarily set SWIFT_TREAT_WARNINGS_AS_ERRORS as NO (#4292) via Cesar de la Vega (@vegaro)
5.3.4
RevenueCat SDK
🐞 Bugfixes
- Replace withCheckedThrowingContinuation Calls With withUnsafeThrowingContinuation (#4286) via Will Taylor (@fire-at-will)
- Round price per period calculations to nearest 2-decimal (#4275) via Toni Rico (@tonidero)
📦 Dependency Updates
- Bump fastlane-plugin-revenuecat_internal from
5140dbcto55a0455(#4277) via dependabot[bot] (@dependabot[bot])
RevenueCatUI SDK
🐞 Bugfixes
- [Paywalls] Use store product for
{{ sub_period }}duration (#4273) via Josh Holtz (@joshdholtz)
Customer Center
🐞 Bugfixes
- Stateobject instantiation fix (#4271) via James Borthwick (@jamesrb1)
🔄 Other Changes
- Update allowSharingAppStoreAccount deprecation message (#4272) via Will Taylor (@fire-at-will)
- Update StoreKit Version Info in GitHub Issues Template (#4254) via Will Taylor (@fire-at-will)
5.3.3
Bugfixes
- Remove usage of adServicesToken in syncPurchases (#4257) via Mark Villacampa (@MarkVillacampa)
- Fixes a Paywall Template 7 crash when none of the tiers have any available products. (#4243) via JayShortway (@JayShortway)
- [SK2] send unsynced attributes when syncing purchases (#4245) via Mark Villacampa (@MarkVillacampa)
Other Changes
- Do not embed
RevenueCat.frameworkinRevenueCatUI(#4256) via Cesar de la Vega (@vegaro) - Add warnings and clarifications to v5 migration docs (#4231) via Mark Villacampa (@MarkVillacampa)
- Fixes SwiftLint violation of rule optional_data_string_conversion (#4252) via JayShortway (@JayShortway)
- Paywall Components Localized Strings (#4237) via James Borthwick (@jamesrb1)
- Update
fastlane-plugin-revenuecat_internal(#4244) via Cesar de la Vega (@vegaro) - Add missing
#if PAYWALL_COMPONENTS(#4241) via James Borthwick (@jamesrb1) - Paywalls Components Viewmodels + partial localization support (#4230) via James Borthwick (@jamesrb1)
5.3.2
Bugfixes
- [Customer Center] Build
WrongPlatformViewfrom JSON (#4234) via Cesar de la Vega (@vegaro) - Add
feedbackSurveyCompletedevent to Customer Center events (#4194) via Cesar de la Vega (@vegaro)
Other Changes
- [Diagnostics] Add
backend_error_codeproperty (#4236) via Toni Rico (@tonidero) - Update README.md (#3986) via Khoa (@onmyway133)
5.3.1
Bugfixes
- Fix
compatibleTopBarTrailingin MacOS and api tests (#4226) via Cesar de la Vega (@vegaro) - [Paywall] Fix restoreStarted not being called on
presentPaywallIfNeededwhen usingrequiredEntitlementIdentifier(#4223) via Josh Holtz (@joshdholtz) - [CustomerCenter] Move sheet and restore alert creation to
ManageSubscriptionsView(#4220) via Cesar de la Vega (@vegaro) - [EXTERNAL]
Custom Entitlements Computation: fix support display on debug screen (#4215) by @NachoSoto (#4218) via Toni Rico (@tonidero) - [Customer Center] Add padding to
No thanksin promotional offer screen (#4221) via Cesar de la Vega (@vegaro) - Fix version number in plist files (#4213) via Cesar de la Vega (@vegaro)
- fix mac os sandbox check slowness (#3879) via Andy Boedo (@aboedo)
- [Customer Center] Fix
FeedbackSurveyViewnot opening (#4208) via Cesar de la Vega (@vegaro) - Remove
unneeded_overridedisable to fix linter (#4209) via Cesar de la Vega (@vegaro)
Dependency Updates
- Bump rexml from 3.3.3 to 3.3.6 in /Tests/InstallationTests/CocoapodsInstallation (#4210) via dependabot[bot] (@dependabot[bot])
- Bump rexml from 3.3.3 to 3.3.6 (#4211) via dependabot[bot] (@dependabot[bot])
Other Changes
- Update readme wording (#3914) via James Borthwick (@jamesrb1)
- Set a maximum duration for iOS 15 tests (#4229) via Cesar de la Vega (@vegaro)
- Paywall Components Initial Commit (#4224) via James Borthwick (@jamesrb1)
- [CustomerCenter] Open App Store when the user wants to update their app (#4199) via JayShortway (@JayShortway)
- [Customer Center] Shows a warning when the app is not the latest version (#4193) via JayShortway (@JayShortway)
- Fix integration tests simulator version (#4219) via Cesar de la Vega (@vegaro)
- Pin swift-docc-plugin to 1.3.0 (#4216) via James Borthwick (@jamesrb1)
5.3.0
New Features
- Price rounding logic (#4132) via James Borthwick (@jamesrb1)
Bugfixes
- [Customer Center] Migrate to List style (#4190) via Cody Kerns (@codykerns)
- [Paywalls] Improve locale consistency (#4158) via Josh Holtz (@joshdholtz)
- Set Paywalls Tester deployment target to iOS 15 (#4196) via James Borthwick (@jamesrb1)
- [Customer Center] Hide Contact Support button if URL can't be created (#4192) via Cesar de la Vega (@vegaro)
- Fix the setting for SKIP_INSTALL in Xcode project (#4195) via Andy Boedo (@aboedo)
- [Customer Center] Improving customer center buttons (#4165) via Cody Kerns (@codykerns)
- Revert workaround for iOS 18 beta 5 SwiftUI crash (#4173) via Mark Villacampa (@MarkVillacampa)
- [Paywalls] Make iOS version calculation lazy (#4163) via Mark Villacampa (@MarkVillacampa)
- Observe
PurchaseHandlerwhen owned externally (#4097) via James Borthwick (@jamesrb1)
Dependency Updates
- Bump fastlane-plugin-revenuecat_internal from
d5f0742to4c4b8ce(#4167) via dependabot[bot] (@dependabot[bot]) - Bump rexml from 3.2.8 to 3.3.3 in /Tests/InstallationTests/CocoapodsInstallation (#4176) via dependabot[bot] (@dependabot[bot])
- Bump rexml from 3.2.9 to 3.3.3 (#4175) via dependabot[bot] (@dependabot[bot])
Other Changes
- [Customer Center] Clean up colors in WrongPlatformView and NoSubscriptionsView (#4204) via Cesar de la Vega (@vegaro)
- Fix failing
all-testsand retry more flaky tests (#4188) via Josh Holtz (@joshdholtz) - Compatibility content unavailable improvements (#4197) via James Borthwick (@jamesrb1)
- Create lane to enable customer center (#4191) via Cesar de la Vega (@vegaro)
- XCFramework artifacts in CircleCI (#4189) via Andy Boedo (@aboedo)
- [Customer Center] CustomerCenterViewModel checks whether the app is the latest version (#4169) via JayShortway (@JayShortway)
- export RevenueCatUI xcframework (#4172) via Andy Boedo (@aboedo)
- Corrects references from ManageSubscriptionsButtonStyle to ButtonsStyle. (#4186) via JayShortway (@JayShortway)
- Speed up carthage installation tests (#4184) via Andy Boedo (@aboedo)
- Customer center improvements (#4166) via James Borthwick (@jamesrb1)
- replace
color(from colorInformation:)global with extension (#4183) via Andy Boedo (@aboedo) - Generating new test snapshots for
main- ios-13 (#4181) via RevenueCat Git Bot (@RCGitBot) - Generating new test snapshots for
main- ios-16 (#4182) via RevenueCat Git Bot (@RCGitBot) - Generating new test snapshots for
main- ios-14 (#4180) via RevenueCat Git Bot (@RCGitBot) - Generating new test snapshots for
main- ios-15 (#4179) via RevenueCat Git Bot (@RCGitBot) - Fix tests in main (#4174) via Andy Boedo (@aboedo)
- Enable customer center tests (#4171) via James Borthwick (@jamesrb1)
- [Customer Center] Initial implementation (#3967) via Cesar de la Vega (@vegaro)
5.2.2-customercenter.alpha.3
- Fix for disabled promo offer button (#4142)
5.2.2-customercenter.alpha.2
- Fix project.pbxproj (#4122)
- Fix BackendGetCustomerCenterConfigTests (#4124)
- Add contact support button (#4023)
- Fix checking eligibility (#4138)
- Make colors nullable (#4134)
5.2.3
Bugfixes
- Fix Paywalls crash on iOS 18 beta (#4154) via Andy Boedo (@aboedo)
Dependency Updates
- Bump danger from 9.4.3 to 9.5.0 (#4143) via dependabot[bot] (@dependabot[bot])
- Bump nokogiri from 1.16.6 to 1.16.7 (#4129) via dependabot[bot] (@dependabot[bot])
- Bump fastlane from 2.221.1 to 2.222.0 (#4130) via dependabot[bot] (@dependabot[bot])
Other Changes
- Update deployment targets for tests (#4145) via Andy Boedo (@aboedo)
- Deploy purchaserTester: clean up dry-run parameter (#4140) via Andy Boedo (@aboedo)
- Clean up API Testers (#4141) via Andy Boedo (@aboedo)
- More project structure cleanup (#4131) via Andy Boedo (@aboedo)
- temporarily disables purchasetester deploy (#4133) via Andy Boedo (@aboedo)
- Fix trigger all tests branch (#4135) via Andy Boedo (@aboedo)
- Clean up XCWorkspace and testing apps (#4111) via Andy Boedo (@aboedo)
- tests trigger: add target-branch parameter to trigger from the right branch (#4121) via Andy Boedo (@aboedo)
- Re-added the RevenueCatUI tests job on every commit (#4113) via Andy Boedo (@aboedo)
5.2.2
Dependency Updates
- Bump nokogiri from 1.16.5 to 1.16.6 (#3980) via dependabot[bot] (@dependabot[bot])
Other Changes
- Only Retry POST Receipt Paths for 429 (#4107) via Will Taylor (@fire-at-will)
- Clarify Instructions to Run All Manual Tests (#4112) via Will Taylor (@fire-at-will)
- Fixes trigger_all_tests.yml triggering on every issue comment (#4114) via JayShortway (@JayShortway)
- Fixes a typo in the bug_report issue template (#3945) via JayShortway (@JayShortway)
- [External] Add missing SwiftUI environment for previews (#4109) via @noahsmartin (#4110) via Andy Boedo (@aboedo)
- Remove notify-on-non-patch-release-branches (#4106) via Cesar de la Vega (@vegaro)
5.2.1-customercenter.alpha.1
- Initial Customer Center Alpha Release
5.2.1
Bugfixes
- Retry Requests with HTTP Status 429 (#4048) via Will Taylor (@fire-at-will)
- Use newer Alert API for showing customer restored alert (#4078) via Mark Villacampa (@MarkVillacampa)
Dependency Updates
- Bump fastlane-plugin-revenuecat_internal from
5f55466tod5f0742(#4101) via dependabot[bot] (@dependabot[bot])
Other Changes
- PaywallsTester: fix macOS build (#4093) via Andy Boedo (@aboedo)
- Cleanup
trigger_all_testsgithub workflow (#4088) via Toni Rico (@tonidero) - Fix PaywallsTester by changing TestData DEBUG checks (#4092) via Cesar de la Vega (@vegaro)
- Add missing @PublicForExternalTesting that broke PaywallsTester (#4087) via Cesar de la Vega (@vegaro)
- Fix workflow permission check logic (#4084) via Toni Rico (@tonidero)
- Fix prepare next version job (#4085) via Toni Rico (@tonidero)
- [CI]: fix CI test trigger parameters (#4076) via Andy Boedo (@aboedo)
- Fix docs deploy and add manual trigger on CI (#4081) via Josh Holtz (@joshdholtz)
5.2.0
New Features
- Added new paywall template to support multiple tiered subscriptions (#4022) via Josh Holtz (@joshdholtz)
Bugfixes
- Fix certain completion blocks not being dispatched on the main thread (#4058) via Mark Villacampa (@MarkVillacampa)
- Only checks staged files for leftover API keys. (#4073) via JayShortway (@JayShortway)
Other Changes
- [Ci] Fix trigger to run all tests from github actions (#4075) via Andy Boedo (@aboedo)
- added new workflow to trigger all tests (#4051) via Andy Boedo (@aboedo)
- Reduce CI jobs (#4025) via Andy Boedo (@aboedo)
5.1.0
New Features
- Paywalls with custom purchase and restore logic handlers (#3973) via James Borthwick (@jamesrb1)
Bugfixes
- Prevent paywall PurchaseHandler from being cleared on rerender (#4035) via Josh Holtz (@joshdholtz)
- Update Purchase Tester for 5.0.0 (#4015) via Will Taylor (@fire-at-will)
Dependency Updates
- Bump fastlane from 2.221.0 to 2.221.1 (#3977) via dependabot[bot] (@dependabot[bot])
Other Changes
- Bring official
xcodesback to CI (#4029) via Cesar de la Vega (@vegaro) - Paywalls tester with sandbox purchases (#4024) via James Borthwick (@jamesrb1)
- Update v5 migration guide to contain current latest version (#4019) via Toni Rico (@tonidero)
- CI Build Docs Improvements (#4014) via Will Taylor (@fire-at-will)
- Use available resource class for backend-integration-tests-offline-job (#4013) via Will Taylor (@fire-at-will)
- Add
X-Preferred-Localesheader (#4008) via Cesar de la Vega (@vegaro)
5.0.0
The RevenueCat iOS SDK v5 is here!! Version 5.0 of the RevenueCat SDK enables full StoreKit 2 flow on the SDK and the RevenueCat backend by default.
See our RevenueCat v5 Migration Guide for all the details.
4.44.3
🔄 Other Changes
- [v4] Add Xcode 27 support (#7356) via Rick (@rickvdl)
4.44.2
RevenueCat SDK
🐞 Bugfixes
- [v4] Fix HTTP request deduplication being non-deterministic on cache keys (#5976) via Rick (@rickvdl)
🔄 Other Changes
- [v4] Remove brew tap of unused repository in CircleCI config (#5977) via Rick (@rickvdl)
4.44.1
RevenueCat SDK
🐞 Bugfixes
- [v4] Prevent duplicate post receipt requests (#5828) via Antonio Pallares (@ajpallares)
🔄 Other Changes
- [v4] Update test snapshots (#5826) via Antonio Pallares (@ajpallares)
- [v4] Update CI and fix Xcode 16 errors and warnings (#5810) via Antonio Pallares (@ajpallares)
- [v4] Changes to correctly deploy Purchase Tester and create Changelog PR into main (#5696) via Antonio Pallares (@ajpallares)
4.44.0
RevenueCat SDK
✨ New Features
- [Experimental] Add Locale to Storefront (#5658) (#5683) via JayShortway (@JayShortway)
4.43.6
🔄 Other Changes
- Adds
showStoreMessagesAutomaticallyparameter to CEC mode (#5222) via JayShortway (@JayShortway)
4.43.5
Other Changes
- v4: Add promotional offer APIs to CustomEntitlementComputation V4 SDK (#4973) via Toni Rico (@tonidero)
4.43.4
Bugfixes
- v4: Fix crash in iOS 11-12 when using MainActor (#4718) via Mark Villacampa (@MarkVillacampa)
4.43.3
Other Changes
- Remove usage of adServicesToken in syncPurchases via Mark Villacampa (@MarkVillacampa)
- Update RevenueCat-Swift.h for version 4.43.2 via RCGitBot (@RCGitBot)
- Version bump for 4.43.2 via RCGitBot (@RCGitBot)
4.43.2
Bugfixes
- Remove AdClient framework related code (#3993) via Cesar de la Vega (@vegaro)
4.43.1
Dependency Updates
- Bump fastlane from 2.220.0 to 2.221.0 (#3971) via dependabot[bot] (@dependabot[bot])
- Bump rexml from 3.2.6 to 3.2.8 (#3907) via dependabot[bot] (@dependabot[bot])
- Bump fastlane-plugin-revenuecat_internal from
8ec0072to5f55466(#3938) via dependabot[bot] (@dependabot[bot])
Other Changes
- Fix cocoapods installation tests (#3981) via Toni Rico (@tonidero)
- Remove carthage from CI and update release jobs to use xcode 15 and M1 (#3927) via Cesar de la Vega (@vegaro)
- Bring back offline integration tests on M1 (#3976) via Toni Rico (@tonidero)
- Fix Carthage (#3978) via James Borthwick (@jamesrb1)
- Revert "Run offline backend integration tests on M1 machines (#3961)" (#3974) via Toni Rico (@tonidero)
- Run offline backend integration tests on M1 machines (#3961) via Toni Rico (@tonidero)
- Xcode project with RevenueCatUI + Tests (#3960) via James Borthwick (@jamesrb1)
- Clone to spm using fastlane (#3926) via James Borthwick (@jamesrb1)
- finishTransactions/ObserverMode -> PurchasesAreCompletedBy (#3947) via James Borthwick (@jamesrb1)
- Switch tests for iOS 12 and 13 to M1 (#3958) via Toni Rico (@tonidero)
- Fix prepare next version job (#3939) via Toni Rico (@tonidero)
4.43.0
New Features
- Diagnostics (#3931) via Toni Rico (@tonidero)
Other Changes
- Revert docs-deploy to xcode 14 (#3935) via Cesar de la Vega (@vegaro)
- Diagnostics: Add logic to retry on server errors (#3930) via Toni Rico (@tonidero)
4.42.0
New Features
- RemoteImage Low Res Image support (#3906) via James Borthwick (@jamesrb1)
Bugfixes
- [EXTERNAL] Hide decorative Paywall images from accessibility (#3886) via @shiftingsand (#3892) via Toni Rico (@tonidero)
Dependency Updates
- Bump rexml from 3.2.6 to 3.2.8 in /Tests/InstallationTests/CocoapodsInstallation (#3908) via dependabot[bot] (@dependabot[bot])
- Bump fastlane-plugin-revenuecat_internal from
dd5e21fto8ec0072(#3873) via dependabot[bot] (@dependabot[bot])
Other Changes
- Revert to use xcode 14 to fix deploys (#3929) via Cesar de la Vega (@vegaro)
- SPMInstallation tests deployment version increase (#3922) via Cesar de la Vega (@vegaro)
- Only install
swiftlinton Xcode 15 jobs (#3913) via Josh Holtz (@joshdholtz) - Add
http_request_performeddiagnostics event (#3897) via Toni Rico (@tonidero) - Paywalls Tester: App Store Prep (#3889) via James Borthwick (@jamesrb1)
- Paywalls Tester: Enable Example Paywalls in Release Mode (#3885) via James Borthwick (@jamesrb1)
- Use Ruby 3.2 on CircleCI (#3896) via Josh Holtz (@joshdholtz)
- PaywallsTester: Remove unused code (#3884) via James Borthwick (@jamesrb1)
- Improved Error Handling (#3883) via James Borthwick (@jamesrb1)
- Clear diagnostics file if we detect it's too big during event tracking (#3824) via Toni Rico (@tonidero)
- Preprocessor to make select constructs public (#3880) via James Borthwick (@jamesrb1)
- Paywalls Tester: Use key defined in CI (#3869) via James Borthwick (@jamesrb1)
- Cleanup: Remove test storekit configuration files when importing through SPM (#3878) via Andy Boedo (@aboedo)
- Update fastlane plugin and fix docs index path (#3872) via Toni Rico (@tonidero)
- Update to use xcode 15.3 in CI (#3870) via Cesar de la Vega (@vegaro)
- Paywalls Tester 0.1 (#3868) via James Borthwick (@jamesrb1)
- Update config.yml for SPM repo copy (#3861) via James Borthwick (@jamesrb1)
- Change deploy-purchase-tester to use xcode 15 (#3858) via Cesar de la Vega (@vegaro)
4.41.2
Bugfixes
Paywalls: Update Norwegian "restore" localization (#3844) via Josh Holtz (@joshdholtz)
Dependency Updates
- Bump fastlane-plugin-revenuecat_internal from
f88dcd4todd5e21f(#3839) via dependabot[bot] (@dependabot[bot]) - Update Package.resolved (#3822) via Cesar de la Vega (@vegaro)
- Bump fastlane-plugin-revenuecat_internal from
1e62420tof88dcd4(#3831) via dependabot[bot] (@dependabot[bot])
Other Changes
- Add diagnostics event for Customer Info verification (#3823) via Cesar de la Vega (@vegaro)
- Fix backend integration test (#3847) via Josh Holtz (@joshdholtz)
- Push to SPM after release has been made (#3834) via James Borthwick (@jamesrb1)
- Add note to readme about new spm repo (#3828) via James Borthwick (@jamesrb1)
4.41.1
Dependency Updates
- Bump fastlane-plugin-revenuecat_internal from
8d4d9b1to1e62420(#3818) via dependabot[bot] (@dependabot[bot])
Other Changes
- Sync repo in an SPM-friendly way (#3827) via James Borthwick (@jamesrb1)
- Syncs diagnostics on initialization (#3821) via Cesar de la Vega (@vegaro)
- Only update docs index on latest stable releases (#3815) via Toni Rico (@tonidero)
4.41.0
New Features
- Paywalls: Allow closed button color to be configured (#3805) via Josh Holtz (@joshdholtz)
Other Changes
- Create
DiagnosticsTracker(#3784) via Cesar de la Vega (@vegaro) - Add DiagnosticsSynchronizer (#3787) via Cesar de la Vega (@vegaro)
- Update Package.resolved (#3796) via Cesar de la Vega (@vegaro)
4.40.1
Bugfixes
- Prevent Template 4 from wrapping Lifetime (#3789) via Josh Holtz (@joshdholtz)
- Add enum entry for external purchases store (#3779) via Mark Villacampa (@MarkVillacampa)
Dependency Updates
- Bump fastlane from 2.219.0 to 2.220.0 (#3783) via dependabot[bot] (@dependabot[bot])
Other Changes
- Add option to intercept touch events in
PaywallViewController(#3801) via Toni Rico (@tonidero) - Create DiagnosticsPostOperation (#3795) via Cesar de la Vega (@vegaro)
- Add diagnosticsQueue to BackendConfiguration (#3794) via Cesar de la Vega (@vegaro)
- Add origin to HTTPResponseType (#3793) via Cesar de la Vega (@vegaro)
- Add name property to HTTPRequestPath (#3790) via Cesar de la Vega (@vegaro)
- Add name to VerificationResult (#3792) via Cesar de la Vega (@vegaro)
- Add HTTPRequest.DiagnosticsPath (#3791) via Cesar de la Vega (@vegaro)
- Add async
syncAttributesAndOfferingsIfNeeded()(#3785) via Josh Holtz (@joshdholtz) - iOS append events to JSONL file and get diagnostics events (#3781) via Cesar de la Vega (@vegaro)
- Fix offerings integration test (#3782) via Josh Holtz (@joshdholtz)
4.40.0
New Features
- [EXTERNAL] Cocoapods support for privacy manifest (#3772) via @sdurban (#3775) via Andy Boedo (@aboedo)
4.39.1
Dependency Updates
- Bump fastlane-plugin-revenuecat_internal from
d23de33to8d4d9b1(#3769) via dependabot[bot] (@dependabot[bot])
Other Changes
- Add
RC_BILLINGstore (#3773) via Toni Rico (@tonidero) - Add lane to trigger bumps (#3766) via Cesar de la Vega (@vegaro)
4.39.0
RevenueCatUI
- Add
PaywallView.onRequestedDismissalmodifier and option to passdismissRequestedHandlertoPaywallViewController(#3738) via Cesar de la Vega (@vegaro)
Bugfixes
- [EXTERNAL] Fix Typos in ReceiptStrings.swift (#3756) via @nickkohrn (#3760) via Cesar de la Vega (@vegaro)
Other Changes
- Pin xcbeautify version for xcode 14 tests (#3759) via Cesar de la Vega (@vegaro)
- PaywallsTester: fix compilation (#3753) via Andy Boedo (@aboedo)
4.38.1
Bugfixes
- Fix for passing
TargetingContextwhen usingcurrentOffering(forPlacement:)(#3751) via Josh Holtz (@joshdholtz)
Other Changes
- Remove unneeded tests for StoreKit2 with JWS (#3747) via Josh Holtz (@joshdholtz)
4.38.0
New Features
- Paywalls: add
updateWithDisplayCloseButtontoPaywallViewController(#3708) via Cesar de la Vega (@vegaro) - New
syncAttributesAndOfferingsIfNeededmethod (#3709) via Burdock (@lburdock) - Add targeting to
PresentedOfferingContext(#3730) via Josh Holtz (@joshdholtz) - Add
currentOffering(forPlacement: String)toOfferings(#3707) via Guido Torres (@guido732) - New
Package.presentedOfferingContext(#3712) via Josh Holtz (@joshdholtz)
Bugfixes
- Mark methods with StaticString for appUserID as deprecated (#3739) via Mark Villacampa (@MarkVillacampa)
Other Changes
- [EXTERNAL] Spelling typo fix to comment (#3713) via @vdeaugustine (#3740) via Mark Villacampa (@MarkVillacampa)
4.37.0
New Features
Paywalls: new.onPurchaseStarted(package)modifier (#3693) via Cesar de la Vega (@vegaro)Paywalls: new.onRestoreStartedmodifier (#3694)(#3698) via Cesar de la Vega (@vegaro)
Other Changes
- Add more Paywalls API tests (#3697) via Cesar de la Vega (@vegaro)
Paywalls: AddpurchaseCancelledparameter topaywallFootermodifier (#3692) via Toni Rico (@tonidero)
4.36.3
RevenueCatUI
Paywalls: don't dismiss footer paywalls automatically (#3683) via NachoSoto (@NachoSoto)Paywalls: fixPaywallColor.init(light:dark:)(#3685) via NachoSoto (@NachoSoto)Paywalls: fix template 1 header overflow (#3678) via NachoSoto (@NachoSoto)
Other Changes
CI: skipRevenueCatUIAPI tests when generating snapshots (#3680) via NachoSoto (@NachoSoto)Paywalls: improvePreviewableTemplate's display name (#3682) via NachoSoto (@NachoSoto)CI: split load shedder integration tests (#3675) via NachoSoto (@NachoSoto)- Run load shedder integration tests on release branches (#3673) via Toni Rico (@tonidero)
4.36.2
RevenueCatUI
Paywalls: fix localization when installing throughCocoaPods(#3670) via NachoSoto (@NachoSoto)
4.36.1
RevenueCatUI
Paywalls: prioritizeLocale.currentoverLocale.preferredLocales(#3657) via NachoSoto (@NachoSoto)Paywalls: add logs for localization lookup (#3649) via NachoSoto (@NachoSoto)
Dependency Updates
- Bump cocoapods from 1.15.1 to 1.15.2 (#3648) via dependabot[bot] (@dependabot[bot])
Other Changes
Tests: fix iOS 15 test crash (#3650) via NachoSoto (@NachoSoto)CircleCI: remove duplicateinstall-dependencies(#3643) via NachoSoto (@NachoSoto)
4.36.0
This release is compatible with Xcode 15.3 beta 2
New Features
NonSubscriptionTransaction: exposestoreTransactionIdentifier(#3639) via NachoSoto (@NachoSoto)
RevenueCatUI
Paywalls: newpresentationModeparameter (by @Lascorbe) (#3638) via NachoSoto (@NachoSoto)
Bugfixes
- Add explicit
visionOSdeployment target (#3642) via NachoSoto (@NachoSoto)
Dependency Updates
- Bump cocoapods from 1.15.0 to 1.15.1 (#3637) via dependabot[bot] (@dependabot[bot])
Other Changes
Xcode 15.3 beta 2: removenonisolatedworkaround (#3640) via NachoSoto (@NachoSoto)
4.35.0
RevenueCatUI
Paywalls: fix finding locales with different regions (#3633) via NachoSoto (@NachoSoto)Paywalls: add 4 new variables (#3629) via NachoSoto (@NachoSoto)Paywalls: new.onPurchaseStartedmodifier (#3627) via NachoSoto (@NachoSoto)PaywallViewController: exposefontNameforCustomFontProvider(by @Jjastiny) (#3628) via NachoSoto (@NachoSoto)
Dependency Updates
- Bump danger from 9.4.2 to 9.4.3 (#3630) via dependabot[bot] (@dependabot[bot])
Other Changes
Paywalls: improve "offering has no configured paywall" error (#3625) via NachoSoto (@NachoSoto)
4.34.0
New Features
CustomerInfo: conform toIdentifiable(#3619) via NachoSoto (@NachoSoto)
RevenueCatUI
Paywalls: new.onPurchaseFailureand.onRestoreFailuremodifiers (#3622) via NachoSoto (@NachoSoto)Paywalls:.onRestoreCompletedis invoked after the restore dialog is dismissed (#3620) via NachoSoto (@NachoSoto)Paywalls: disable interactivesheetdismissal during purchases (#3613) via NachoSoto (@NachoSoto)
Other Changes
CircleCI: push pods using Xcode 15 (#3614) via NachoSoto (@NachoSoto)
4.33.0
New Features
CocoaPods: enabledvisionOS(#3262) via NachoSoto (@NachoSoto)
4.32.4
RevenueCatUI
Paywalls: fix template 5 scrolling on iOS 15 (#3608) via NachoSoto (@NachoSoto)Paywalls: improvePaywallData.config(for:)disambiguation (#3605) via NachoSoto (@NachoSoto)
Dependency Updates
- Bump cocoapods from 1.14.3 to 1.15.0 (#3607) via dependabot[bot] (@dependabot[bot])
- Bump fastlane-plugin-revenuecat_internal from
e6ba247to9c82c7a(#3606) via dependabot[bot] (@dependabot[bot])
Other Changes
Integration Tests: disable failure expectation oniOS 17.4(#3604) via NachoSoto (@NachoSoto)
4.32.3
Bugfixes
Xcode 15.3 beta 1: fix compilation errors (#3599) via NachoSoto (@NachoSoto)
Other Changes
Xcode 15.3 beta 1: fix warnings on tests (#3600) via NachoSoto (@NachoSoto)
4.32.2
Other Changes
PaywallViewController: methods for reconfiguring paywall with new offering (#3592) via NachoSoto (@NachoSoto)Integration Tests: verifyPaywallDataimages can be loaded (#3596) via NachoSoto (@NachoSoto)- Simplify
CocoapodsInstallationPodfile(#3593) via NachoSoto (@NachoSoto)
4.32.1
RevenueCatUI
PaywallViewController: new initializer withOfferingidentifier (#3587) via NachoSoto (@NachoSoto)Paywalls: improve template 5 layout for long product names (#3589) via NachoSoto (@NachoSoto)
Other Changes
Paywalls: extractedPaywallViewConfiguration(#3586) via NachoSoto (@NachoSoto)CircleCI: avoid installingXcodeswhen not needed (#3585) via NachoSoto (@NachoSoto)CircleCI: change all jobs to M1 (#3140) via NachoSoto (@NachoSoto)
4.32.0
New Features
StoreProduct: add localized price per period strings (#3546) via Andy Boedo (@aboedo)
RevenueCatUI
Paywalls: new.onPurchaseCancelledandpaywallViewControllerDidCancelPurchase:(#3578) via NachoSoto (@NachoSoto)Paywalls: improve error display (#3577) via NachoSoto (@NachoSoto)
Dependency Updates
- Bump fastlane-plugin-revenuecat_internal from
0ddee10toe6ba247(#3575) via dependabot[bot] (@dependabot[bot])
Other Changes
PurchaseTester: improvedReceiptInspectorso it accepts receipts with escape sequences (#3554) via Andy Boedo (@aboedo)
4.31.9
RevenueCatUI
PaywallViewController: addPaywallFontProviderparameter (#3567) via NachoSoto (@NachoSoto)
Other Changes
Integration Tests: run on iOS 17 (#3107) via NachoSoto (@NachoSoto)CI: update to Xcode 15.2 (#3571) via NachoSoto (@NachoSoto)PaywallViewControllerDelegate: fixed typo in@objcmethod name (#3569) via NachoSoto (@NachoSoto)SandboxEnvironmentDetector: more tests formacOS(#3568) via NachoSoto (@NachoSoto)
4.31.8
RevenueCatUI
Paywalls: remove unscrollable spacing in Template 5 (#3562) via NachoSoto (@NachoSoto)Paywalls: improve template 5 checkmark icon (#3559) via NachoSoto (@NachoSoto)
Bugfixes
- Improve sandbox detector for macOS apps (#3549) via Mark Villacampa (@MarkVillacampa)
Other Changes
Paywalls: newPaywallViewControllerDelegate.paywallViewController(_:didChangeSizeTo:)(#3563) via Cesar de la Vega (@vegaro)Tests: running tests onmacOS(#3533) via NachoSoto (@NachoSoto)Integration Tests: split into separate jobs (#3560) via NachoSoto (@NachoSoto)
4.31.7
RevenueCatUI
- Paywalls: improve footer view UIKit support for hybrid SDKs (#3547) via Andy Boedo (@aboedo)
Dependency Updates
- Bump fastlane from 2.218.0 to 2.219.0 (#3553) via dependabot[bot] (@dependabot[bot])
- Bump fastlane from 2.217.0 to 2.218.0 (#3550) via dependabot[bot] (@dependabot[bot])
Other Changes
- Tests: improve test flakiness (#3552) via Andy Boedo (@aboedo)
4.31.6
RevenueCatUI
Paywalls: add header image towatchOSpaywalls (#3542) via NachoSoto (@NachoSoto)Paywalls: improve template 5 landscape layout (#3534) via NachoSoto (@NachoSoto)Paywalls: fix template 5 footer loading view alignment (#3537) via NachoSoto (@NachoSoto)Paywalls: improve template 1 landscape layout (#3532) via NachoSoto (@NachoSoto)Paywalls: fixColorInformation.multiSchemeonwatchOS(#3530) via NachoSoto (@NachoSoto)
Other Changes
Trusted Entitlements: tests for signature verification without header hash (#3505) via NachoSoto (@NachoSoto).debugRevenueCatOverlay: addedLocale(#3539) via NachoSoto (@NachoSoto)Trusted Entitlements: add support for signing request headers (#3424) via NachoSoto (@NachoSoto)CI: Add architecture to cache keys (#3538) via Mark Villacampa (@MarkVillacampa)Paywalls Tester: remove double close button (#3531) via NachoSoto (@NachoSoto)- Fix
RevenueCatUIsnapshot tests (#3526) via NachoSoto (@NachoSoto)
4.31.5
RevenueCatUI
Paywalls: addPaywallFooterViewController(#3486) via Toni Rico (@tonidero)Paywalls: improve landscape support of all templates (#3471) via NachoSoto (@NachoSoto)Paywalls: ensure footer links open in full-screen sheets (#3524) via NachoSoto (@NachoSoto)Paywalls: improveFooterViewtext alignment (#3525) via NachoSoto (@NachoSoto)- Paywalls: Add dismissal method in
PaywallViewControllerDelegate(#3493) via Toni Rico (@tonidero)
4.31.4
RevenueCatUI
Paywalls: silence logs belowPurchases.logLevel(#3520) via NachoSoto (@NachoSoto)Paywalls: always dismiss paywalls automatically after a purchase (#3517) via NachoSoto (@NachoSoto)
Dependency Updates
- Bump danger from 9.4.1 to 9.4.2 (#3519) via dependabot[bot] (@dependabot[bot])
Other Changes
Tests: fix iOS 12 snapshot (#3521) via NachoSoto (@NachoSoto)- [SK2] Add support for StoreKit Config files in SK2 (#3365) via Mark Villacampa (@MarkVillacampa)
4.31.3
RevenueCatUI
Paywalls: improve image caching (#3498) via NachoSoto (@NachoSoto)Paywalls: change style of CTA button to be consistent with other platforms (#3507) via NachoSoto (@NachoSoto)Paywalls: open footer links on Safari on Catalyst (#3508) via NachoSoto (@NachoSoto)Paywalls: fix compilation on Xcode < 14.3 (#3513) via NachoSoto (@NachoSoto)- Fix typo in zh-Hans localization of RevenueCatUI (#3512) via Francis Feng (@francisfeng)
Paywalls: fix PaywallViewControllerDelegate access from Objective-C (#3510) via noncenz (@noncenz)Paywalls: open Terms and Privacy Policy links in-app (#3475) via Andy Boedo (@aboedo)Paywalls: fix empty description when usingcustompackage type and{{ sub_period }}(#3495) via Andy Boedo (@aboedo)Paywalls: useHEICimages (#3496) via NachoSoto (@NachoSoto)- Paywalls: disable the close button when an action is in progress (#3474) via Andy Boedo (@aboedo)
Paywalls: adjusted German translations (#3476) via Tensei (@tensei)- Paywalls: Improve Chinese localization (#3489) via Andy Boedo (@aboedo)
Other Changes
CircleCI: add git credentials to snapshot generation (#3506) via NachoSoto (@NachoSoto)StoreProduct: improvepriceFormatterdocumentation (#3500) via NachoSoto (@NachoSoto)Paywalls: fix tests (#3499) via NachoSoto (@NachoSoto)Optimization: changedfirsttofirst(where:)(#3467) via NachoSoto (@NachoSoto)
4.31.2
Bugfixes
- Improve pricePerYear price calculation precision (#3492) via Toni Rico (@tonidero)
- Improve price per month accuracy for weekly subscriptions (#3480) via Andy Boedo (@aboedo)
Dependency Updates
- Bump danger from 9.4.0 to 9.4.1 (#3485) via dependabot[bot] (@dependabot[bot])
4.31.1
RevenueCatUI
Paywalls: remove empty space when template 4 has no offer details (#3469) via NachoSoto (@NachoSoto)
Other Changes
Concurrency: address strict concurrency issues onSystemInfo(#3462) via NachoSoto (@NachoSoto)CircleCI: upgrade to Xcode 15.1 (#3403) via NachoSoto (@NachoSoto)Paywalls: tests forPurchaseButtonlayout logic (#3468) via NachoSoto (@NachoSoto)Paywalls: simplifiedPaywallViewModelogic (#3470) via NachoSoto (@NachoSoto)
4.31.0
RevenueCatUI
- Paywalls: Fix navigation with close button in UIKit (#3466) via Andy Boedo (@aboedo)
Paywalls:watchOSsupport (#3291) via NachoSoto (@NachoSoto)
Dependency Updates
- Bump cocoapods from 1.14.2 to 1.14.3 (#3464) via dependabot[bot] (@dependabot[bot])
- Bump fastlane from 2.216.0 to 2.217.0 (#3415) via dependabot[bot] (@dependabot[bot])
- Bump danger from 9.3.2 to 9.4.0 (#3414) via dependabot[bot] (@dependabot[bot])
Other Changes
- Some
APITesterfixes (#3444) via NachoSoto (@NachoSoto) HTTPClient: test all request headers (#3425) via NachoSoto (@NachoSoto)CircleCI: fix snapshot generation for iOS 14 (#3431) via NachoSoto (@NachoSoto)- Remove
MockStoreMessagesHelperfrom SDK (#3417) via NachoSoto (@NachoSoto) - Enable explicit_init lint rule and fix issues (#3418) via Mark Villacampa (@MarkVillacampa)
4.30.5
Bugfixes
visionOS: fix support forXcode 15.1 beta 3(#3409) via NachoSoto (@NachoSoto)
Other Changes
SystemInfo: fix flakyStorefronttest (#3411) via NachoSoto (@NachoSoto)- Adds
X-Storefrontrequest header for App Store Storefront (#3405) via Josh Holtz (@joshdholtz) CircleCI: upgrade to Xcode 15.1 (#3408) via NachoSoto (@NachoSoto)Integration Tests: verify thatSKTestSessionpurchases do not grant production entitlements (#3406) via NachoSoto (@NachoSoto)Integration Tests: fix potential crash ontearDown(#3401) via NachoSoto (@NachoSoto)
4.30.4
RevenueCatUI
Paywalls: adddisplayCloseButtontoPaywallViewController(#3391) via NachoSoto (@NachoSoto)Paywalls: fix Turkish translation (#3389) via Dogancan Mavideniz (@mavideniz)Paywalls: fix Turkish translation (#3388) via iremkaraoglu (@iremkaraoglu)
Other Changes
RevenueCatUI: added support to other deployment targets (#3392) via NachoSoto (@NachoSoto)
4.30.3
RevenueCatUI
Paywalls: fix Turkish discount string (#3385) via NachoSoto (@NachoSoto)Paywalls: fix template 4 layout bug on iOS 16 (#3381) via NachoSoto (@NachoSoto)
Dependency Updates
- Bump fastlane-plugin-revenuecat_internal from
a297205to0ddee10(#3383) via dependabot[bot] (@dependabot[bot])
Other Changes
CircleCI: fixvisionOSjob (#3384) via NachoSoto (@NachoSoto)
4.30.2
Performance Improvements
Paywalls: optimizebackground.jpgimage (#3379) via NachoSoto (@NachoSoto)
Other Changes
RevenueCatUI: lowered CocoaPods deployment target to 11.0 (#3378) via NachoSoto (@NachoSoto)- Fix deprecation warning (#3371) via NachoSoto (@NachoSoto)
4.30.1
RevenueCatUI
Paywalls:RevenueCatUICocoaPods support (#3368) via NachoSoto (@NachoSoto)
4.30.0
New Features
Offering: newgetMetadataValuewithDecodabletype (#3373) via NachoSoto (@NachoSoto)- Add
StoreProduct.pricePerWeek(#3354) via NachoSoto (@NachoSoto)
RevenueCatUI
Paywalls:.presentPaywallIfNeededallows overridingOffering(#3370) via NachoSoto (@NachoSoto)Paywalls: new optionaldisplayCloseButtonparameter (#3359) via NachoSoto (@NachoSoto)Paywalls: improve period abbreviations in Japanese (#3367) via NachoSoto (@NachoSoto)Paywalls: new{{ sub_price_per_week }}variable (#3355) via NachoSoto (@NachoSoto)Paywalls: log warning when attempting to purchase already-subscribed product (#3366) via NachoSoto (@NachoSoto)Paywalls: improve Japanese localization (#3364) via NachoSoto (@NachoSoto)Paywalls: fix template 2 top padding inside navigation view (#3363) via NachoSoto (@NachoSoto)Paywalls: avoid animatingPurchaseButtonlabels when text does not change (#3361) via NachoSoto (@NachoSoto)Paywalls: improveFooterViewaccessibility (#3349) via NachoSoto (@NachoSoto)
Dependency Updates
- Bump cocoapods from 1.14.0 to 1.14.2 (#3356) via dependabot[bot] (@dependabot[bot])
- Bump cocoapods from 1.13.0 to 1.14.0 (#3351) via dependabot[bot] (@dependabot[bot])
Other Changes
Paywalls: simplifyPurchaseButton(#3362) via NachoSoto (@NachoSoto)Paywalls: refactoredIntroEligibilityStateView(#3360) via NachoSoto (@NachoSoto)Paywall Tester: improve template 5 dark colors (#3358) via NachoSoto (@NachoSoto)Paywalls: improve conversion fromColor/UIColortoPaywallColor(#3357) via NachoSoto (@NachoSoto)Paywalls Tester: improve.paywallFooterpresentation (#3348) via NachoSoto (@NachoSoto)Paywalls: move size configuration toTemplateViewType(#3352) via NachoSoto (@NachoSoto)
4.29.0
New Features
PaywallColor: change visibility ofColor.init(light:dark:)toprivate(#3345) via NachoSoto (@NachoSoto)
RevenueCatUI
Paywalls: new.onPurchaseCompletedoverload withStoreTransaction(#3323) via NachoSoto (@NachoSoto)Paywalls: finished template 5 (#3340) via NachoSoto (@NachoSoto)Paywalls: newonDismissparameter forpresentPaywallIfNeeded(#3342) via NachoSoto (@NachoSoto)Paywalls: disable shimmering on footer loading view (#3324) via NachoSoto (@NachoSoto)
Bugfixes
ErrorUtils.purchasesError(withSKError:): handleURLErrors (#3346) via NachoSoto (@NachoSoto)
Other Changes
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: fixmacOSbuild (#3341) via NachoSoto (@NachoSoto)ProductFetcherSK1: enableTimingUtillog (#3327) via NachoSoto (@NachoSoto)Paywall Tester: fixed paywall presentation (#3339) via NachoSoto (@NachoSoto)CI: replace Carthage build jobs withxcodebuild(#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 inXcode Cloud(#2857) via NachoSoto (@NachoSoto)StoreKit 1: disabledfinishTransactionslog on observer mode (#3314) via NachoSoto (@NachoSoto)
4.28.1
Bugfixes
PaywallEventStore: also remove legacyrevenuecatdocuments directory (#3317) via NachoSoto (@NachoSoto)
Other Changes
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 forfinishTransactionsinvoked outside the SDK (#3300) via NachoSoto (@NachoSoto)Debug View: display receipt status (#3303) via NachoSoto (@NachoSoto)
4.28.0
New Features
Purchases: newcachedCustomerInfoandcachedOfferings(#3274) via NachoSoto (@NachoSoto)- Expose
productPlanIdentifierinEntitlementInfo(#3290) via Toni Rico (@tonidero)
RevenueCatUI
Paywalls: localize default template (#3295) via NachoSoto (@NachoSoto)Paywalls: createdConsistentPackageContentViewto improve package change transitions (#3246) via NachoSoto (@NachoSoto)Paywalls:visionOSsupport (#3293) via NachoSoto (@NachoSoto)Paywalls: avoid flickering when displaying paywalls with available cache (#3283) via NachoSoto (@NachoSoto)
Bugfixes
PaywallEventStore: changed container to useURL.applicationSupportDirectory(#3289) via NachoSoto (@NachoSoto)
Other Changes
CI: changevisionOSbuild to environment withxrOSSDK (#3294) via NachoSoto (@NachoSoto)Paywalls: extracted commonTemplateViewTypemethod for previews (#3292) via NachoSoto (@NachoSoto)Tests: improved flaky test (#3282) via NachoSoto (@NachoSoto)
4.27.2
RevenueCatUI
Paywalls: improved purchase-in-progress UI (#3279) via NachoSoto (@NachoSoto)
Bugfixes
SK2StoreProduct.priceFormatter: use locale fromStoreKit.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
RevenueCatUI
Paywalls: added shimmer effect toLoadingPaywallView(#3267) via NachoSoto (@NachoSoto)
Bugfixes
Paywalls: fixedmacOScompilation (#3272) via NachoSoto (@NachoSoto)
Other Changes
- Update
SwiftLint(#3273) via NachoSoto (@NachoSoto) - PaywallsTester: allow for configuration for demos (#3260) via Andy Boedo (@aboedo)
Paywalls: simplifiedLoadingPaywallView(#3265) via NachoSoto (@NachoSoto)
4.27.0
New Features
- Add
Attribution.setOnesignalUserID(#3268) via Raquel Diez (@Raquel10-RevenueCat) - StoreKit In App messages support (#3252) via Toni Rico (@tonidero)
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
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: polishedPurchaseButtonon 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 forIntroEligibilityStateView(#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: changedNSPrivacyCollectedDataTypePurchaseHistorytofalse(#3242) via NachoSoto (@NachoSoto)Paywalls: changedPaywallsTesterto allow not configuring API key (#3244) via NachoSoto (@NachoSoto)Paywalls: renamedSimpleApptoPaywallsTester(#3243) via NachoSoto (@NachoSoto)- Make revisionID private in PaywallData+Default (#3239) via Cesar de la Vega (@vegaro)
4.26.1
RevenueCatUI
Paywalls: don't display progress view inLoadingPaywallView(#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: improvedfooterViewto use.continuousrounded 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: refactoredfetchTransactions(#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 forPurchases.customerInfoStream(#3213) via NachoSoto (@NachoSoto)
4.26.0
New Features
✨ Introducing RevenueCatUI 📱
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
Offeringyou intend to serve to your customers - Add the
RevenueCatUISPM dependency to your project import RevenueCatUIat 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: `Paywalls`: added ability to calculate and localize subscription discounts (#2943) * NachoSoto: `Offering`: improved description (#2912) * NachoSoto: `Paywalls`: fixed `FooterView` color in template 1 (#2951) * NachoSoto: `Paywalls`: fixed `View.scrollableIfNecessary` (#2947) * NachoSoto: `Paywalls`: improved `IntroEligibilityStateView` to avoid layout changes (#2946) * NachoSoto: `Paywalls`: updated offerings snapshot with new asset base URL (#2950) * NachoSoto: `Paywalls`: extracted `TemplateBackgroundImageView` (#2945) * NachoSoto: `Paywalls`: more polish from design feedback (#2932) * NachoSoto: `Paywalls`: more unit tests for purchasing state (#2931) * NachoSoto: `Paywalls`: new `.onPurchaseCompleted` modifier (#2930) * NachoSoto: `Paywalls`: fixed `LoadingPaywallView` displaying a progress view (#2929) * NachoSoto: `Paywalls`: added default template to `SamplePaywallsList` (#2928) * NachoSoto: `Paywalls`: added a few more logs (#2927) * NachoSoto: `Paywalls` added individual previews for templates (#2924) * NachoSoto: `Paywalls`: improved default paywall configuration (#2926) * NachoSoto: `Paywalls`: moved purchasing state to `PurchaseHandler` (#2923) * NachoSoto: `Paywalls`: updated Integration Test snapshot (#2921) * NachoSoto: `Paywalls`: pre-warm intro eligibility in background thread (#2925) * NachoSoto: `Paywalls`: removed "couldn't find package" log (#2922) * NachoSoto: `Paywalls`: SimpleApp reads API key from Xcode Cloud environment (#2919) * NachoSoto: `Paywalls`: improved template accessibility support (#2920) * NachoSoto: `Paywalls`: work around SwiftUI bug to allow embedding `PaywallView` inside `NavigationStack` (#2918) * NachoSoto: `Paywalls`: some basic polish from design feedback (#2917) * NachoSoto: `Paywalls`: added `OfferingsList` to preview all paywalls (#2916) * NachoSoto: `Paywalls`: fixed tappable area for a couple of buttons (#2915) * NachoSoto: `Paywalls`: new `text1` and `text2` colors (#2903) * NachoSoto: `Paywalls`: updated multi-package bold template design (#2908) * NachoSoto: `Paywalls`: added sample paywalls to `SimpleApp` (#2907) * NachoSoto: `Paywalls`: one package with features template (#2902) * NachoSoto: `Paywalls`: initial support for icons (#2882) * NachoSoto: `Paywalls`: extracted intro eligibility out of templates (#2901) * NachoSoto: `Paywalls`: changed `subtitle` to be optional (#2900) * NachoSoto: `Paywalls`: added "features" to `LocalizedConfiguration` (#2899) * NachoSoto: `Paywalls`: fixed `{{ total_price_and_per_month }}` (#2881) * NachoSoto: `Paywalls`: updated template names (#2878) * NachoSoto: `Paywalls`: added accent colors (#2883) * NachoSoto: `Paywalls`: changed images representation to an object (#2875) * NachoSoto: `Paywalls`: added `offerName` parameter (#2877) * NachoSoto: `Paywalls`: new `{{ period }}` variable (#2876) * NachoSoto: `Paywalls`: disabled `PaywallViewMode`s for now (#2874) * NachoSoto: `Paywalls`: added new `defaultPackage` configuration (#2871) * NachoSoto: `Paywalls`: fixed tests on CI (#2872) * NachoSoto: `Paywalls`: pre-fetch intro eligibility for paywalls (#2860) * Andy Boedo: `Paywalls`: clean up the error view (#2873) * NachoSoto: `Paywalls`: new API for easily displaying `PaywallView` with just one line (#2869) * NachoSoto: `Paywalls`: handle missing paywalls gracefully (#2855) * NachoSoto: `Paywalls`: temporarily disable non-fullscreen `PaywallView`s (#2868) * NachoSoto: `Paywalls`: added test to ensure package selection maintains order (#2853) * NachoSoto: `Paywalls`: added new `blurredBackgroundImage` configuration (#2852) * NachoSoto: `Paywalls`: fuzzy `Locale` lookups (#2847) * NachoSoto: `Paywalls`: basic localization support (#2851) * NachoSoto: `Paywalls`: added `FooterView` (#2850) * NachoSoto: `Paywalls`: multi-package template (#2840) * NachoSoto: `Paywalls`: disable animations during unit tests (#2848) * NachoSoto: `Paywalls`: `TrialOrIntroEligibilityChecker.eligibility(for packages:)` (#2846) * NachoSoto: `Paywalls`: added new `total_price_and_per_month` variable (#2845) * NachoSoto: `Paywalls`: extracted `PurchaseButton` (#2839) * NachoSoto: `Paywalls`: extracted `IntroEligibilityStateView` (#2837) * NachoSoto: `Paywalls`: support for multiple `PaywallViewMode`s (#2834) * NachoSoto: `Paywalls`: add support for multiple images in template configuration (#2832) * NachoSoto: `Paywalls`: extracted configuration processing into a new `TemplateViewConfiguration` (#2830) * NachoSoto: `Paywalls`: improved support for dynamic type with snapshots (#2827) * NachoSoto: `Paywalls`: disable `macOS`/`macCatalyst`/`watchOS` for now (#2821) * NachoSoto: `Paywalls`: using new color information in template (#2823) * NachoSoto: `Paywalls`: set up CI tests and API Tester (#2816) * NachoSoto: `Paywalls`: added support for decoding colors (#2822) * NachoSoto: `Paywalls`: ignore empty strings in `LocalizedConfiguration` (#2818) * NachoSoto: `Paywalls`: updated `PaywallData` field names (#2817) * NachoSoto: `Paywalls`: added support for purchasing (#2812) * NachoSoto: `Paywalls`: added tests for `PackageType` filtering (#2810) * Andy Boedo: `Paywalls`: changed variable handling to use Swift `Regex` (#2811) * NachoSoto: `Paywalls`: added `price` variable (#2809) * NachoSoto: `Paywalls`: determine intro eligibility (#2808) * NachoSoto: `Paywalls`: added header image to configuration (#2800) * NachoSoto: `Paywalls`: added `packages` to configuration (#2798) * NachoSoto: `Paywalls`: add support for displaying `StoreProductDiscount`s (#2796) * NachoSoto: `Paywalls`: added support for variables (#2793) * NachoSoto: `Paywalls`: using `PaywallData` and setting up basic template loading (#2781) * NachoSoto: `Paywalls`: initial configuration types (#2780) * NachoSoto: `Paywalls`: initial `RevenueCatUI` target setup (#2776)Other Changes
Debug: addOfferingmetadata to debug screen (#3137) via NachoSoto (@NachoSoto)TestStoreProduct: newlocaleparameter (#3134) via NachoSoto (@NachoSoto)Integration Tests: fixed more flaky failures (#3218) via NachoSoto (@NachoSoto)
4.25.10
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: removedpurchases-iosSPM 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 lastSwift 5.7checks (#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 useXcode 14.xand replacexcode-installwithxcodes(#2421) via NachoSoto (@NachoSoto)
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 forCarthagetiming out (#3119) via NachoSoto (@NachoSoto)Integration Tests: workaround to not lose debug logs (#3108) via NachoSoto (@NachoSoto)
4.25.8
Dependency Updates
- Bump fastlane-plugin-revenuecat_internal from
b2108fbtoa297205(#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: enablerestorePurchasesin public API (#3090) via NachoSoto (@NachoSoto)CustomerInfo: addVerificationResulttodescription(#3081) via NachoSoto (@NachoSoto)Integration Tests: fixed race condition in flaky test (#3086) via NachoSoto (@NachoSoto)
4.25.7
Other Changes
Integration Tests: test thatcheckTrialOrIntroDiscountEligibilitymakes 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: addedvisionOSto 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
Bugfixes
Xcode 15: fixed release build (#3034) via NachoSoto (@NachoSoto)
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.updateswhen 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.willEnterForegroundNotificationto simulate a real app (#3015) via NachoSoto (@NachoSoto)Integration Tests: add tests to verifyCustomerInfo+Offeringsrequest de-dupping (#3013) via NachoSoto (@NachoSoto)SwiftLint: disableunneeded_synthesized_initializer(#3010) via NachoSoto (@NachoSoto)- Added
internalNonSubscriptionTransaction.storeTransactionIdentifier(#3009) via NachoSoto (@NachoSoto) Integration Tests: added tests for non-renewing and non-consumable packages (#3008) via NachoSoto (@NachoSoto)- Expanded
EnsureNonEmptyArrayDecodabletoEnsureNonEmptyCollectionDecodable(#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-visionOSbuild by replacing.customplatform (#3005) via NachoSoto (@NachoSoto)
Other Changes
Integration Tests: test forSignatureVerificationMode.informationaland receipt posting when fetchingCustomerInfo(#3000) via NachoSoto (@NachoSoto)Custom Entitlement Computation: fixedvisionOSbuild (#2999) via NachoSoto (@NachoSoto)HTTPClient: extractedHTTPRequestPathprotocol (#2986) via NachoSoto (@NachoSoto)CI: addvisionOSbuild (#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: changedproductTypewarning to debug (#2957) via NachoSoto (@NachoSoto)PrivacyInfo.xcprivacy: addedUserDefaultsto 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)
4.25.2
This release is compatible with Xcode 15 beta 5 and visionOS beta 2
Bugfixes
xrOS: fixedSubscriptionStoreViewfor visionOS beta 2 (#2884) via Josh Holtz (@joshdholtz)
Performance Improvements
Perf: updateCustomerInfocache before anything else (#2865) via NachoSoto (@NachoSoto)
Other Changes
SimpleApp: added support for localization (#2880) via NachoSoto (@NachoSoto)TestStoreProduct: made available on release builds (#2861) via NachoSoto (@NachoSoto)Tests: increased default logger capacity (#2870) via NachoSoto (@NachoSoto)CustomEntitlementComputation: removedinvalidateCustomerInfoCache(#2866) via NachoSoto (@NachoSoto)SimpleApp: updates for TestFlight compatibility (#2862) via NachoSoto (@NachoSoto)BasePurchasesTests: consolidate to only initialize oneDeviceCache(#2863) via NachoSoto (@NachoSoto)Codable: debug log entire JSON when decoding fails (#2864) via NachoSoto (@NachoSoto)IntegrationTests: replacedPurchases.sharedwith athrowing property (#2867) via NachoSoto (@NachoSoto)NetworkError: 2 new tests to ensure underlying error is included in description (#2843) via NachoSoto (@NachoSoto)- Add SPM
Package.resolvedfor Xcode Cloud (#2844) via NachoSoto (@NachoSoto) CustomEntitlementComputation: added integration test for cancellations (#2849) via NachoSoto (@NachoSoto)CustomEntitlementComputation: removedsyncPurchases/restorePurchases(#2854) via NachoSoto (@NachoSoto)
4.25.1
Dependency Updates
- Bump fastlane from 2.213.0 to 2.214.0 (#2824) via dependabot[bot] (@dependabot[bot])
Other Changes
MainThreadMonitor: don't crash if there is no test in progress (#2838) via NachoSoto (@NachoSoto)CI: fixed Fastlane APITester lanes (#2836) via NachoSoto (@NachoSoto)Integration Tests: workaround Swift runtime crash (#2826) via NachoSoto (@NachoSoto)@EnsureNonEmptyArrayDecodable(#2831) via NachoSoto (@NachoSoto)iOS 17: added tests for simulating cancellations (#2597) via NachoSoto (@NachoSoto)CI: make allCodecovjobsinformational(#2828) via NachoSoto (@NachoSoto)MainThreadMonitor: check deadlocks only ever N seconds (#2820) via NachoSoto (@NachoSoto)- New
@NonEmptyStringDecodable(#2819) via NachoSoto (@NachoSoto) MockDeviceCache: avoid using realUserDefaults(#2814) via NachoSoto (@NachoSoto)throwAssertion: fixed Xcode 15 compilation (#2813) via NachoSoto (@NachoSoto)CustomEntitlementsComputation: fixed API testers (#2815) via NachoSoto (@NachoSoto)PackageTypeTests: fixed iOS 12 (#2807) via NachoSoto (@NachoSoto)Tests: avoid race-condition in leak detection (#2806) via NachoSoto (@NachoSoto)- Revert "
Unit Tests: removed leak detection" (#2805) via NachoSoto (@NachoSoto) PackageType: Codableimplementation (#2797) via NachoSoto (@NachoSoto)SystemInfo.initno longerthrows(#2803) via NachoSoto (@NachoSoto)Trusted Entitlements: add support for signingPOSTbody (#2753) via NachoSoto (@NachoSoto)Tests: unified default timeouts (#2801) via NachoSoto (@NachoSoto)Tests: removed forced-unwrap (#2799) via NachoSoto (@NachoSoto)Tests: added missingsuper.setUp()(#2804) via NachoSoto (@NachoSoto)- Replaced
FatalErrorUtilwithNimble(#2802) via NachoSoto (@NachoSoto) Tests: fixed another flaky test (#2795) via NachoSoto (@NachoSoto)TimingUtil: improved tests by usingClock(#2794) via NachoSoto (@NachoSoto)IgnoreDecodeErrors: log decoding error (#2778) via NachoSoto (@NachoSoto)TestLogHandler: changed all tests to explicitly deinitialize it (#2784) via NachoSoto (@NachoSoto)LocalReceiptParserStoreKitTests: fixed flaky test failure (#2785) via NachoSoto (@NachoSoto)Unit Tests: removed leak detection (#2792) via NachoSoto (@NachoSoto)Tests: fixed another flaky failure with asynchronous check (#2786) via NachoSoto (@NachoSoto)
4.25.0
New Features
Trusted Entitlements: (#2621) via NachoSoto (@NachoSoto)
This new feature prevents MitM attacks between the SDK and the RevenueCat server.
With verification enabled, the SDK ensures that the response created by the server was not modified by a third-party, and the entitlements received are exactly what was sent.
This is 100% opt-in. EntitlementInfos have a new VerificationResult property, which will indicate the validity of the responses when this feature is enabled.
let purchases = Purchases.configure(
with: Configuration
.builder(withAPIKey: "")
.with(entitlementVerificationMode: .informational)
)
let customerInfo = try await purchases.customerInfo()
if !customerInfo.entitlements.verification.isVerified {
print("Entitlements could not be verified")
}
You can learn more from the documentation.
Other Changes
TrustedEntitlements: newVerificationResult.isVerified(#2788) via NachoSoto (@NachoSoto)Refactor: extractedCollection.subscript(safe:)(#2779) via NachoSoto (@NachoSoto)Trusted Entitlements: added link to docs inErrorCode.signatureVerificationFailed(#2783) via NachoSoto (@NachoSoto)Trusted Entitlements: improved documentation (#2782) via NachoSoto (@NachoSoto)Tests: fixed flaky failure with asynchronous check (#2777) via NachoSoto (@NachoSoto)Integration Tests: re-enable signature verification tests (#2744) via NachoSoto (@NachoSoto)CI: removeJazzy(#2775) via NachoSoto (@NachoSoto)Signing: injectClockTypeto ensure hardcoded signatures don't fail when intermediate key expires (#2771) via NachoSoto (@NachoSoto)
4.24.1
Bugfixes
PurchasesDiagnostics: don't test signature verification if it's disabled (#2757) via NachoSoto (@NachoSoto)
Other Changes
AnyEncodable: also implementDecodable(#2769) via NachoSoto (@NachoSoto)Trusted Entitlements: log signature errors on requests with.informationalmode (#2751) via NachoSoto (@NachoSoto)Tests: optimized several tests (#2754) via NachoSoto (@NachoSoto)SimpleApp: allow HTTP traffic (#2763) via NachoSoto (@NachoSoto)Trusted Entitlements: added support for unauthenticated endpoints (#2761) via NachoSoto (@NachoSoto)Integration Tests:TestLogHandlerno longer crashes tests (#2760) via NachoSoto (@NachoSoto)SimpleApp: changed bundle identifier (#2759) via NachoSoto (@NachoSoto)Testing: add newSimpleApp(#2756) via NachoSoto (@NachoSoto)Trusted Entitlements: update handling of escaped URLs (#2758) via NachoSoto (@NachoSoto)Trusted Entitlements: produce verification failures for static endpoints with no signature (#2752) via NachoSoto (@NachoSoto)Trusted Entitlements: added tests to verify offerings and product entitlement mapping (#2667) via NachoSoto (@NachoSoto)Integration Tests: refactored expiration detection (#2700) via NachoSoto (@NachoSoto)Trusted Entitlements: add API key andHTTPRequest.Pathto signature (#2746) via NachoSoto (@NachoSoto)HTTPRequest.Path: escapeappUserID(#2747) via NachoSoto (@NachoSoto)Documentation: add reference toTestStoreProduct(#2743) via NachoSoto (@NachoSoto)PostReceiptDataOperation: add newtestReceiptIdentifierparameter (#2749) via NachoSoto (@NachoSoto)Integration Tests: updated load-shedder offerings snapshot (#2748) via NachoSoto (@NachoSoto)Signing: extract and verify intermediate key (#2715) via NachoSoto (@NachoSoto)Trusted Entitlements: update handling of 304 responses (#2698) via NachoSoto (@NachoSoto)Trusted Entitlements: new Signature format (#2679) via NachoSoto (@NachoSoto)Integration Tests: avoid crashes when stopping tests early (#2741) via NachoSoto (@NachoSoto)
4.24.0
New Features
- New
TestStoreProductfor creating mockStoreProducts andOfferings (#2711) via NachoSoto (@NachoSoto)
Dependency Updates
- Bump fastlane-plugin-revenuecat_internal from
13773d2tob2108fb(#2706) via dependabot[bot] (@dependabot[bot])
Other Changes
VerificationResult: CustomDebugStringConvertible(#2739) via NachoSoto (@NachoSoto)- Refactor: simplified
PurchasesOrchestrator.syncPurchases(#2731) via NachoSoto (@NachoSoto) Trusted Entitlements: add integration tests to verifyCustomerInfocache invalidation (#2730) via NachoSoto (@NachoSoto)SystemInfo.identifierForVendor: add tests (#2732) via NachoSoto (@NachoSoto)Tests: disablediOS 11.xtests to fixXcode 15tests (#2720) via NachoSoto (@NachoSoto)DebugViewSwiftUITests: create separate snapshots for each OS version (#2721) via NachoSoto (@NachoSoto)Integration Tests: fix clearingUserDefaultsbefore each test (#2719) via NachoSoto (@NachoSoto)- Remove unused
Signing.loadPublicKey(with:)(#2714) via NachoSoto (@NachoSoto) - Add
UInt32(littleEndian32Bits:)andUInt32.littleEndianData(#2713) via NachoSoto (@NachoSoto) TimingUtil: added synchronous API (#2716) via NachoSoto (@NachoSoto)XCFramework: sign archive forXcode 15(#2709) via NachoSoto (@NachoSoto)CI: removedcarthage_archivefromreleaselane (#2710) via NachoSoto (@NachoSoto)PriceFormatterProvider.priceFormatterForSK2: enable on all versions (#2712) via NachoSoto (@NachoSoto)xrOS: add support fordebugRevenueCatOverlay(#2702) via NachoSoto (@NachoSoto)- Refactor method to get product ID including plan ID in android purchases (#2708) via Toni Rico (@tonidero)
Purchases.restoreLogHandler(#2699) via NachoSoto (@NachoSoto)- Remove alpha from purchase tester icon to upload to testflight (#2705) via Toni Rico (@tonidero)
4.23.1
Bugfixes
- Fix google play purchases missing purchase date (#2703) via Toni Rico (@tonidero)
Other Changes
PurchaseTester: fixedwatchOSbuild and ASC deployment (#2701) via NachoSoto (@NachoSoto)- Add
Data.sha1(#2696) via NachoSoto (@NachoSoto) - Refactor: extract
ErrorResponseinto its own file (#2697) via NachoSoto (@NachoSoto) - Add
Sequence<AdditiveArithmetic>.sum()(#2694) via NachoSoto (@NachoSoto) - Refactored
Data.asStringimplementation (#2695) via NachoSoto (@NachoSoto) Diagnostics: newFileHandlerfor abstracting file operations (#2673) via NachoSoto (@NachoSoto)
4.23.0
New Features
xrOS: added to list of supported platforms (#2682) via NachoSoto (@NachoSoto)
Bugfixes
xrOS: fixed compilation by disabling debug overlay (#2681) via NachoSoto (@NachoSoto)xrOS: added support for newpurchase(confirmIn:options:)method (#2683) via NachoSoto (@NachoSoto)Xcode 15: handleLocale.currencyCodedeprecation (#2680) via NachoSoto (@NachoSoto)
Other Changes
PurchaseTester: fixed release compilation (#2689) via NachoSoto (@NachoSoto)xrOS: fixed runtime warning (#2691) via NachoSoto (@NachoSoto)xrOS: added support toPurchaseTester(#2685) via NachoSoto (@NachoSoto)Signature Verification: newIntegration Tests(#2642) via NachoSoto (@NachoSoto)ErrorUtils: handlePurchasesErrorto avoid creating unknown errors (#2686) via NachoSoto (@NachoSoto)
4.22.1
Bugfixes
PurchasesOrchestrator: updateCustomerInfoManagercache after processing transactions (#2676) via NachoSoto (@NachoSoto)ErrorResponse: drastically improved error messages, no more "unknown error"s (#2660) via NachoSoto (@NachoSoto)PaywallExtensions: post purchases withOfferingidentifier (#2645) via NachoSoto (@NachoSoto)- Support
product_plan_identifierfor purchased subscriptions fromGoogle Play(#2654) via Josh Holtz (@joshdholtz)
Performance Improvements
copy(with: VerificationResult): optimization to avoid copies (#2639) via NachoSoto (@NachoSoto)
Other Changes
ETagManager: refactored e-tag creation and tests (#2671) via NachoSoto (@NachoSoto)getPromotionalOffer: returnErrorCode.ineligibleErrorif receipt is not found (#2678) via NachoSoto (@NachoSoto)TimingUtil: removed slow purchase logs (#2677) via NachoSoto (@NachoSoto)CI: changedCodecovtoinformational(#2670) via NachoSoto (@NachoSoto)LoadShedderIntegrationTests: verify requests are actually handled by load shedder (#2663) via NachoSoto (@NachoSoto)ETagManager.httpResultFromCacheOrBackend: return response headers (#2666) via NachoSoto (@NachoSoto)Integration Tests: added tests to verify 304 behavior (#2659) via NachoSoto (@NachoSoto)HTTPClient: disableURLSessioncache (#2668) via NachoSoto (@NachoSoto)- Documented
HTTPStatusCode.isSuccessfullySynced(#2661) via NachoSoto (@NachoSoto) NetworkError.signatureVerificationFailed: added status code to erroruserInfo(#2657) via NachoSoto (@NachoSoto)HTTPClient: improved log for failed requests (#2669) via NachoSoto (@NachoSoto)ETagManager: added new verbose logs (#2656) via NachoSoto (@NachoSoto)Signature Verification: added test-only log for debugging invalid signatures (#2658) via NachoSoto (@NachoSoto)- Fixed
HTTPResponse.description(#2664) via NachoSoto (@NachoSoto) - Changed
Loggerto useos_log(#2608) via NachoSoto (@NachoSoto) MainThreadMonitor: increased threshold (#2662) via NachoSoto (@NachoSoto)debugRevenueCatOverlay: displayreceiptURL(#2652) via NachoSoto (@NachoSoto)PurchaseTester: added ability to displaydebugRevenueCatOverlay(#2653) via NachoSoto (@NachoSoto)debugRevenueCatOverlay: ability to close onmacOS/Catalyst(#2649) via NachoSoto (@NachoSoto)debugRevenueCatOverlay: added support formacOS(#2648) via NachoSoto (@NachoSoto)LoadShedderIntegrationTests: enable signature verification (#2655) via NachoSoto (@NachoSoto)ImageSnapshot: fixed Xcode 15 compilation (#2651) via NachoSoto (@NachoSoto)OfferingsManager: don't clear offerings cache timestamp when request fails (#2359) via NachoSoto (@NachoSoto)StoreKitObserverModeIntegrationTests: added test for posting renewals (#2590) via NachoSoto (@NachoSoto)- Always initialize
StoreKit2TransactionListenereven on SK1 mode (#2612) via NachoSoto (@NachoSoto) ErrorUtils.missingReceiptFileError: added receipt URLuserInfocontext (#2650) via NachoSoto (@NachoSoto)- Added
.xcprivacyfor Xcode 15 (#2619) via NachoSoto (@NachoSoto) Trusted Entitlements: added debug log withResponseVerificationMode(#2647) via NachoSoto (@NachoSoto)debugRevenueCatOverlay: simplified title (#2641) via NachoSoto (@NachoSoto)- Simplified
Purchases.updateAllCachesIfNeeded(#2626) via NachoSoto (@NachoSoto) HTTPResponseTests: fixed disabled test (#2643) via NachoSoto (@NachoSoto)- Add
InternalDangerousSettings.forceSignatureFailures(#2635) via NachoSoto (@NachoSoto) IntegrationTests: explicitStoreKit 1mode (#2636) via NachoSoto (@NachoSoto)Signing: removed API for loading key from a file (#2638) via NachoSoto (@NachoSoto)
4.22.0
New Features
- New
DebugViewController: UIKit counterpart for SwiftUI'sdebugRevenueCatOverlay(#2631) via NachoSoto (@NachoSoto) - Created
PaywallExtensions:StoreViewandSubscriptionStoreViewoverloads forOffering(#2593) via NachoSoto (@NachoSoto) - Introduced
debugRevenueCatOverlay(): new SwiftUI debug overlay (#2567) via NachoSoto (@NachoSoto)
Bugfixes
- Removed
preventPurchasePopupCallFromTriggeringCacheRefresh, update caches onwillEnterForeground(#2623) via NachoSoto (@NachoSoto) - Fixed
Catalystbuild withXcode 15 beta 1(#2586) via NachoSoto (@NachoSoto)
Dependency Updates
- Bump danger from 9.3.0 to 9.3.1 (#2592) via dependabot[bot] (@dependabot[bot])
Other Changes
StoreTransaction: added newStorefrontto API testers (#2634) via NachoSoto (@NachoSoto)DebugView: added snapshot tests (#2630) via NachoSoto (@NachoSoto)verifyNoUnfinishedTransactions/verifyUnfinishedTransaction: added missing#fileparameter (#2625) via NachoSoto (@NachoSoto)PostReceiptDataOperation: clean up cache key (#2628) via NachoSoto (@NachoSoto)PurchasesOrchestrator: also getStorefrontfrom SK1 (#2629) via NachoSoto (@NachoSoto)CI: disable iOS 17 for now (#2627) via NachoSoto (@NachoSoto)Tests: fixed crash on iOS 13 (#2624) via NachoSoto (@NachoSoto)StoreTransaction: readStorefrontfromStoreKit.Transaction(#2611) via NachoSoto (@NachoSoto)StoreKitConfigTestCase/BaseStoreKitIntegrationTests: also clear transactions after every test (#2616) via NachoSoto (@NachoSoto)ErrorCode.networkError: improved description (#2610) via NachoSoto (@NachoSoto)PurchaseTester: make CI job always point to current version (#2622) via NachoSoto (@NachoSoto)- Improved
finishAllUnfinishedTransactions(#2615) via NachoSoto (@NachoSoto) StoreKitConfigTestCase: improvedwaitForStoreKitTestIfNeeded(#2614) via NachoSoto (@NachoSoto)StoreKitConfigTestCase: setcontinueAfterFailuretofalse(#2617) via NachoSoto (@NachoSoto)PaywallExtensions: fixed compilation (#2613) via NachoSoto (@NachoSoto)CI: addediOS 17job (#2591) via NachoSoto (@NachoSoto)Encodable.jsonEncodedData: fixed tests on iOS 17 due to inconsistent key ordering (#2607) via NachoSoto (@NachoSoto)debugRevenueCatOverlay: added ability to display newSubscriptionStoreView(#2595) via NachoSoto (@NachoSoto)- Refactor: extracted all log strings (#2600) via NachoSoto (@NachoSoto)
- Changed tests to work around
URLdecoding differences iniOS 17(#2605) via NachoSoto (@NachoSoto) - Removed unnecessary
Strings.trimmedOrError(#2601) via NachoSoto (@NachoSoto) - Fixed test compilation with
Xcode 15(#2602) via NachoSoto (@NachoSoto) - Tests: added
iOS 17snapshots (#2603) via NachoSoto (@NachoSoto) StoreProductDiscount: addeddescription(#2604) via NachoSoto (@NachoSoto)debugRevenueCatOverlayimprovements (#2594) via NachoSoto (@NachoSoto)Xcode 15: fixed all documentation warnings (#2596) via NachoSoto (@NachoSoto)StoreKitObserverModeIntegrationTests: fixed and disabled SK2testPurchaseInDevicePostsReceipt(#2589) via NachoSoto (@NachoSoto)StoreKit2TransactionListener: added log when receivingTransactions.Updates(#2588) via NachoSoto (@NachoSoto)Dictionary.MergeStrategy: simplify implementation (#2587) via NachoSoto (@NachoSoto)Configuration.Builder: fixed doc reference (#2583) via NachoSoto (@NachoSoto)APITesters: available since iOS 11 (#2581) via NachoSoto (@NachoSoto)
4.21.1
This release is compatible with Xcode 15 beta 1
Bugfixes
Dictionary.MergeStrategy: fixed Xcode 15 compilation (#2582) via NachoSoto (@NachoSoto)
Other Changes
Custom Entitlements Computation: added missing scheme to project (#2579) via NachoSoto (@NachoSoto)Custom Entitlements Computation: added Integration Tests (#2568) via NachoSoto (@NachoSoto)ProductsManager: improved display of underlying errors (#2575) via NachoSoto (@NachoSoto)StoreKit1Wrapper: added debug log for duplicatefinishTransactioncalls (#2577) via NachoSoto (@NachoSoto)- Fixed typo in file name (#2578) via NachoSoto (@NachoSoto)
Integration Tests: avoid crashes when printing receipt (#2570) via NachoSoto (@NachoSoto)Package.swiftfix warning for unrecognizedInfo.plist(#2573) via NachoSoto (@NachoSoto)
4.21.0
New Features
Offline Entitlements: use offline-computedCustomerInfowhen server is down (#2368) via NachoSoto (@NachoSoto)
Bugfixes
AppleReceipt.debugDescription: don't pretty-print JSON (#2564) via NachoSoto (@NachoSoto)SK2StoreProduct: fix crash on iOS 12 (#2565) via NachoSoto (@NachoSoto)GetCustomerInfoposts receipts if there are pending transactions (#2533) via NachoSoto (@NachoSoto)
Performance Improvements
PurchasedProductsFetcher: cache current entitlements (#2507) via NachoSoto (@NachoSoto)- Performance: new check to ensure serialization / deserialization is done from background thread (#2496) via NachoSoto (@NachoSoto)
Dependency Updates
- Bump fastlane from 2.212.2 to 2.213.0 (#2544) via dependabot[bot] (@dependabot[bot])
Other Changes
CustomerInfoManager: post all unfinished transactions (#2563) via NachoSoto (@NachoSoto)PostReceiptOperation: added ability to also postAdServicestoken (#2566) via NachoSoto (@NachoSoto)Offline Entitlements: improved computation log (#2562) via NachoSoto (@NachoSoto)- Added
TransactionPostertests (#2557) via NachoSoto (@NachoSoto) - Refactored
TransactionPoster: removed 2 dependencies and abstracted parameters (#2542) via NachoSoto (@NachoSoto) CustomerInfoManagerTests: wait forgetAndCacheCustomerInfoto finish (#2555) via NachoSoto (@NachoSoto)StoreTransaction: implementeddescription(#2556) via NachoSoto (@NachoSoto)Backend.ResponseHandleris now@Sendable(#2541) via NachoSoto (@NachoSoto)- Extracted
TransactionPosterfromPurchasesOrchestrator(#2540) via NachoSoto (@NachoSoto) enableAdServicesAttributionTokenCollection: added integration test (#2551) via NachoSoto (@NachoSoto)AttributionPoster: replaced hardcoded strings with constants (#2548) via NachoSoto (@NachoSoto)DefaultDecodable: moved toMisc/Codable/DefaultDecodable.swift(#2528) via NachoSoto (@NachoSoto)CircleCI: specify device to runbackend_integration_tests(#2547) via NachoSoto (@NachoSoto)- Created
StoreKit2TransactionFetcher(#2539) via NachoSoto (@NachoSoto) - Fix load shedder integration tests (#2546) via Josh Holtz (@joshdholtz)
- Fix doc on
Offering.getMetadataValue(#2545) via Josh Holtz (@joshdholtz) - Extracted and tested
AsyncSequence.extractValues(#2538) via NachoSoto (@NachoSoto) Offline Entitlements: don't compute offlineCustomerInfowhen purchasing a consumable products (#2522) via NachoSoto (@NachoSoto)OfflineEntitlementsManager: disable offlineCustomerInfoin observer mode (#2520) via NachoSoto (@NachoSoto)BasePurchasesTests: fixed leak detection (#2534) via NachoSoto (@NachoSoto)PurchaseTesterSwiftUI: addedProxyViewtoiOS(#2531) via NachoSoto (@NachoSoto)PurchasedProductsFetcher: removedAppStore.synccall (#2521) via NachoSoto (@NachoSoto)PurchaseTesterSwiftUI: added new window on Mac to manage proxy (#2518) via NachoSoto (@NachoSoto)PurchasedProductsFetcher: added log if fetching purchased products is slow (#2515) via NachoSoto (@NachoSoto)Offline Entitlements: disable for custom entitlements mode (#2509) via NachoSoto (@NachoSoto)Offline Entitlements: fixed iOS 12 tests (#2514) via NachoSoto (@NachoSoto)PurchasedProductsFetcher: don't throw errors if purchased products were found (#2506) via NachoSoto (@NachoSoto)Offline Entitlements: allow creating offlineCustomerInfowith emptyProductEntitlementMapping(#2504) via NachoSoto (@NachoSoto)Offline Entitlements: integration tests (#2501) via NachoSoto (@NachoSoto)CustomerInfoManager: don't cache offlineCustomerInfo(#2378) via NachoSoto (@NachoSoto)DangerousSettings: debug-onlyforceServerErrors(#2486) via NachoSoto (@NachoSoto)CocoapodsInstallation: fixedXcode 14.3.0issue (#2489) via NachoSoto (@NachoSoto)CarthageInstallation: removed workaround (#2488) via NachoSoto (@NachoSoto)
4.20.0
New Features
- Add
StoreProduct.pricePerYear(#2462) via NachoSoto (@NachoSoto)
Bugfixes
HTTPClient: don't assume error responses are JSON (#2529) via NachoSoto (@NachoSoto)OfferingsManager: returnOfferingsfrom new disk cache when server is down (#2495) via NachoSoto (@NachoSoto)OfferingsManager: don't consider timeouts as configuration errors (#2493) via NachoSoto (@NachoSoto)
Performance Improvements
- Perf:
CustomerInfoManager.fetchAndCacheCustomerInfoIfStaleno longer fetches data if stale (#2508) via NachoSoto (@NachoSoto)
Other Changes
Integration Tests: workaround forXCTestcrash after a test failure (#2532) via NachoSoto (@NachoSoto)CircleCI: save test archive onloadshedder-integration-tests(#2530) via NachoSoto (@NachoSoto)SK2StoreProduct: simplifycurrencyCodeextraction (#2485) via NachoSoto (@NachoSoto)PurchaseTesterSwiftUI: added visual feedback for purchase success/failure (#2519) via NachoSoto (@NachoSoto)PurchaseTesterSwiftUI: fixed macOS UI (#2516) via NachoSoto (@NachoSoto)MainThreadMonitor: fixed flakiness in CI (#2517) via NachoSoto (@NachoSoto)- Update
fastlane-plugin-revenuecat_internal(#2511) via Cesar de la Vega (@vegaro) Xcode: fixed.storekitfile references in schemes (#2505) via NachoSoto (@NachoSoto)MainThreadMonitor: don't monitor thread if debugger is attached (#2502) via NachoSoto (@NachoSoto)Purchases: avoid double-log when settingdelegatetonil(#2503) via NachoSoto (@NachoSoto)Integration Tests: added snapshot test forOfferingsResponse(#2499) via NachoSoto (@NachoSoto)- Tests: grouped all
Matchers into one file (#2497) via NachoSoto (@NachoSoto) DeviceCache: refactored cache keys (#2494) via NachoSoto (@NachoSoto)HTTPClient: log actual response status code (#2487) via NachoSoto (@NachoSoto)- Generate snapshots on CI (#2472) via Josh Holtz (@joshdholtz)
Integration Tests: addMainThreadMonitorto ensure main thread is not blocked (#2463) via NachoSoto (@NachoSoto)- Add message indicating tag doesn't exist (#2458) via Cesar de la Vega (@vegaro)
4.19.1
Other Changes
PostReceiptOperation: added ability to also post AdServices token (#2549) via NachoSoto (@NachoSoto)
4.19.0
New Features
- New
ErrorCode.signatureVerificationFailedwhich will be used for an upcoming feature
Bugfixes
Purchases.deinit: don't resetPurchases.proxyURL(#2346) via NachoSoto (@NachoSoto)
Other Changes
- Introduced
Configuration.EntitlementVerificationModeandVerificationResult(#2277) via NachoSoto (@NachoSoto) PurchasesDiagnostics: added step to verify signature verification (#2267) via NachoSoto (@NachoSoto)HTTPClient: added signature validation and introducedErrorCode.signatureVerificationFailed(#2272) via NachoSoto (@NachoSoto)ETagManager: don't use ETags if response verification failed (#2347) via NachoSoto (@NachoSoto)Integration Tests: removed@preconcurrency import(#2464) via NachoSoto (@NachoSoto)- Clean up: moved
ReceiptParserTests-Info.plistout of root (#2460) via NachoSoto (@NachoSoto) - Update
CHANGELOG(#2461) via NachoSoto (@NachoSoto) - Update
SwiftSnapshotTesting(#2453) via NachoSoto (@NachoSoto) - Fixed docs (#2432) via Kaunteya Suryawanshi (@kaunteya)
- Remove unnecessary line break (#2435) via Andy Boedo (@aboedo)
ProductEntitlementMapping: enabled entitlement mapping fetching (#2425) via NachoSoto (@NachoSoto)BackendPostReceiptDataTests: increased timeout to fix flaky test (#2426) via NachoSoto (@NachoSoto)- Updated requirements to drop Xcode 13.x support (#2419) via NachoSoto (@NachoSoto)
Integration Tests: fixed flaky errors when loading offerings (#2420) via NachoSoto (@NachoSoto)PurchaseTester: fixed compilation forinternalentitlement verification (#2417) via NachoSoto (@NachoSoto)ETagManager/HTTPClient: sending newX-RC-Last-Refresh-Timeheader (#2373) via NachoSoto (@NachoSoto)ETagManager: don't send validation time if not present (#2490) via NachoSoto (@NachoSoto)- SwiftUI Sample Project: Refactor Package terms method to a computed property (#2405) via Joseph Kokenge (@JOyo246)
- Clean up v3 load shedder integration tests (#2402) via Andy Boedo (@aboedo)
- Fix iOS 12 compilation (#2394) via NachoSoto (@NachoSoto)
- Added new
VerificationResult.verifiedOnDevice(#2379) via NachoSoto (@NachoSoto) PurchaseTester: fix memory leaks (#2392) via Keita Watanabe (@kitwtnb)- Integration tests: add scheduled job (#2389) via Andy Boedo (@aboedo)
- Add lane for running iOS v3 load shedder integration tests (#2388) via Andy Boedo (@aboedo)
- iOS v3 load shedder integration tests (#2387) via Andy Boedo (@aboedo)
Offline Entitlements: createdLoadShedderIntegrationTests(#2362) via NachoSoto (@NachoSoto)- Purchases.configure: log warning if attempting to use a static appUserID (#2385) via Mark Villacampa (@MarkVillacampa)
SubscriberAttributesManagerIntegrationTests: fixed flaky failures (#2381) via NachoSoto (@NachoSoto)@DefaultDecodable.Now: fixed flaky test (#2374) via NachoSoto (@NachoSoto)PurchaseTesterSwiftUI: fixed iOS compilation (#2376) via NachoSoto (@NachoSoto)SubscriberAttributesManagerIntegrationTests: fixed potential race condition (#2380) via NachoSoto (@NachoSoto)Offline Entitlements: createCustomerInfofrom offline entitlements (#2358) via NachoSoto (@NachoSoto)- Added
@DefaultDecodable.Now(#2372) via NachoSoto (@NachoSoto) HTTPClient: debug log when performing redirects (#2371) via NachoSoto (@NachoSoto)HTTPClient: new flag to force server errors (#2370) via NachoSoto (@NachoSoto)OfferingsManager: fixed Xcode 13.x build (#2369) via NachoSoto (@NachoSoto)Offline Entitlements: storeProductEntitlementMappingin cache (#2355) via NachoSoto (@NachoSoto)Offline Entitlements: added support for fetchingProductEntitlementMappingResponseinOfflineEntitlementsAPI(#2353) via NachoSoto (@NachoSoto)Offline Entitlements: createdProductEntitlementMapping(#2365) via NachoSoto (@NachoSoto)- Implemented
NetworkError.isServerDown(#2367) via NachoSoto (@NachoSoto) ETagManager: added test for 304 responses with no etag (#2360) via NachoSoto (@NachoSoto)TestLogHandler: increased default capacity (#2357) via NachoSoto (@NachoSoto)OfferingsManager: moved log to common method to remove hardcoded string (#2363) via NachoSoto (@NachoSoto)Offline Entitlements: createdProductEntitlementMappingResponse(#2351) via NachoSoto (@NachoSoto)HTTPClient: added test for 2xx response for request with etag (#2361) via NachoSoto (@NachoSoto)PurchaseTesterSwiftUIimprovements (#2345) via NachoSoto (@NachoSoto)ConfigureStrings: fixed double-space typo (#2344) via NachoSoto (@NachoSoto)ETagManagerTests: fixed tests on iOS 12 (#2349) via NachoSoto (@NachoSoto)DeviceCache: simplified constructor (#2354) via NachoSoto (@NachoSoto)Trusted Entitlements: changed all APIs tointernal(#2350) via NachoSoto (@NachoSoto)VerificationResult.notRequested: removed caching reference (#2337) via NachoSoto (@NachoSoto)- Finished signature verification
HTTPClienttests (#2333) via NachoSoto (@NachoSoto) Configuration.Builder.with(entitlementVerificationMode:): improved documentation (#2334) via NachoSoto (@NachoSoto)ETagManager: don't ignore failed etags withSigning.VerificationMode.informational(#2331) via NachoSoto (@NachoSoto)IdentityManager: clearETagManagerandDeviceCacheif verification is enabled but cachedCustomerInfois not (#2330) via NachoSoto (@NachoSoto)- Made
Configuration.EntitlementVerificationMode.enforcedunavailable (#2329) via NachoSoto (@NachoSoto) - Refactor: reorganized files in new Security and Misc folders (#2326) via NachoSoto (@NachoSoto)
CustomerInfo: use same grace period logic for active subscriptions (#2327) via NachoSoto (@NachoSoto)HTTPClient: don't verify 4xx/5xx responses (#2322) via NachoSoto (@NachoSoto)EntitlementInfo: request date is not optional (#2325) via NachoSoto (@NachoSoto)CustomerInfo: removedentitlementVerification(#2320) via NachoSoto (@NachoSoto)- Renamed
VerificationResult.notVerifiedto.notRequested(#2321) via NachoSoto (@NachoSoto) EntitlementInfo: add a grace period limit to outdated entitlements (#2288) via NachoSoto (@NachoSoto)- Update
CustomerInfo.requestDatefrom 304 responses (#2310) via NachoSoto (@NachoSoto) Signing: added request time & eTag to signature verification (#2309) via NachoSoto (@NachoSoto)HTTPClient: changed header search to be case-insensitive (#2308) via NachoSoto (@NachoSoto)HTTPClient: automatically addnoncebased onHTTPRequest.Path(#2286) via NachoSoto (@NachoSoto)PurchaseTester: added ability to reloadCustomerInfowith a customCacheFetchPolicy(#2312) via NachoSoto (@NachoSoto)- Fix issue where underlying error information for product fetch errors was not printed in log. (#2281) via Chris Vasselli (@chrisvasselli)
PurchaseTester: added ability to setConfiguration.EntitlementVerificationMode(#2290) via NachoSoto (@NachoSoto)- SwiftUI: Paywall View should respond to changes on the UserView model (#2297) via ConfusedVorlon (@ConfusedVorlon)
- Deprecate
usesStoreKit2IfAvailable(#2293) via Andy Boedo (@aboedo) Signing: updated to use production public key (#2274) via NachoSoto (@NachoSoto)
4.18.0
New Features
- Introduced Custom Entitlements Computation mode (#2439) via Andy Boedo (@aboedo)
- Create separate
SPMlibrary to enable custom entitlement computation (#2440) via NachoSoto (@NachoSoto)
This new library allows apps to use a smaller version of the RevenueCat SDK, intended for apps that will do their own entitlement computation separate from RevenueCat.
Apps using this mode rely on webhooks to signal their backends to refresh entitlements with RevenueCat.
See the demo app for an example and usage instructions.
Bugfixes
PurchaseOrchestrator: fix incorrectInitiationSourcefor SK1 queue transactions (#2430) via NachoSoto (@NachoSoto)
Other Changes
- Update offerings cache when switchUser(to:) is called (#2455) via Andy Boedo (@aboedo)
- Updated example code for the sample app for Custom Entitlements (#2454) via Andy Boedo (@aboedo)
- Custom Entitlement Computation: API testers (#2452) via NachoSoto (@NachoSoto)
- Custom Entitlement Computation: avoid
getCustomerInforequests for cancelled purchases (#2449) via NachoSoto (@NachoSoto) - Custom Entitlement Computation: disabled unnecessary APIs (#2442) via NachoSoto (@NachoSoto)
StoreKit1Wrapper: added log when adding payment to queue (#2423) via NachoSoto (@NachoSoto)StoreKit1Wrapper: added debug log when transaction is removed but no callbacks to notify (#2418) via NachoSoto (@NachoSoto)customEntitlementsComputation: update the copy in the sample app to explain the new usage (#2443) via Andy Boedo (@aboedo)- Clarify reasoning for
disfavoredOverloadin logIn (#2434) via Andy Boedo (@aboedo) - Documentation: improved
asyncAPI docs (#2432) via Kaunteya Suryawanshi (@kaunteya)
4.17.11
Bug Fixes
CustomerInfoManager: fixed deadlock caused by readingCustomerInfoinside of observer (#2412) via NachoSoto (@NachoSoto)
4.17.10
Bugfixes
- Fix
NotificationCenterdeadlock incustomerInfoListener(#2407) via Andy Boedo (@aboedo) Xcode 14.3: fixed compilation errors (#2399) via NachoSoto (@NachoSoto)DispatchTimeInterval: fixed Xcode 14.3 compilation (#2397) via NachoSoto (@NachoSoto)
Other Changes
CircleCI: useXcode 14.3.0(#2398) via NachoSoto (@NachoSoto)
4.17.9
Bugfixes
DeviceCache: workaround for potential deadlock (#2375)
Performance Improvements
PostReceiptDataOperation/GetCustomerInfoOperation: only invoke response handlers once (#2377) via NachoSoto (@NachoSoto)
Other Changes
- Redirect to latest version of migration guide (#2384)
- Fix migration guide link (#2383)
SwiftLint: fixed lint with new 0.51.0 version (#2395)
4.17.8
Bugfixes
DispatchTimeInterval&Date: avoid 32-bit overflows, fixwatchOScrashes (#2342) via NachoSoto (@NachoSoto)- Fix issue with missing subscriber attributes if set after login but before login callback (#2313) via @tonidero
Performance Improvements
AppleReceipt.mostRecentActiveSubscription: performance optimization (#2332) via NachoSoto (@NachoSoto)
Other Changes
CI: also run tests onwatchOS(#2340) via NachoSoto (@NachoSoto)RELEASING.md: added GitHub rate limiting parameter (#2336) via NachoSoto (@NachoSoto)- Add additional logging on init (#2324) via Cody Kerns (@codykerns)
- Replace
iffwithif and only if(#2323) via @aboedo - Fix typo in log (#2315) via @nickkohrn
Purchases.restorePurchases: added docstring about successful results (#2316) via NachoSoto (@NachoSoto)RELEASING.md: fixed hotfix instructions (#2304) via NachoSoto (@NachoSoto)PurchaseTester: fixed leak when reconfiguringPurchases(#2311) via NachoSoto (@NachoSoto)ProductsFetcherSK2: add underlying error to description (#2281) via Chris Vasselli (@chrisvasselli)
4.17.7
Bugfixes
- Fixed
Bundle: Sendableconformance (#2301) - Fixed
PurchasesOrchestratorcompilation error on Xcode 14.3 beta 1 (#2292) via NachoSoto (@NachoSoto)
Other Changes
- Clarifies error messages for StoreKit 1 bugs (#2294)
4.17.6
Bugfixes
PurchaseOrchestrator: always refresh receipt purchasing in sandbox (#2280) via NachoSoto (@NachoSoto)BundleSandboxEnvironmentDetector: always returntruewhen running on simulator (#2276) via NachoSoto (@NachoSoto)OfferingsManager: ensure underlyingOfferingsManager.Error.configurationErroris logged (#2266) via NachoSoto (@NachoSoto)
Other Changes
UserDefaultsDefaultTests: fixed flaky failures (#2284) via NachoSoto (@NachoSoto)BaseBackendTest: improved test failure message (#2285) via NachoSoto (@NachoSoto)- Updated targets and schemes for Xcode 14.2 (#2282) via NachoSoto (@NachoSoto)
HTTPRequest.Path.health: don't cache usingETagManager(#2278) via NachoSoto (@NachoSoto)EntitlementInfos.all: fixed docstring (#2279) via NachoSoto (@NachoSoto)StoreKit2StorefrontListener: added tests to fix flaky code coverage (#2265) via NachoSoto (@NachoSoto)NetworkError: added underlying error to description (#2263) via NachoSoto (@NachoSoto)- Created
Signing.verify(message:hasValidSignature:with:)(#2216) via NachoSoto (@NachoSoto)
4.17.5
Dependency Updates
- Bump fastlane-plugin-revenuecat_internal from
738f255to9255366(#2264) via dependabot[bot] (@dependabot[bot]) - Update
Gemfile.lock(#2254) via Cesar de la Vega (@vegaro)
Other Changes
HTTPClient: added support for sendingX-Nonce(#2214) via NachoSoto (@NachoSoto)Configuration: added (internalfor now) API to load public key (#2215) via NachoSoto (@NachoSoto)- Replaced
Anyuses for workaround withBox(#2250) via NachoSoto (@NachoSoto) HTTPClientTests: fixed failing test with missing assertions (#2262) via NachoSoto (@NachoSoto)HTTPClientTests: refactored tests to usewaitUntil(#2257) via NachoSoto (@NachoSoto)- PurchaseTester: Add Receipt Inspector UI (#2249) via Andy Boedo (@aboedo)
- Adds dependabot (#2259) via Cesar de la Vega (@vegaro)
StoreKit1WrapperTests: avoid usingBool.randomto fix flaky code coverage (#2258) via NachoSoto (@NachoSoto)IntroEligibilityCalculator: changed logic to handle products with no subscription group (#2247) via NachoSoto (@NachoSoto)
4.17.4
Bugfixes
CustomerInfoManager: improved thread-safety (#2224) via NachoSoto (@NachoSoto)
Other Changes
StoreKitIntegrationTests: replacedXCTSkipIfwithXCTExpectFailure(#2244) via NachoSoto (@NachoSoto)PurchasesOrchestrator: changedReceiptRefreshPolicy.alwaysto.onlyIfEmptyafter a purchase (#2245) via NachoSoto (@NachoSoto)
4.17.3
Bugfixes
IntroEligibilityCalculator: fixed logic for subscriptions in same group (#2174) via NachoSoto (@NachoSoto)PurchasesOrchestrator: finish SK2 transactions fromStoreKit.Transaction.updatesafter posting receipt (#2243) via NachoSoto (@NachoSoto)
Other Changes
Purchases: fixed documentation warnings (#2241) via NachoSoto (@NachoSoto)- Code coverage (#2242) via NachoSoto (@NachoSoto)
- Improve logging for custom package durations (#2240) via Cody Kerns (@codykerns)
TrialOrIntroPriceEligibilityChecker: useTimingUtilto log when it takes too long (#2238) via NachoSoto (@NachoSoto)- Update
fastlane-plugin-revenuecat_internal(#2239) via NachoSoto (@NachoSoto) - Simplified
OperationDispatcher.dispatchOnMainActor(#2236) via NachoSoto (@NachoSoto) PurchaseTester: added contents ofCHANGELOG.latest.mdtoTestFlightchangelog (#2233) via NachoSoto (@NachoSoto)SystemInfo.isApplicationBackgrounded: added overload for@MainActor(#2230) via NachoSoto (@NachoSoto)
4.17.2
Bugfixes
Purchases: avoid potential crash when initializing in the background (#2231) via NachoSoto (@NachoSoto)
Other Changes
PurchaseTester: ignore errors when restoring purchases (#2228) via NachoSoto (@NachoSoto)PurchaseTester: fixedisPurchasingstate when purchasing fails (#2229) via NachoSoto (@NachoSoto)PurchaseTester: settingchangelogwhen submitting toTestFlight(#2232) via NachoSoto (@NachoSoto)- Revert "
SPM: addedAPPLICATION_EXTENSION_API_ONLYflag toRevenueCatandReceiptParser(#2217)" (#2225) via NachoSoto (@NachoSoto)
4.17.1
Other Changes
- set flag to extract objc info for swift symbols (#2218) via Andy Boedo (@aboedo)
- Produce a compilation error when using an old
Xcodeversion (#2222) via NachoSoto (@NachoSoto) SPM: addedAPPLICATION_EXTENSION_API_ONLYflag toRevenueCatandReceiptParser(#2217) via NachoSoto (@NachoSoto)PurchaseTester: added section to visualizeAppleReceipt(#2211) via NachoSoto (@NachoSoto)
4.17.0
New Features
- Added new
ReceiptParser.fetchAndParseLocalReceipt(#2204) via NachoSoto (@NachoSoto) PurchasesReceiptParser: added API to parse receipts frombase64string (#2200) via NachoSoto (@NachoSoto)
Bugfixes
CustomerInfo: support parsing schema version 2 to restore SDKv3.xcompatibility (#2213) via NachoSoto (@NachoSoto)
Other Changes
JSONDecoder: added decoding type when loggingDecodingError.keyNotFound(#2212) via NachoSoto (@NachoSoto)- Added
ReceiptParserTests(#2203) via NachoSoto (@NachoSoto) - Deploy
PurchaseTesterformacOS(#2011) via NachoSoto (@NachoSoto) ReceiptFetcher: refactored implementation to log error when failing to fetch receipt (#2202) via NachoSoto (@NachoSoto)PostReceiptDataOperation: replaced receiptbase64withhashfor cache key (#2199) via NachoSoto (@NachoSoto)PurchaseTester: small refactor to simplifyDateformatting (#2210) via NachoSoto (@NachoSoto)PurchasesReceiptParser: improved documentation to referencedefault(#2197) via NachoSoto (@NachoSoto)- Created
CachingTrialOrIntroPriceEligibilityChecker(#2007) via NachoSoto (@NachoSoto) - Update Gemfile.lock (#2205) via Cesar de la Vega (@vegaro)
- remove stalebot in favor of SLAs in Zendesk (#2196) via Andy Boedo (@aboedo)
- Update fastlane-plugin-revenuecat_internal to latest version (#2194) via Cesar de la Vega (@vegaro)
4.16.0
New Features
- Created
ReceiptParserSPM (#2155) via NachoSoto (@NachoSoto) - Exposed
PurchasesReceiptParserandAppleReceipt(#2153) via NachoSoto (@NachoSoto)
Bugfixes
Restore purchases: post product data when posting receipts (#2178) via NachoSoto (@NachoSoto)
Other Changes
- Added
Dictionary.merge(#2190) via NachoSoto (@NachoSoto) CircleCI: use Xcode 14.2.0 (#2187) via NachoSoto (@NachoSoto)ReceiptParser: a few documentation improvements (#2189) via NachoSoto (@NachoSoto)Purchase Tester: fixedTestFlightdeployment (#2188) via NachoSoto (@NachoSoto)Purchase Tester: display specificIntroEligibilityStatus(#2184) via NachoSoto (@NachoSoto)Purchase Tester: fixedSubscriptionPeriod(#2185) via NachoSoto (@NachoSoto)
4.15.5
Bugfixes
ErrorUtils.purchasesError(withUntypedError:): handlePublicErrors (#2165) via NachoSoto (@NachoSoto)- Fixed race condition finishing
SK1transactions (#2148) via NachoSoto (@NachoSoto) IntroEligibilityStatus: addedCustomStringConvertibleimplementation (#2182) via NachoSoto (@NachoSoto)BundleSandboxEnvironmentDetector: fixed logic formacOS(#2176) via NachoSoto (@NachoSoto)- Fixed
AttributionFetcher.adServicesTokenhanging when called in simulator (#2157) via NachoSoto (@NachoSoto)
Other Changes
Purchase Tester: added ability to purchase products directly withStoreKit(#2172) via NachoSoto (@NachoSoto)DNSChecker: simplifiedNetworkErrorinitialization (#2166) via NachoSoto (@NachoSoto)Purchasesinitialization: refactor to avoid multiple concurrent instances in memory (#2180) via NachoSoto (@NachoSoto)Purchase Tester: added button to clear messages on logger view (#2179) via NachoSoto (@NachoSoto)NetworkOperation: added assertion to ensure that subclasses call completion (#2138) via NachoSoto (@NachoSoto)CacheableNetworkOperation: avoid unnecessarily creating operations for cache hits (#2135) via NachoSoto (@NachoSoto)PurchaseTester: fixedmacOSsupport (#2175) via NachoSoto (@NachoSoto)IntroEligibilityCalculator: added log includingAppleReceipt(#2181) via NachoSoto (@NachoSoto)Purchase Tester: fixed scene manifest (#2170) via NachoSoto (@NachoSoto)HTTPClientTests: refactored to usewaitUntil(#2168) via NachoSoto (@NachoSoto)Integration Tests: split up tests in smaller files (#2158) via NachoSoto (@NachoSoto)StoreKitRequestFetcher: removed unnecessary dispatch (#2152) via NachoSoto (@NachoSoto)Purchase Tester: added companionwatchOSapp (#2140) via NachoSoto (@NachoSoto)StoreKit1Wrapper: added warning if receiving too many updated transactions (#2117) via NachoSoto (@NachoSoto)StoreKitTestHelpers: cleaned up unnecessary log (#2177) via NachoSoto (@NachoSoto)TrialOrIntroPriceEligibilityCheckerSK1Tests: usewaitUntilValue(#2173) via NachoSoto (@NachoSoto)DNSChecker: added log with resolved host (#2167) via NachoSoto (@NachoSoto)MagicWeatherSwiftUI: updatedREADMEto point to workspace (#2142) via NachoSoto (@NachoSoto)Purchase Tester: fixed.storekitconfig file reference (#2171) via NachoSoto (@NachoSoto)Purchase Tester: fixed error alerts (#2169) via NachoSoto (@NachoSoto)CI: don't make releases untilrelease-checkspass (#2162) via NachoSoto (@NachoSoto)Fastfile: changedmatchtoreadonly(#2161) via NachoSoto (@NachoSoto)
4.15.4
Bugfixes
- Fix sending presentedOfferingIdentifier in StoreKit2 (#2156) via Toni Rico (@tonidero)
ReceiptFetcher: throttle receipt refreshing to avoidStoreKitthrottle errors (#2146) via NachoSoto (@NachoSoto)
Other Changes
- Added integration and unit tests to verify observer mode behavior (#2069) via NachoSoto (@NachoSoto)
- Created
ClockTypeandTestClockto be able to mock time (#2145) via NachoSoto (@NachoSoto) - Extracted
asyncWaitto pollasyncconditions in tests (#2134) via NachoSoto (@NachoSoto) StoreKitRequestFetcher: added log when starting/ending requests (#2151) via NachoSoto (@NachoSoto)CI: fixedPurchaseTesterdeployment (#2147) via NachoSoto (@NachoSoto)
4.15.3
Bugfixes
- Un-deprecate
Purchases.configure(withAPIKey:appUserID:)andPurchases.configure(withAPIKey:appUserID:observerMode:)(#2129) via NachoSoto (@NachoSoto)
Other Changes
ReceiptFetcherTests: refactored tests usingwaitUntilValue(#2144) via NachoSoto (@NachoSoto)- Added a few performance improvements for
ReceiptParser(#2124) via NachoSoto (@NachoSoto) CallbackCache: fixed reference (#2143) via NachoSoto (@NachoSoto)PostReceiptDataOperation: clarified receipt debug log (#2128) via NachoSoto (@NachoSoto)CallbackCache: avoid exposing internal mutable cache (#2136) via NachoSoto (@NachoSoto)CallbackCache: added assertion for tests to ensure we don't leak callbacks (#2137) via NachoSoto (@NachoSoto)NetworkOperation: madeAtomicreferences immutable (#2139) via NachoSoto (@NachoSoto)ReceiptParser: ensure parsing never happens in the main thread (#2123) via NachoSoto (@NachoSoto)PostReceiptDataOperation: also print receipt data withverboselogs (#2127) via NachoSoto (@NachoSoto)BasePurchasesTests: detecting and fixing manyDeviceCacheleaks (#2105) via NachoSoto (@NachoSoto)StoreKitIntegrationTests: added test to check applying a promotional offer during subscription (#1588) via NachoSoto (@NachoSoto)
4.15.2
Bugfixes
- Fixed purchasing with
PromotionalOffers usingStoreKit 2(#2020) via NachoSoto (@NachoSoto)
Other Changes
CircleCI: cache Homebrew installation (#2103) via NachoSoto (@NachoSoto)Integration Tests: fixedPurchasesleak throughPurchasesDiagnostics(#2126) via NachoSoto (@NachoSoto)HTTPClient: replacedX-StoreKit2-SettingwithX-StoreKit2-Enabled(#2118) via NachoSoto (@NachoSoto)BasePurchasesTests: added assertion to ensurePurchasesdoes not leak (#2104) via NachoSoto (@NachoSoto)ReceiptParser.parsealways throwsReceiptParser.Error(#2099) via NachoSoto (@NachoSoto)Tests: ensurePurchasesis not configured multiple times (#2100) via NachoSoto (@NachoSoto)- Extracted
LoggerType(#2098) via NachoSoto (@NachoSoto) Integration Tests: verifyPurchasesdoes not leak across tests (#2106) via NachoSoto (@NachoSoto)StoreKit2listeners: setTaskpriorityto.utility(#2070) via NachoSoto (@NachoSoto)Installation Tests: remove unused code inFastfile(#2097) via NachoSoto (@NachoSoto)DeviceCache: added verbose logs forinit/deinit(#2101) via NachoSoto (@NachoSoto)StoreKit1Wrapper: process transactions in a background thread (#2115) via NachoSoto (@NachoSoto)- update CONTRIBUTING.md link in bug report template (#2119) via Nate Lowry (@natelowry)
4.15.1
Bugfixes
Configuration.with(appUserID:): allow passingniland added new tests (#2110) via NachoSoto (@NachoSoto)
Other Changes
- Fix documentation typo (#2113) via Bas Broek (@BasThomas)
4.15.0
New Features
- Added
LogLevel.verbose(#2080) via NachoSoto (@NachoSoto)
Other Changes
- Fixed
LogLevelordering and added tests (#2102) via NachoSoto (@NachoSoto) TimingUtil: fixed Xcode 13.2 compilation (#2088) via NachoSoto (@NachoSoto)- Generate documentation for
iOSinstead ofmacOS(#2089) via NachoSoto (@NachoSoto) - Update
fastlane(#2090) via NachoSoto (@NachoSoto) - CI: speed up
docs-deployby only installingbundledependencies (#2092) via NachoSoto (@NachoSoto) Tests: replacedtoEventuallywith newwaitUntilValueto simplify tests (#2071) via NachoSoto (@NachoSoto)CircleCI: fixeddocs-deploygit credentials (#2087) via NachoSoto (@NachoSoto)- Added
verboselogs forPurchasesandStoreKit1Wrapperlifetime (#2082) via NachoSoto (@NachoSoto) StoreKit: added logs when purchasing and product requests are too slow (#2061) via NachoSoto (@NachoSoto)- Created
TimingUtilto measure and log methods that are too slow (#2059) via NachoSoto (@NachoSoto) SKTestSession: finish all unfinished transactions before starting each test (#2066) via NachoSoto (@NachoSoto)CircleCI: loweredno_output_timeoutto 5 minutes (#2084) via NachoSoto (@NachoSoto)- Removed unused
APITesters.xcworkspaceand createdRevenueCat.xcworkspace(#2075) via NachoSoto (@NachoSoto) Atomic: added new test to verify each instance gets its ownLock(#2077) via NachoSoto (@NachoSoto)Logger: exposed genericlogmethod (#2058) via NachoSoto (@NachoSoto)
4.14.3
Bugfixes
- Changed default
UserDefaultsfrom.standardto our own Suite (#2046) via NachoSoto (@NachoSoto)
Other Changes
Logging: added log when configuring SDK in observer mode (#2065) via NachoSoto (@NachoSoto)PurchaseTesterSwiftUI: added observer mode setting (#2052) via NachoSoto (@NachoSoto)- Exposed
SystemInfo.observerModeto simplify code (#2064) via NachoSoto (@NachoSoto) Result.init(catching:)withasyncmethod (#2060) via NachoSoto (@NachoSoto)- Updated schemes and project for Xcode 14.1 (#2081) via NachoSoto (@NachoSoto)
PurchasesSubscriberAttributesTests: simplified tests (#2056) via NachoSoto (@NachoSoto)DeviceCache: removedfatalErrorfor users not overridingUserDefaults(#2079) via NachoSoto (@NachoSoto)DeviceCache: changedNotificationCenterobservation to be received on posting thread (#2078) via NachoSoto (@NachoSoto)StoreKit1Wrapper: added instance address when detecting transactions (#2055) via NachoSoto (@NachoSoto)- Fixed lint issues with
SwiftLint 0.5.0(#2076) via NachoSoto (@NachoSoto) NSData+RCExtensionsTests: improved errors (#2043) via NachoSoto (@NachoSoto)APITester: fixed warning inSubscriptionPeriodAPI(#2054) via NachoSoto (@NachoSoto)Integration Tests: always run them in random order locally (#2068) via NachoSoto (@NachoSoto)
4.14.2
Bugfixes
StoreKit 2: don't finish transactions in observer mode (#2053) via NachoSoto (@NachoSoto)
Other Changes
CircleCI: added ability to create a release manually (#2067) via NachoSoto (@NachoSoto)- Changelog: Fix links to V4 API Migration guide (#2051) via Kevin Quisquater (@KevinQuisquater)
HTTPClient: added log for failed requests (#2048) via NachoSoto (@NachoSoto)ErrorResponse.asBackendError: serialize attribute errors asNSDictionary(#2034) via NachoSoto (@NachoSoto)ErrorCode.unknownBackendError: include original error code (#2032) via NachoSoto (@NachoSoto)CI: fixedpush-podsjob (#2045) via NachoSoto (@NachoSoto)PostReceiptDataOperation: log Apple error when purchase equals expiration date (#2038) via NachoSoto (@NachoSoto)- Update Fastlane plugin (#2041) via Cesar de la Vega (@vegaro)
4.14.1
Bugfixes
ISO8601DateFormatter.withMilliseconds: fixed iOS 11 crash (#2037) via NachoSoto (@NachoSoto)- Changed
StoreKit2Setting.defaultback to.enabledOnlyForOptimizations(#2022) via NachoSoto (@NachoSoto)
Other Changes
Integration Tests: changed weekly to monthly subscriptions to work around 0-second subscriptions (#2042) via NachoSoto (@NachoSoto)Integration Tests: fixedtestPurchaseWithAskToBuyPostsReceipt(#2040) via NachoSoto (@NachoSoto)ReceiptRefreshPolicy.retryUntilProductIsFound: default to returning "invalid" receipt (#2024) via NachoSoto (@NachoSoto)CachingProductsManager: use partial cached products (#2014) via NachoSoto (@NachoSoto)- Added
BackendErrorCode.purchasedProductMissingInAppleReceipt(#2033) via NachoSoto (@NachoSoto) PurchaseTesterSwiftUI: replacedPurchasesdependency withSPM(#2027) via NachoSoto (@NachoSoto)Integration Tests: changed log output toraw(#2031) via NachoSoto (@NachoSoto)Integration Tests: run on iOS 16 (#2035) via NachoSoto (@NachoSoto)- CI: fixed
iOS 14tests Xcode version (#2030) via NachoSoto (@NachoSoto) Async.call: added non-throwing overload (#2006) via NachoSoto (@NachoSoto)- Documentation: Fixed references in
V4_API_Migration_guide.md(#2018) via NachoSoto (@NachoSoto) eligiblePromotionalOffers: don't log error if response is ineligible (#2019) via NachoSoto (@NachoSoto)- Runs push-pods after make-release (#2025) via Cesar de la Vega (@vegaro)
- Some updates on notify-on-non-patch-release-branches: (#2026) via Cesar de la Vega (@vegaro)
- Deploy
PurchaseTesterSwiftUIto TestFlight (#2003) via NachoSoto (@NachoSoto) PurchaseTesterSwiftUI: added "logs" screen (#2012) via NachoSoto (@NachoSoto)PurchaseTesterSwiftUI: allow configuring API key at runtime (#1999) via NachoSoto (@NachoSoto)
4.14.0
New Features
- Introduced
PurchasesDiagnosticsto help diagnose SDK configuration errors (#1977) via NachoSoto (@NachoSoto)
Bugfixes
- Avoid posting empty receipts by making
TransactionsManageralways useSK1implementation (#2015) via NachoSoto (@NachoSoto) NetworkOperation: workaround for iOS 12 crashes (#2008) via NachoSoto (@NachoSoto)
Other Changes
- Makes hold job wait for installation tests to pass (#2017) via Cesar de la Vega (@vegaro)
- Update fastlane-plugin-revenuecat_internal (#2016) via Cesar de la Vega (@vegaro)
bug_report.md: changed SK2 wording (#2010) via NachoSoto (@NachoSoto)- Added
Set + SetandSet += Setoperators (#2013) via NachoSoto (@NachoSoto) - fix the link to StoreKit Config file from watchOS purchaseTester (#2009) via Andy Boedo (@aboedo)
PurchaseTesterSwiftUI: combined targets into one multi-platform and fixedmacOS(#1996) via NachoSoto (@NachoSoto)- Less Array() (#2005) via SabinaHuseinova (@SabinaHuseinova)
- Docs: fixed
logInreferences (#2002) via NachoSoto (@NachoSoto) - CI: use
Xcode 14.1(#1992) via NachoSoto (@NachoSoto) PurchaseTesterSwiftUI: fixed warnings and simplified code usingasyncmethods (#1985) via NachoSoto (@NachoSoto)
4.13.4
Bugfixes
- Fixed Xcode 13.2.x / Swift 5.5 compatibility (#1994) via NachoSoto (@NachoSoto)
Other Changes
- Update
fastlane(#1998) via NachoSoto (@NachoSoto) - Documentation: fixed missing docs from inherited symbols (#1997) via NachoSoto (@NachoSoto)
- CI: added job to test compilation with
Xcode 13.2.1/Swift 5.5(#1990) via NachoSoto (@NachoSoto) - Extracted
TrialOrIntroPriceEligibilityCheckerType(#1983) via NachoSoto (@NachoSoto) - CI: removed redundant
swiftlintinstallation (#1993) via NachoSoto (@NachoSoto) Nimble: use a fixed version (#1991) via NachoSoto (@NachoSoto)- Update fastlane-plugin-revenuecat_internal (#1989) via Cesar de la Vega (@vegaro)
Purchases.logIn: log warning if attempting to use a staticappUserID(#1958) via NachoSoto (@NachoSoto)- Created
InternalAPIfor "health" request (#1971) via NachoSoto (@NachoSoto)
4.13.3
Other Changes
TrialOrIntroPriceEligibilityChecker: only use SK2 implementation if enabled (#1984) via NachoSoto (@NachoSoto)
4.13.2
Bugfixes
- Purchasing: fixed consumable purchases by fixing transaction-finishing (#1965) via NachoSoto (@NachoSoto)
ErrorUtils: improved logging andlocalizedDescriptionto include underlying errors (#1974) via NachoSoto (@NachoSoto)PaymentQueueWrapper: also implementshouldShowPriceConsent(#1963) via NachoSoto (@NachoSoto)ReceiptFetcher: added retry mechanism (#1945) via NachoSoto (@NachoSoto)PaymentQueueWrapper: also conform toSKPaymentTransactionObserverto fix promoted purchases (#1962) via NachoSoto (@NachoSoto)
Other Changes
- Updating great support link via Miguel José Carranza Guisado (@MiguelCarranza)
OfferingsManager: added ability to fail if any product is not found (#1976) via NachoSoto (@NachoSoto)OfferingsManager: added missing test for ignoring missing products (#1975) via NachoSoto (@NachoSoto)PaymentQueueWrapper: improved abstraction for activeSKPaymentQueuewrapper (#1968) via NachoSoto (@NachoSoto)ErrorUtils.purchasesError(withUntypedError:)handlePurchasesErrorConvertible(#1973) via NachoSoto (@NachoSoto)- Renamed
CallbackCache.add(callback:)(#1970) via NachoSoto (@NachoSoto) - Fixed iOS 12/13 test snapshots (#1972) via NachoSoto (@NachoSoto)
- Moved
SKPaymentQueue.presentCodeRedemptionSheettoStoreKitWorkarounds(#1967) via NachoSoto (@NachoSoto) Async.callmethod to convert completion-block call toasync(#1969) via NachoSoto (@NachoSoto)- Remind about updating docs and parity spreadsheet on minor releases (#1955) via Cesar de la Vega (@vegaro)
PostReceiptDataOperation: addedinitiationSourceparameter (#1957) via NachoSoto (@NachoSoto)StoreKit1Wrapper: separatedSKPaymentTransactionObserverandSKPaymentQueueDelegateimplementations (#1961) via NachoSoto (@NachoSoto)- Refactored
Error.isCancelledErrorintoError+Extensions(#1960) via NachoSoto (@NachoSoto) - Update fastlane plugin (#1959) via Cesar de la Vega (@vegaro)
Integration Tests: simplifiedtestIneligibleForIntroAfterPurchaseExpiresto fix flakiness (#1952) via NachoSoto (@NachoSoto)- fix typo in comment (#1956) via Andy Boedo (@aboedo)
4.13.1
Other Changes
ProductsFetcherSK2: removed now redundant caching logic (#1908) via NachoSoto (@NachoSoto)- Created
CachingProductsManagerto provide consistent caching logic when fetching products (#1907) via NachoSoto (@NachoSoto) - Refactored
ReceiptFetcher.receiptData(#1941) via NachoSoto (@NachoSoto) - Abstracted conversion from
asyncto completion-block APIs (#1943) via NachoSoto (@NachoSoto) - Moved
InAppPurchaseintoAppleReceipt(#1942) via NachoSoto (@NachoSoto) Purchases+async: combined@availablestatements into a single one (#1944) via NachoSoto (@NachoSoto)Integration Tests: don't initializePurchasesuntil theSKTestSessionhas been re-created (#1946) via NachoSoto (@NachoSoto)PostReceiptDataOperation: print receipt data ifdebuglogs are enabled (#1940) via NachoSoto (@NachoSoto)
4.13.0
New Features
- 🚨
StoreKit 2is now enabled by default 🚨 (#1922) via NachoSoto (@NachoSoto) - Extracted
PurchasesTypeandPurchasesSwiftType(#1912) via NachoSoto (@NachoSoto)
Bugfixes
StoreKit 1: changed result of cancelled purchases to be consistent withStoreKit 2(#1910) via NachoSoto (@NachoSoto)PaymentQueueWrapper: handle promotional purchase requests from App Store when SK1 is disabled (#1901) via NachoSoto (@NachoSoto)
Other Changes
- Fixed iOS 12 tests (#1936) via NachoSoto (@NachoSoto)
CacheableNetworkOperation: fixed race condition in new test (#1932) via NachoSoto (@NachoSoto)BasePurchasesTests: changed default back to SK1 (#1935) via NachoSoto (@NachoSoto)Logger: refactored defaultLogLeveldefinition (#1934) via NachoSoto (@NachoSoto)AppleReceipt: refactored declarations into nested types (#1933) via NachoSoto (@NachoSoto)Integration Tests: relaunch tests when retrying failures (#1925) via NachoSoto (@NachoSoto)CircleCI: downgraded release jobs to Xcode 13.x (#1927) via NachoSoto (@NachoSoto)ErrorUtils: added test to verify thatPublicErrors can becatch'd asErrorCode(#1924) via NachoSoto (@NachoSoto)StoreKitIntegrationTests: printAppleReceiptdata wheneververifyEntitlementWentThroughfails (#1929) via NachoSoto (@NachoSoto)OperationQueue: log debug message when requests are found in cache and skipped (#1926) via NachoSoto (@NachoSoto)GetCustomerInfoAPI: avoid making a request if there's anyPostReceiptDataOperationin progress (#1911) via NachoSoto (@NachoSoto)PurchaseTester: allow HTTP requests and enable settingProxyURL(#1917) via NachoSoto (@NachoSoto)
4.12.1
Bugfixes
Purchases.beginRefundRequest: ensured errors arePublicError(#1913) via NachoSoto (@NachoSoto)PurchaseTesterSwiftUI: fixed macOS target (#1915) via NachoSoto (@NachoSoto)
Other Changes
- Fixed
tvOStests (#1928) via NachoSoto (@NachoSoto) SnapshotTesting: require version 1.9.0 to keep supporting iOS 12/13 tests (#1931) via NachoSoto (@NachoSoto)pre-commithook: also verify leftover API keys inPurchaseTester(#1914) via NachoSoto (@NachoSoto)CircleCI: changed iOS 12/13 to use Xcode 13 (#1918) via NachoSoto (@NachoSoto)PurchaseTesterSwiftUI: removed unnecessaryUIApplicationDelegate(#1916) via NachoSoto (@NachoSoto)CircleCI: changed all jobs to use Xcode 14 (#1909) via NachoSoto (@NachoSoto)Atomic: added unit test to verifyvalue's setter (#1905) via NachoSoto (@NachoSoto)spm buildCI job: changed to release build (#1903) via NachoSoto (@NachoSoto)StoreKitUnitTests: compile on iOS 11.0+ (#1904) via NachoSoto (@NachoSoto)Purchases: only expose testing data onDEBUG(#1902) via NachoSoto (@NachoSoto)Integration Tests: added test to verify re-subscription behavior (#1898) via NachoSoto (@NachoSoto)IntegrationTests: simplifiedtestExpireSubscriptionto fix flaky test (#1899) via NachoSoto (@NachoSoto)Integration Tests: actually verify that entitlement is active (#1880) via NachoSoto (@NachoSoto)
4.12.0
Bugfixes
watchOS: fixed crash when ran on single-target apps with Xcode 14 and beforewatchOS 9.0(#1895) via NachoSoto (@NachoSoto)CustomerInfoManager/OfferingsManager: improved display of underlying errors (#1888) via NachoSoto (@NachoSoto)Offering: improved confusing log forPackageType.custom(#1884) via NachoSoto (@NachoSoto)PurchasesOrchestrator: don't log warning ifallowSharingAppStoreAccountsetting was never explicitly set (#1885) via NachoSoto (@NachoSoto)- Introduced type-safe
PurchasesErrorand fixed some incorrect returned error types (#1879) via NachoSoto (@NachoSoto) CustomerInfoManager: fixed thread-unsafe implementation (#1878) via NachoSoto (@NachoSoto)
New Features
- Disable SK1's
StoreKitWrapperif SK2 is enabled and available (#1882) via NachoSoto (@NachoSoto) Sendablesupport (#1795) via NachoSoto (@NachoSoto)
Other Changes
- Renamed
StoreKitWrappertoStoreKit1Wrapper(#1886) via NachoSoto (@NachoSoto) - Enabled
DEAD_CODE_STRIPPING(#1887) via NachoSoto (@NachoSoto) HTTPClient: addedX-Client-Bundle-IDand logged on SDK initialization (#1883) via NachoSoto (@NachoSoto)- add link to SDK reference (#1872) via Andy Boedo (@aboedo)
- Added
StoreKit2Setting.shouldOnlyUseStoreKit2(#1881) via NachoSoto (@NachoSoto) - Introduced
TestLogHandlerto simplify how we test logged messages (#1858) via NachoSoto (@NachoSoto) Integration Tests: added test for purchasingStoreProductinstead ofPackage(#1875) via NachoSoto (@NachoSoto)ErrorUtils: added test to verify that returned errors can be converted toErrorCode(#1871) via NachoSoto (@NachoSoto)
4.11.0
Bugfixes
- Fixed crash on
asyncSK1 cancelled purchase (#1869) via NachoSoto (@NachoSoto)
New Features
- Added
beginRefundRequestoverload with completion block (#1861) via NachoSoto (@NachoSoto)
Other Changes
- Skip release if needed and adds automatic release to PR title and body (#1870) via Cesar de la Vega (@vegaro)
4.10.3
Bugfixes
TrialOrIntroPriceEligibilityChecker: return.noIntroOfferExistsif the product has no introductory offer (#1859) via NachoSoto (@NachoSoto)watchOS: fixed crash on single-target apps (#1849) via NachoSoto (@NachoSoto)
Other Changes
- Update fastlane-plugin-revenuecat_internal and fix release-train job (#1866) via Cesar de la Vega (@vegaro)
- fix typo in comment (#1863) via Andy Boedo (@aboedo)
- Use Dangerfile repository (#1864) via Cesar de la Vega (@vegaro)
CircleCI: added job for building SDK withSPM(#1860) via NachoSoto (@NachoSoto)Lock: changed default implementation to useNSLock(#1819) via NachoSoto (@NachoSoto)Offering/StoreProductType:Sendableconformance (#1826) via NachoSoto (@NachoSoto)ReceiptParser: Sendableconformance (#1825) via NachoSoto (@NachoSoto)CustomerInfo: Sendableconformance (#1824) via NachoSoto (@NachoSoto)- Added
Collection.onlyElement(#1857) via NachoSoto (@NachoSoto) - README updates (#1856) via rglanz-rc (@rglanz-rc)
IntegrationTests: actually fail test if tests aren't configured (#1855) via NachoSoto (@NachoSoto)Configuration.with(usesStoreKit2IfAvailable:): removed "experimental" warning (#1845) via NachoSoto (@NachoSoto)- Build fix- Update package requirements for MagicWeather (#1852) via Joshua Liebowitz (@taquitos)
Fastfile:test_tvoslane had duplicate parameter (#1846) via NachoSoto (@NachoSoto)
4.10.2
Bugfixes
ErrorResponse: don't add attribute errors to message if empty (#1844) via NachoSoto (@NachoSoto)- Purchase cancellations: unify behavior between SK1 and SK2 (#1841) via NachoSoto (@NachoSoto)
- StoreKit 2:
PurchasesOrchestrator: don't log "purchased product" if it was cancelled (#1840) via NachoSoto (@NachoSoto) Backend: fixed potential race conditions introduced byOperationDispatcher.dispatchOnWorkerThread(withRandomDelay:)(#1827) via NachoSoto (@NachoSoto)DeviceCache:Sendableconformance and fixed thread-safety (#1823) via NachoSoto (@NachoSoto)- Directly send delegate customer info when delegate is set (always sends cached CustomerInfo value) (#1828) via Josh Holtz (@joshdholtz)
SystemInfo.finishTransactions: made thread-safe (#1807) via NachoSoto (@NachoSoto)Purchases.sharedandPurchases.isConfiguredare now thread-safe (#1813) via NachoSoto (@NachoSoto)PriceFormatterProvider: Sendableconformance and fixed thread-safety (#1818) via NachoSoto (@NachoSoto)StoreKitConfigTestCase.changeStorefront: re-enabled on iOS 16 (#1811) via NachoSoto (@NachoSoto)
Other Changes
DeviceCache: no longer set cache timestamp before beginning request (#1839) via NachoSoto (@NachoSoto)MagicWeatherSwiftUI: updated to useasyncAPIs (#1843) via NachoSoto (@NachoSoto)- Release train (#1842) via Cesar de la Vega (@vegaro)
- Adds hotfixes section to RELEASING doc (#1837) via Cesar de la Vega (@vegaro)
- Update fastlane plugin (#1838) via Toni Rico (@tonidero)
- Update migration doc from didReceiveUpdatedCustomerInfo to receivedUpdatedCustomerInfo (#1836) via Josh Holtz (@joshdholtz)
PurchasesDelegate: added test for latest cached customer info always being sent (#1830) via NachoSoto (@NachoSoto)CallbackCache: Sendableconformance (#1835) via NachoSoto (@NachoSoto)CallbackCache: simplified implementation usingAtomic(#1834) via NachoSoto (@NachoSoto)PurchasesLogInTests: added test to verifylogInupdates offerings cache (#1833) via NachoSoto (@NachoSoto)- Created
PurchasesLoginTests(#1832) via NachoSoto (@NachoSoto) SwiftLint: cleaned up output (#1821) via NachoSoto (@NachoSoto)- Link to sdk reference (#1831) via aboedo (@aboedo)
Atomic: ExpressibleByBooleanLiteral(#1822) via NachoSoto (@NachoSoto)SwiftLint: fixed build warning (#1820) via NachoSoto (@NachoSoto)- Adds an approval job that will tag the release (#1815) via Cesar de la Vega (@vegaro)
Atomic: ExpressibleByNilLiteral(#1804) via NachoSoto (@NachoSoto)PurchasesAttributionDataTests: fixed potential race condition in flaky test (#1805) via NachoSoto (@NachoSoto)- Fixed warnings for unnecessary
try(#1816) via NachoSoto (@NachoSoto) - Moved
AttributionFetcherErrorinsideAttributionFetcher(#1808) via NachoSoto (@NachoSoto) - Update documentation for presentCodeRedemptionSheet (#1817) via Joshua Liebowitz (@taquitos)
Dangerfile: added "next_release" as supported label (#1810) via NachoSoto (@NachoSoto)- PurchaseTester- Update Podfile.lock (#1814) via Joshua Liebowitz (@taquitos)
- Update to latest fastlane plugin (#1802) via Toni Rico (@tonidero)
- Clean up: moved
BackendIntegrationTests.xctestplantoTestPlansfolder (#1812) via NachoSoto (@NachoSoto) SK2StoreProduct: conditionally removed@availableworkaround (#1794) via NachoSoto (@NachoSoto)SwiftLint: fixed deprecation warning (#1809) via NachoSoto (@NachoSoto)- Update gems (#1791) via Joshua Liebowitz (@taquitos)
- Replace usages of replace_in with replace_text_in_files action (#1803) via Toni Rico (@tonidero)
4.10.1
Bugfixes
- Directly send delegate customer info when delegate is set (always sends cached CustomerInfo value) (#1828) via Josh Holtz (@joshdholtz)
4.10.0
New Features
- New AdServices Integration (#1727) via Josh Holtz (@joshdholtz)
Bugfixes
OfferingsManager: expose underlying error whenProductsManagerreturns an error (#1792) via NachoSoto (@NachoSoto)- Add missing logs to ProductsFetcherSK2 (#1780) via beylmk (@beylmk)
Other Changes
- AdServices: Fix failing tests on main in iOS 12 and 13 - IOSAttributionPosterTests (#1797) via Josh Holtz (@joshdholtz)
- Invalidates gem caches and separates danger and macOS caches (#1798) via Cesar de la Vega (@vegaro)
- Pass CircleCI branch to prepare_next_version job (#1796) via Toni Rico (@tonidero)
- Configure Danger, enforce labels (#1761) via Cesar de la Vega (@vegaro)
- Support for new fastlane internal plugin for automation (#1779) via Toni Rico (@tonidero)
4.9.1
Fixes:
CustomerInfoResponseHandler: returnCustomerInfoinstead of error if the response was successful (#1778) via NachoSoto (@NachoSoto)- Error logging:
logErrorIfNeededno longer prints message if it's the same as the error description (#1776) via NachoSoto (@NachoSoto) - fix another broken link in docC docs (#1777) via aboedo (@aboedo)
- fix links to restorePurchase (#1775) via aboedo (@aboedo)
- fix getProducts docs broken link (#1772) via aboedo (@aboedo)
Improvements:
Logger: wrapmessagein@autoclosureto avoid creating whenLogLevelis disabled (#1781) via NachoSoto (@NachoSoto)
Other changes:
- Lint: fixed
SubscriberAttributesManager(#1774) via NachoSoto (@NachoSoto)
4.9.0
- Update Configuration.swift to include platformInfo. Used by PurchasesHybridCommon (#1760) via Joshua Liebowitz (@taquitos)
4.8.0
New API
EntitlementInfo: addedisActiveInCurrentEnvironmentandisActiveInAnyEnvironment(#1755) via NachoSoto (@NachoSoto)
Other Changes
- Plumb platformInfo in Configuration for PHC use (#1757) via Joshua Liebowitz (@taquitos)
- added a log when
autoSyncPurchasesis disabled (#1749) via aboedo (@aboedo) - Re-fetch cached offerings and products after Storefront changes (3/4) (#1743) via Juanpe Catalán (@Juanpe)
bug_report.md: clarify SK2 support (#1752) via NachoSoto (@NachoSoto)logErrorIfNeeded: also log message if present (#1754) via NachoSoto (@NachoSoto)
4.7.0
Changes:
- Replaced
CustomerInfo.nonSubscriptionTransactionswith a new non-StoreTransactiontype (#1733) via NachoSoto (@NachoSoto) Purchases.configure: added overload taking aConfiguration.Builder(#1720) via NachoSoto (@NachoSoto)- Extract Attribution logic out of Purchases (#1693) via Joshua Liebowitz (@taquitos)
- Remove create alias (#1695) via Joshua Liebowitz (@taquitos)
All attribution APIs can now be accessed from Purchases.shared.attribution.
Improvements:
- Improved purchasing logs, added promotional offer information (#1725) via NachoSoto (@NachoSoto)
PurchasesOrchestrator: don't log attribute errors if there are none (#1742) via NachoSoto (@NachoSoto)FatalErrorUtil: don't overridefatalErroron release builds (#1736) via NachoSoto (@NachoSoto)SKPaymentTransaction: added more context to warnings about missing properties (#1731) via NachoSoto (@NachoSoto)- New SwiftUI Purchase Tester example (#1722) via Josh Holtz (@joshdholtz)
- update docs for
showManageSubscriptions(#1729) via aboedo (@aboedo) PurchasesOrchestrator: unify finish transactions between SK1 and SK2 (#1704) via NachoSoto (@NachoSoto)SubscriberAttribute: converted intostruct(#1648) via NachoSoto (@NachoSoto)CacheFetchPolicy.notStaleCachedOrFetched: added warning to docstring (#1708) via NachoSoto (@NachoSoto)- Clear cached offerings and products after Storefront changes (2/4) (#1583) via Juanpe Catalán (@Juanpe)
ROT13: optimized initialization and removed magic numbers (#1702) via NachoSoto (@NachoSoto)
Fixes:
logIn/logOut: sync attributes before aliasing (#1716) via NachoSoto (@NachoSoto)Purchases.customerInfo(fetchPolicy:): actually usefetchPolicyparameter (#1721) via NachoSoto (@NachoSoto)PurchasesOrchestrator: fix behavior dealing withnilSKPaymentTransaction.productIdentifierduring purchase (#1680) via NachoSoto (@NachoSoto)PurchasesOrchestrator.handlePurchasedTransaction: always refresh receipt data (#1703) via NachoSoto (@NachoSoto)
4.6.1
Bug fixes
EntitlementInfo.isActivereturns true ifrequestDate == expirationDate(#1684) via beylmk (@beylmk)- Fixed usages of
seealso(#1689) via NachoSoto (@NachoSoto) - Fixed
ROT13.stringthread-safety (#1686) via NachoSoto (@NachoSoto) PurchasesOrchestrator: replaced calls tosyncPurchaseswith posting receipt for an individual product during SK2 purchases (#1666) via NachoSoto (@NachoSoto)
4.6.0
This release is compatible with Xcode 14 beta 1
New Features
EntitlementInfos: addedactiveInAnyEnvironmentandactiveInCurrentEnvironment(#1647) via NachoSoto (@NachoSoto)
In addition to EntitlementInfos.active, two new methods are added to allow detecting entitlements from sandbox and production environments:
customerInfo.entitlements.activeInCurrentEnvironment
customerInfo.entitlements.activeInAnyEnvironment
Bug fixes
MacDevice: changed usage ofkIOMasterPortDefaultto fix Catalyst compilation on Xcode 14 (#1676) via NachoSoto (@NachoSoto)Result.init(value:error:): avoid creating error if value is provided (#1672) via NachoSoto (@NachoSoto)
4.5.2
This version supports Xcode 14 beta 1
PurchasesOrchestrator.handleDeferredTransaction: checkNSError.domaintoo (#1665) via NachoSoto (@NachoSoto)PurchasesOrchestrator: replaced manualLockwithAtomic(#1664) via NachoSoto (@NachoSoto)CodableStrings.decoding_error: added underlying error information (#1668) via NachoSoto (@NachoSoto)- Fixed Xcode 14 compilation: avoid
@availableproperties (#1661) via NachoSoto (@NachoSoto)
4.5.1
Fixes
- Fix an issue where entitlement identifiers and product identifiers would get converted to snake case and returned as empty. https://github.com/RevenueCat/purchases-ios/pull/1651 https://github.com/RevenueCat/purchases-ios/issues/1650
4.5.0
New Features
Purchases.customerInfo(): added overload with a newCacheFetchPolicy(#1608) via NachoSoto (@NachoSoto)Storefront: addedsk1CurrentStorefrontfor Objective-C (#1614) via NachoSoto (@NachoSoto)
Bug Fixes
- Fix for not being able to read receipts on watchOS (#1625) via Patrick Busch (@patrickbusch)
Other Changes
- Added tests for
PurchasesOrchestratorinvokinglistenForTransactionsonly if SK2 is enabled (#1618) via NachoSoto (@NachoSoto) PurchasesOrchestrator: removedlazyhack for properties with@available(#1596) via NachoSoto (@NachoSoto)PurchasesOrchestrator.purchase(sk2Product:promotionalOffer:): simplified implementation with new operator (#1602) via NachoSoto (@NachoSoto)
4.4.0
New Features
- Added new API key validation (#1581) via NachoSoto (@NachoSoto)
- Sending
X-Is-Sandboxheader in API requests (#1582) via NachoSoto (@NachoSoto) - Added
AmazonStoretoStoreenum (#1586) via Will Taylor (@fire-at-will) - Added
Configurationobject and API to configure Purchases (#1556) via Joshua Liebowitz (@taquitos) - Exposed
shouldShowPriceConsentonPurchasesDelegate(#1520) via Joshua Liebowitz (@taquitos)
Fixes
ManageSubscriptionsHelper: fixed discrepancy betweenSystemInfo.isAppleSubscription(managementURL:)andSystemInfo.appleSubscriptionsURL(#1607) via NachoSoto (@NachoSoto)PurchasesOrchestrator: don't listen for StoreKit 2 transactions if it's disabled (#1593) via NachoSoto (@NachoSoto)- Added tests and fix to ensure
RawDataContainerincludes all data (#1565) via NachoSoto (@NachoSoto) - Added obsoletion for
DeferredPromotionalPurchaseBlock(#1600) via NachoSoto (@NachoSoto) StoreKit 2purchases: don't throw when purchase is cancelled (#1603) via NachoSoto (@NachoSoto)- Ensure
SubscriptionPeriods are represented as 1week instead of 7days (#1591) via Will Taylor (@fire-at-will) PurchaseStrings: fixed transaction message formatting (#1571) via NachoSoto (@NachoSoto)willRenewupdate comment for lifetime will be false (#1579) via Josh Holtz (@joshdholtz)SK1StoreProductDiscount: handleSKProductDiscount.priceLocalebeingniland createdStoreKitWorkarounds(#1545) via NachoSoto (@NachoSoto)- Fixed
ErrorUtils.logDecodingError(#1539) via NachoSoto (@NachoSoto)
Other changes
GetIntroEligibilityOperation: replaced response parsing withDecodable(#1576) via NachoSoto (@NachoSoto)PostOfferForSigningOperation: changed response parsing to usingDecodable(#1573) via NachoSoto (@NachoSoto)- Converted
CustomerInfoand related types to useCodable(#1496) via NachoSoto (@NachoSoto) MagicWeatherSwiftUI: fixed usage ofPurchaseDelegate(#1601) via NachoSoto (@NachoSoto)- Added tests for
PeriodType/PurchaseOwnershipType/Store(#1558) via NachoSoto (@NachoSoto) - Fix description of
StoreTransaction(#1584) via aboedo (@aboedo) - Prepare the codebase to listen to the Storefront changes (1/4) (#1557) via Juanpe Catalán (@Juanpe)
Purchases.canMakePayments: moved implementation toStoreKitWrapper(#1580) via NachoSoto (@NachoSoto)BackendGetIntroEligibilityTests: fixed test that was passing before anything ran (#1575) via NachoSoto (@NachoSoto)PeriodType/PurchaseOwnershipType/Store: conform toEncodable(#1551) via NachoSoto (@NachoSoto)- Improved
EntitlementInfosTests(#1547) via NachoSoto (@NachoSoto) ProductRequestData: addedStorefrontfor receipt posting (#1505) via NachoSoto (@NachoSoto)- Added
RawDataContainerconformances to APITesters (#1550) via NachoSoto (@NachoSoto) - Simplified
EntitlementInfo.isEqual(#1548) via NachoSoto (@NachoSoto) CustomerInfo: moved deprecated property toDeprecations(#1549) via NachoSoto (@NachoSoto)PackageType: simplifiedtypesByDescriptionand implementedCustomDebugStringConvertible(#1531) via NachoSoto (@NachoSoto)
4.3.0
API updates:
- Introduced new
Storefronttype to abstract SK1'sSKStorefrontand SK2'sStoreKit.Storefront. - Exposed
Storefront.currentStorefront. - Added new
ErrorCode.offlineConnectionErrorto differenciate offline errors versus the more generic.networkError. - Added
Purchases-setFirebaseAppInstanceIDto allow associating RevenueCat users with Firebase. - Added
Purchases.setPushTokenStringas an overload toPurchases.setPushToken. - Renamed
PurchasesDelegate.purchases(_:shouldPurchasePromoProduct:defermentBlock:)toPurchasesDelegate.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
setMixpanelDistinctIDas a convenience method for setting the required attribute for the Mixpanel integration #1397 -
getPromotionalOfferhas been deprecated in favor ofpromotionalOffer#1405 -
getEligiblePromotionalOffershas been deprecated in favor ofeligiblePromotionalOffers#1405 -
StoreProductDiscountnow includes thenumberOfPeriodsproperty #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 singleStoreProduct. https://github.com/RevenueCat/purchases-ios/pull/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. https://github.com/RevenueCat/purchases-ios/pull/1362 -
Made
StoreProductinitializers public so they can be used for testing.
Other:
-
Added auto-fix-it for
invalidatePurchaserInfoCacherename https://github.com/RevenueCat/purchases-ios/pull/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!!
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
- See our RevenueCat V4 API update doc for API updates.
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.
- See our RevenueCat V4 API update doc for API updates.
RC 4 introduces the following updates:
API changes:
Breaking changes:
- Replaced
checkPromotionalDiscountEligibilitywithgetPromotionalOffer, which returns aPromotionalOffer. - Renamed
Purchases/purchase(package:discount:)and its variants toPurchases/purchase(package:promotionalOffer:). They now take aPromotionalOfferinstead of aStoreProductDiscount. - [Objective-C only]: Updated type of
StoreProduct.priceandStoreProductDiscount.pricefromNSDecimalto the much more usefulNSDecimalNumber.
Additions:
- Added
StoreProduct.ProductType, andStoreProduct.ProductCategory, which provide extra information about whether a product is a consumable, non-consumable, auto-renewable or non-auto-renewable subscription. - Added
currencyCodetoStoreProductandStoreProductDiscount. - Added
localizedPriceStringtoStoreProductDiscount.
Documentation:
- Documentation can be found in https://revenuecat-docs.netlify.app/documentation/Revenuecat.
- We've made several improvements to docstrings and added a few landing pages for the most important sections of the SDK.
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.
- See our RevenueCat V4 API update doc for API updates.
RC 3 introduces the following updates:
API changes:
- Added
setCleverTapID, for integration with CleverTap. - Added
.noIntroOfferExistsas anIntroEligibilityStatus, 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:
- Documentation can be found in https://revenuecat-docs.netlify.app/documentation/Revenuecat.
- We've made several improvements to docstrings and added a few landing pages for the most important sections of the SDK.
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.
- See our RevenueCat V4 API update doc for API updates.
RC 2 introduces the following updates:
API changes:
- Removed
SubscriptionPeriod.Unit.unknown. Subscriptions with emptySubscriptionPeriodvalues will havenilsubscriptionPeriodinstead. - 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:
- Documentation is now using DocC and it can be found in https://revenuecat-docs.netlify.app/documentation/Revenuecat.
- We've made several improvements to docstrings and added a few landing pages for the most important sections of the SDK.
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.
- See our RevenueCat V4 API update doc for API updates.
RC 1 introduces the following updates:
API changes:
-
Purchases.paymentDiscount(forProductDiscount:product:completion:)andPurchases.paymentDiscount(forProductDiscount:product:)have been removed. Now, instead of obtaining theSKPaymentDiscountfrom aSKProductDiscountto then callpurchase(package:discount:), you check eligibility for the promo offer by callingcheckPromotionalDiscountEligibility(forProductDiscount:product:), then get theStoreProductDiscountdirectly from theStoreProductand pass that intopurchase(package:discount:). -
StoreProductandStoreProductDiscount, replaceSKProductandSKProductDiscountin 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.introductoryPricehas been renamed toStoreProduct.introductoryDiscount -
StoreTransactionnow includesquantity -
Renamed
Purchases.restoreTransactionstoPurchases.restorePurchases -
Lowered
StoreProduct.introductoryDiscountavailability to iOS 11.2 and equivalent OS versions -
Added several
@availableannotations 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.
- See our RevenueCat V4 API update doc for API updates.
Beta 10 introduces the following updates:
Breaking changes:
- A new type,
StoreTransaction, replacesSKPaymentTransactionin 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.PromotionalOfferhas been renamed toStoreProduct.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.
- See our RevenueCat V4 API update doc for API updates.
Breaking changes:
identify, previously deprecated, has been removed in favor oflogIn.reset, previously deprecated, has been removed in favor oflogOut.Package.producthas been replaced withPackage.storeProduct. This is an abstraction of StoreKit 1'sSKProductand StoreKit 2'sStoreKit.Product, but it also adds useful features likepricePerMonthandpriceFormatter. The underlying objects from StoreKit are available throughStoreProduct.sk1ProductandStoreProduct.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 tofalse), to use StoreKit 2 APIs for purchases instead of StoreKit 1.
Async / Await alternative APIs
- In purchases-ios v3,
Async/Awaitalternative APIs were made available through Xcode's auto-generation for Objective-C projects. This beta re-adds theAsync/Awaitalternative 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 themanagementURL, 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
useStoreKit2IfAvailableparameter tosetup(defaults tofalse). 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
verboseLogHandlerorverboseLogsto 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
useStoreKit2IfAvailableinsetupor set it tofalse.
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
- Eighth beta for RevenueCat framework 🎉 100% Swift framework + ObjC support.
- See our RevenueCat V4 API update doc for API updates.
- Replaced custom DateFormatter with new ISO8601DateFormatter https://github.com/RevenueCat/purchases-ios/pull/998
- Put CustomerInfo Logging into LoginHandler function https://github.com/RevenueCat/purchases-ios/pull/1095
- Pass underlying NSError localizedDescription https://github.com/RevenueCat/purchases-ios/pull/1077
- ErrorCode conforms to CustomNSError to provide description https://github.com/RevenueCat/purchases-ios/pull/1022
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 https://github.com/RevenueCat/purchases-ios/pull/943
- Log when duplicate subscription time lengths exist during Offering init https://github.com/RevenueCat/purchases-ios/pull/954
- PurchasesOrchestrator.paymentDiscount(forProductDiscount:product:completion:): improved error information https://github.com/RevenueCat/purchases-ios/pull/957
- Make a public rawData a thing for all our datatypes https://github.com/RevenueCat/purchases-ios/pull/956
- Detect ErrorCode.productAlreadyPurchasedError when SKError.unknown is actually caused by it https://github.com/RevenueCat/purchases-ios/pull/965
4.0.0-beta.6
- Sixth beta for RevenueCat framework 🎉 100% Swift framework + ObjC support.
- See our RevenueCat V4 API update doc for API updates.
- Add more specific backend error subcodes https://github.com/RevenueCat/purchases-ios/pull/927
4.0.0-beta.5
- Fifth beta for RevenueCat framework 🎉 100% Swift framework + ObjC support.
- See our RevenueCat V4 API update doc for API updates.
- Improve error handling for backend errors https://github.com/RevenueCat/purchases-ios/pull/922
- Replaced #file with #fileID https://github.com/RevenueCat/purchases-ios/pull/921
- Rename a few public APIs to reduce confusion https://github.com/RevenueCat/purchases-ios/pull/917
4.0.0-beta.4
- Fourth beta for RevenueCat framework 🎉 100% Swift framework + ObjC support.
- See our RevenueCat V4 API update doc for API updates.
- Purchaser to Customer rename https://github.com/RevenueCat/purchases-ios/pull/878 https://github.com/RevenueCat/purchases-ios/pull/899
- Ensure restoreTransactions called on main thread https://github.com/RevenueCat/purchases-ios/pull/908
- Fix logging messages for HTTPClient https://github.com/RevenueCat/purchases-ios/pull/901
- Offerings completion not called in edge case https://github.com/RevenueCat/purchases-ios/pull/879
- Fix Offerings:completion: not returning if SKProductsRequest hangs https://github.com/RevenueCat/purchases-ios/pull/909
- Added setAirshipChannelID https://github.com/RevenueCat/purchases-ios/pull/869 https://github.com/RevenueCat/purchases-ios/pull/877
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
createAliasandidentifycalls 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->completionacross 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
createAliasandidentifyto avoid sending multiple calls with same parameters at the same time https://github.com/RevenueCat/purchases-ios/pull/874
3.12.4
- Updated
getOfferingscall to be performed serially instead of concurrently. https://github.com/RevenueCat/purchases-ios/pull/831
3.12.3
- Fixed a bug where checkTrialOrIntroductoryPriceEligibility would return
eligiblefor products that don't have intro pricing https://github.com/RevenueCat/purchases-ios/pull/679 - Calls to
addAttributionwill now automatically get translated intosubscriberAttributeshttps://github.com/RevenueCat/purchases-ios/pull/609 - Updated links to community and support in
README.mdhttps://github.com/RevenueCat/purchases-ios/commit/209615b9b8b4dc29ad37f51bf211e3710a2fe443 - Excluded swift migration tasks in stale issue detection https://github.com/RevenueCat/purchases-ios/pull/698 https://github.com/RevenueCat/purchases-ios/pull/702
3.12.2
- Fixed a bug where calling setDebugLogsEnabled(false) enables debug logs when it should not. https://github.com/RevenueCat/purchases-ios/pull/663
3.12.1
- Fixed an issue in some versions of Xcode where compiling would fail with
Definition conflicts with previous valueinETagManager.swifthttps://github.com/revenuecat/purchases-ios/pull/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.logInuses a new backend endpoint. - Introduces
logOut, a replacement forreset.
Deprecations
-
deprecates
createAliasin favor oflogIn -
deprecates
identifyin favor oflogIn -
deprecates
resetin favor oflogOut -
deprecates
allowSharingAppStoreAccountin favor of dashboard-side configurationhttps://github.com/RevenueCat/purchases-ios/pull/453 https://github.com/RevenueCat/purchases-ios/pull/438 https://github.com/RevenueCat/purchases-ios/pull/506
Other changes:
Public additions
SharedPurchases nullability
- Fixed
sharedPurchasesnullability - Introduced new property,
isConfigured, that can be used to check whether the SDK has been configured andsharedPurchaseswon't benil. https://github.com/RevenueCat/purchases-ios/pull/508
Improved log handling
- Added new property
logLevel, which provides more granular settings for the log level. Valid values aredebug,info,warnanderror. - Added new method,
setLogHandler, which allows developers to use their own code to handle logging, and integrate their existing systems. https://github.com/RevenueCat/purchases-ios/pull/481 https://github.com/RevenueCat/purchases-ios/pull/515
Deprecations
- Deprecated
debugLogsEnabledproperty in favor ofLogLevel. UsePurchases.logLevel = .debugas a replacement.
Other
- Fixed CI issues with creating pull requests https://github.com/RevenueCat/purchases-ios/pull/504
- Improved Github Issues bot behavior https://github.com/RevenueCat/purchases-ios/pull/507
- Added e-tags to reduce network traffic usage https://github.com/RevenueCat/purchases-ios/pull/509
- Fixed a warning in Xcode 13 with an outdated path in Package.swift https://github.com/RevenueCat/purchases-ios/pull/522
- Switched to Swift Package Manager for handling dependencies for test targets. https://github.com/RevenueCat/purchases-ios/pull/527
- Removed all
fatalErrors from the codebase https://github.com/RevenueCat/purchases-ios/pull/529 https://github.com/RevenueCat/purchases-ios/pull/527 - Updated link for error message when UserDefaults are deleted outside the SDK https://github.com/RevenueCat/purchases-ios/pull/531
- Improved many of the templates and added
CODE_OF_CONDUCT.mdto make contributing easier https://github.com/RevenueCat/purchases-ios/pull/534 https://github.com/RevenueCat/purchases-ios/pull/537 https://github.com/RevenueCat/purchases-ios/pull/589
3.11.1
- Updates log message for
createAliasto improve clarity https://github.com/RevenueCat/purchases-ios/pull/498 - Adds
rc_to all Foundation extensions to prevent name collisions https://github.com/RevenueCat/purchases-ios/pull/500
3.11.0
- Exposes
ownershipTypeinEntitlementInfo, which can be used to determine whether a given entitlement was shared by a family member or purchased directly by the user. https://github.com/RevenueCat/purchases-ios/pull/483 - Adds new
RCConfigurationErrortype, which will be thrown when SDK configuration errors are detected. https://github.com/RevenueCat/purchases-ios/pull/494
3.10.7
- Obfuscates calls to
AppTrackingTransparencyto prevent unnecessary rejections for kids apps when the framework isn't used at all. https://github.com/RevenueCat/purchases-ios/pull/486
3.10.6
- Fix automatic Apple Search Ads Attribution collection for iOS 14.5 https://github.com/RevenueCat/purchases-ios/pull/473
- Fixed
willRenewvalues for consumables and promotionals https://github.com/RevenueCat/purchases-ios/pull/475 - Improves tests for EntitlementInfos https://github.com/RevenueCat/purchases-ios/pull/476
3.10.5
- Fixed a couple of issues with
.xcframeworkoutput in releases https://github.com/RevenueCat/purchases-ios/pull/470 https://github.com/RevenueCat/purchases-ios/pull/469 - Fix Carthage builds from source, so that end customers can start leveraging XCFramework support for Carthage >= 0.37 https://github.com/RevenueCat/purchases-ios/pull/471
3.10.4
- Added .xcframework output to Releases, alongside the usual fat frameworks. https://github.com/RevenueCat/purchases-ios/pull/466
- Added PurchaseTester project, useful to test features while working on
purchases-ios. https://github.com/RevenueCat/purchases-ios/pull/464 - Renamed the old
SwiftExampleproject toLegacySwiftExampleto encourage developers to use the new MagicWeather apps https://github.com/RevenueCat/purchases-ios/pull/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. https://github.com/RevenueCat/purchases-ios/pull/463
3.10.3
- Added SwiftUI sample app https://github.com/RevenueCat/purchases-ios/pull/457
- Fixed a bug where
🍎‼️ Invalid Product Identifierswould show up even in the logs even when no invalid product identifiers were requested. https://github.com/RevenueCat/purchases-ios/pull/456
3.10.2
- Re-added
RCReceiptInUseByOtherSubscriberError, but with a deprecation warning, so as not to break existing apps. https://github.com/RevenueCat/purchases-ios/pull/452
3.10.1
- Enables improved logging prefixes so they're easier to locate. https://github.com/RevenueCat/purchases-ios/pull/441 https://github.com/RevenueCat/purchases-ios/pull/443
- Fixed issue with Prepare next version CI job, which was missing the install gems step. https://github.com/RevenueCat/purchases-ios/pull/440
3.10.0
- Adds a new property
simulateAsksToBuyInSandbox, that allows developers to test deferred purchases easily. https://github.com/RevenueCat/purchases-ios/pull/432 https://github.com/RevenueCat/purchases-ios/pull/436 - Slight optimization so that offerings and purchaserInfo are returned faster if they're cached. https://github.com/RevenueCat/purchases-ios/pull/433 https://github.com/RevenueCat/purchases-ios/issues/401
- Revamped logging strings, makes log messages from
Purchaseseasier to spot and understand. RemovedRCReceiptInUseByOtherSubscriberError, replaced byRCReceiptAlreadyInUseError. https://github.com/RevenueCat/purchases-ios/pull/426 https://github.com/RevenueCat/purchases-ios/pull/428 https://github.com/RevenueCat/purchases-ios/pull/430 https://github.com/RevenueCat/purchases-ios/pull/431 https://github.com/RevenueCat/purchases-ios/pull/422 - Fix deploy automation bugs when preparing the next version PR https://github.com/RevenueCat/purchases-ios/pull/434 https://github.com/RevenueCat/purchases-ios/pull/437
3.9.2
- Fixed issues when compiling with Xcode 11 or earlier https://github.com/RevenueCat/purchases-ios/pull/416
- Fixed termination warnings for finished SKRequests https://github.com/RevenueCat/purchases-ios/pull/418
- Fixed CI deploy bugs https://github.com/RevenueCat/purchases-ios/pull/421
- Prevents unnecessary backend calls when the appUserID is an empty string https://github.com/RevenueCat/purchases-ios/pull/414
- Prevents unnecessary POST requests when the JSON body can't be correctly formed https://github.com/RevenueCat/purchases-ios/pull/415
- Updates git commit pointer for SPM Integration tests https://github.com/RevenueCat/purchases-ios/pull/412
3.9.1
- Added support for
SKPaymentQueue'sdidRevokeEntitlementsForProductIdentifiers:, so entitlements are automatically revoked from a family-shared purchase when a family member leaves or the subscription is canceled. https://github.com/RevenueCat/purchases-ios/pull/413 - Added support for automated deploys https://github.com/RevenueCat/purchases-ios/pull/411
- Fixed Xcode direct integration failing on Mac Catalyst builds https://github.com/RevenueCat/purchases-ios/pull/419
3.9.0
- Added support for StoreKit Config Files and StoreKitTest testing https://github.com/RevenueCat/purchases-ios/pull/407
- limit running integration tests to tags and release branches https://github.com/RevenueCat/purchases-ios/pull/406
- added deployment checks https://github.com/RevenueCat/purchases-ios/pull/404
3.8.0
- Added a silent version of restoreTransactions, called
syncPurchases, meant to be used by developers performing migrations for other systems. https://github.com/RevenueCat/purchases-ios/pull/387 https://github.com/RevenueCat/purchases-ios/pull/403 - Added
presentCodeRedemptionSheet, which allows apps to present code redemption sheet for offer codes https://github.com/RevenueCat/purchases-ios/pull/400 - Fixed sample app on macOS, which would fail to build because the watchOS app was embedded into it https://github.com/RevenueCat/purchases-ios/pull/402
3.7.6
- Fixed a race condition that could cause a crash after deleting and reinstalling the app https://github.com/RevenueCat/purchases-ios/pull/383
- Fixed possible overflow when performing local receipt parsing on 32-bit devices https://github.com/RevenueCat/purchases-ios/pull/384
- Fixed string comparison when deleting synced subscriber attributes https://github.com/RevenueCat/purchases-ios/pull/385
- Fixed docs-deploy job https://github.com/RevenueCat/purchases-ios/pull/386
- Fixed a typo in a RCPurchases.h https://github.com/RevenueCat/purchases-ios/pull/380
3.7.5
- Move test dependencies back to carthage https://github.com/RevenueCat/purchases-ios/pull/371 https://github.com/RevenueCat/purchases-ios/pull/373
- fixed tests for iOS < 12.2 https://github.com/RevenueCat/purchases-ios/pull/372
- Make cocoapods linking dynamic again https://github.com/RevenueCat/purchases-ios/pull/374
3.7.4
- Fix parsing of dates in receipts with milliseconds https://github.com/RevenueCat/purchases-ios/pull/367
- Add jitter and extra cache for background processes https://github.com/RevenueCat/purchases-ios/pull/366
- Skip install to fix archives with direct integration https://github.com/RevenueCat/purchases-ios/pull/364
3.7.3
- Renames files with names that caused issues when building on Windows https://github.com/RevenueCat/purchases-ios/pull/362
- Fixes crash when parsing receipts with an unexpected number of internal containers in an IAP ASN.1 Container https://github.com/RevenueCat/purchases-ios/pull/360
- Fixes crash when sending
NSNullattributes toaddAttributionData:fromNetwork:https://github.com/RevenueCat/purchases-ios/pull/359 - Added starter string constants file for logging https://github.com/RevenueCat/purchases-ios/pull/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. https://github.com/RevenueCat/purchases-ios/pull/353 - Fixes Catalyst builds and build warnings https://github.com/RevenueCat/purchases-ios/pull/352 https://github.com/RevenueCat/purchases-ios/pull/351
3.7.1
- Fix 'Invalid bundle' validation error when uploading builds to App Store using Carthage or binary https://github.com/RevenueCat/purchases-ios/pull/346
3.7.0
- Attribution V2:
- Deprecated
addAttributionData:fromNetwork:andaddAttributionData:fromNetwork:forNetworkUserId:in favor ofsetAdjustId,setAppsflyerId,setFbAnonymousId,setMparticleId- Added support for OneSignal viasetOnesignalId- AddedsetMediaSource,setCampaign,setAdGroup,setAd,setKeyword,setCreative, andcollectDeviceIdentifiershttps://github.com/RevenueCat/purchases-ios/pull/321 https://github.com/RevenueCat/purchases-ios/pull/340 https://github.com/RevenueCat/purchases-ios/pull/331 - Prevent unnecessary receipt posts https://github.com/RevenueCat/purchases-ios/pull/323
- Improved migration process for legacy Mac App Store apps moving to Universal Store https://github.com/RevenueCat/purchases-ios/pull/336
- Added new SKError codes for Xcode 12 https://github.com/RevenueCat/purchases-ios/pull/334 https://github.com/RevenueCat/purchases-ios/pull/338
- Renamed StoreKitConfig schemes https://github.com/RevenueCat/purchases-ios/pull/329
- Fixed an issue where cached purchaserInfo would be returned after invalidating purchaserInfo cache https://github.com/RevenueCat/purchases-ios/pull/333
- Fix cocoapods and carthage release scripts https://github.com/RevenueCat/purchases-ios/pull/324
- Fixed a bug where
checkIntroTrialEligibilitywouldn't return when calling it from an OS version that didn't support intro offers https://github.com/RevenueCat/purchases-ios/pull/343
3.6.0
- Fixed a race condition with purchase completed callbacks https://github.com/RevenueCat/purchases-ios/pull/313
- Made RCTransaction public to fix compiling issues on Swift Package Manager https://github.com/RevenueCat/purchases-ios/pull/315
- Added ability to export XCFrameworks https://github.com/RevenueCat/purchases-ios/pull/317
- Cleaned up dispatch calls https://github.com/RevenueCat/purchases-ios/pull/318
- Created a separate module and framework for the Swift code https://github.com/RevenueCat/purchases-ios/pull/319
- Updated release scripts to be able to release the new Pod as well https://github.com/RevenueCat/purchases-ios/pull/320
- Added a local receipt parser, updated intro eligibility calculation to perform on device first https://github.com/RevenueCat/purchases-ios/pull/302
- Fix crash when productIdentifier or payment is nil. https://github.com/RevenueCat/purchases-ios/pull/297
- Fixes ask-to-buy flow and will now send an error indicating there's a deferred payment. https://github.com/RevenueCat/purchases-ios/pull/296
- Fixes application state check on app extensions, which threw a compilation error. https://github.com/RevenueCat/purchases-ios/pull/303
- Restores will now always refresh the receipt. https://github.com/RevenueCat/purchases-ios/pull/287
- New properties added to the PurchaserInfo to better manage non-subscriptions. https://github.com/RevenueCat/purchases-ios/pull/281
- Bypass workaround in watchOS 7 that fixes watchOS 6.2 bug where devices report wrong
appStoreReceiptURLhttps://github.com/RevenueCat/purchases-ios/pull/330 - Fix bug where 404s in subscriber attributes POST would mark them as synced https://github.com/RevenueCat/purchases-ios/pull/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. https://github.com/RevenueCat/purchases-ios/pull/327
3.5.2
- Feature/defer cache updates if woken from push notification https://github.com/RevenueCat/purchases-ios/pull/288
3.5.1
- Removes all references to ASIdentifierManager and advertisingIdentifier. This should help with some Kids apps being rejected https://github.com/RevenueCat/purchases-ios/pull/286
- Fix for posting wrong duration P0D on consumables https://github.com/RevenueCat/purchases-ios/pull/289
3.5.0
- Added a sample watchOS app to illustrate how to integrate in-app purchases on watchOS with RevenueCat https://github.com/RevenueCat/purchases-ios/pull/263
- Fixed build warnings from Clang Static Analyzer https://github.com/RevenueCat/purchases-ios/pull/265
- Added StoreKit Configuration files for local testing + new schemes configured to use them. https://github.com/RevenueCat/purchases-ios/pull/267 https://github.com/RevenueCat/purchases-ios/pull/270
- Added GitHub Issue Templates https://github.com/RevenueCat/purchases-ios/pull/269
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. https://github.com/RevenueCat/purchases-ios/pull/258 - Added
managementURLto 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. https://github.com/RevenueCat/purchases-ios/pull/259 - Extra fields sent to the post receipt endpoint:
normal_duration,intro_durationandtrial_duration. These will feed into the LTV model for more accurate LTV values. https://github.com/RevenueCat/purchases-ios/pull/256 - Fixed a bug where if the
appUserIDwas not found inNSUserDefaultsandcreateAliaswas called, the SDK would create an alias to(null). https://github.com/RevenueCat/purchases-ios/pull/255 - Added mParticle as an option for attribution. https://github.com/RevenueCat/purchases-ios/pull/251
- Fixed build warnings for Mac Catalyst https://github.com/RevenueCat/purchases-ios/pull/247
- Simplified Podspec and minor cleanup https://github.com/RevenueCat/purchases-ios/pull/248
3.3.1
- Fixed version numbers that accidentally included the
-SNAPSHOTsuffix
3.3.0
- Reorganized file system structure for the project https://github.com/RevenueCat/purchases-ios/pull/242
- New headers for observer mode and platform version https://github.com/RevenueCat/purchases-ios/pull/237 https://github.com/RevenueCat/purchases-ios/pull/240 https://github.com/RevenueCat/purchases-ios/pull/241
- Fixes subscriber attributes migration edge cases https://github.com/RevenueCat/purchases-ios/pull/233
- Autodetect appUserID deletion https://github.com/RevenueCat/purchases-ios/pull/232 https://github.com/RevenueCat/purchases-ios/pull/236
- Removes old trello link https://github.com/RevenueCat/purchases-ios/pull/231
- Removes unused functions https://github.com/RevenueCat/purchases-ios/pull/228
- Removes unnecessary no-op call to RCBackend's postSubscriberAttributes https://github.com/RevenueCat/purchases-ios/pull/227
- Fixes a bug where subscriber attributes are deleted when an alias is created. https://github.com/RevenueCat/purchases-ios/pull/222
- Fixes crash when payment.productIdentifier is nil https://github.com/RevenueCat/purchases-ios/pull/226
- Updates invalidatePurchaserInfoCache docs https://github.com/RevenueCat/purchases-ios/pull/223
3.2.2
- Fixed build warnings about nil being passed to callees that require non-null parameters https://github.com/RevenueCat/purchases-ios/pull/216
3.2.1
- Fixed build warnings on tvOS and API availability checks https://github.com/RevenueCat/purchases-ios/pull/212
3.2.0
- Added support for WatchOS and tvOS, fixed some issues with pre-processor macro checks on different platforms. https://github.com/RevenueCat/purchases-ios/pull/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 asNSData *, but rather asNSString *. https://github.com/RevenueCat/purchases-ios/pull/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.
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. https://github.com/RevenueCat/purchases-ios/pull/196
- Fixed an issue where the completion block of
purchaserInfoWithCompletionwould get called more than once if cached information existed and was stale. https://github.com/RevenueCat/purchases-ios/pull/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: https://github.com/RevenueCat/purchases-ios/pull/200
3.0.4
- Fixed an issue where Swift Package Manager didn't pick up the new Caching group from 3.0.3 https://github.com/RevenueCat/purchases-ios/issues/176
3.0.3
- Added new method to invalidate the purchaser info cache, useful when promotional purchases are granted from outside the app. https://github.com/RevenueCat/purchases-ios/pull/168
- Made sure we dispatch offerings, and purchaser info https://github.com/RevenueCat/purchases-ios/pull/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
makePurchasemethods. Replaces withpurchasePackage - Deprecates
entitlementsmethod. Replaces withofferings - 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 https://github.com/RevenueCat/purchases-ios/issues/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
isAnonymousproperty toPurchases.shared - Improved offline use
- The
2.6.1
- Support for Swift Package Manager
- Adds a conditional to protect against nil products or productIdentifier (https://github.com/RevenueCat/purchases-ios/pull/129)
2.6.0
- Deprecates
activeEntitlementsinRCPurchaserInfoand addsentitlementsobject toRCPurchaserInfo. For more info look into https://docs.revenuecat.com/docs/purchaserinfo
2.5.0
- BREAKING CHANGE: fixed a typo in
addAttributionDataSwift's name. - Error logs for AppsFlyer if using deprecated
rc_appsflyer_id - Error logs for AppsFlyer if missing networkUserID
2.4.0
- BUGFIX:
userIdparameter in identify is not nullable anymore. - DEPRECATION:
automaticAttributionCollectionis now deprecated in favor ofautomaticAppleSearchAdsAttributionCollectionsince 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
addAttributionis now a class method that can be called before the SDK is configured.addAttributionwill automatically add therc_idfaandrc_idfvparameters if theAdSupportandUIKitframeworks are included, respectively.- A network user identifier can be send to the
addAttributionfunction, replacing the previousrc_appsflyer_idparameter. - Apple Search Ad attribution can be automatically collected by setting the
automaticAttributionCollectionboolean totruebefore the SDK is configured. - Adds an optional configuration boolean
observerMode. This will set the value offinishTransactionsat 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 jacob@revenuecat.com 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 ofRCPurchaserInfo. Useful if your app needs the latest purchaser info. - Removed
makePurchase:quantity:. - Add
nonConsumablePurchasesonRCPurchaserInfo. Non-consumable purchases will now Just Work (tm).
0.6.0
- Add support for promotional purchases.
- Adds support for
appUserIds with non-url compatable characters
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, nowRCPurchasesfetches updated purchaser info automatically onUIApplicationDidBecomeActive. - Remove
purchasingKVO property
0.1.0
- Initial version
- Requires access to the private beta, email jacob@revenuecat.com for a key.
