All Versions
Latest Version
Avg Release Cycle
77 days
Latest Release

Changelog History
Page 1

  • v6.7.0-rc1 Changes

    🚦 1. New operator SignalProducer.Type.interval(_:interval:on:) for emitting elements from a given sequence regularly. (#810, kudos to @mluisbrown)

    🚦 1. Signal offers two special variants for advanced users: unserialized and reentrant-unserialized. (#797)

    The input observer of these variants assume that mutual exclusion has been enforced by its callers.

    You can create these variants through four Signal static methods: unserialized(_:), unserializedPipe(_:), reentrantUnserialized(_:) and reentrantUnserializedPipe(_:). These would be adopted by ReactiveCocoa UIKit bindings to improve interoperability with Loop, to tackle some legitimate recursive delivery scenarios (e.g. around first responder management), and also to reduce fine-grained locking in ReactiveCocoa.

    Note that the default behavior of Signal has not been changed — event serialization remains the default behavior.

    🚦 1. SignalProducer offers an unserialized variant via SignalProducer.unserialized(_:). (#797)

    ⏱ 1. TestScheduler can now advanced its clock by TimeInterval. (#828, kudos to @carsten-wenderdel)

    🐎 1. Signal and Properties now use fewer locks, which should translate into minor performance improvements. (#797)

    📚 1. Fixed spelling error in Lifetime.Token class documentation. (#835, kudos to @ansonj)

    ♻️ 1. As a continued refactoring effort since ReactiveSwift 6.6.0, all unary Signal and SignalProducer operators have been migrated to a new internal representation.

    When debugging your application, the call stacks involving ReactiveSwift may now look cleaner, without the clutter of compiler-generated reabstraction thunks. See #799 for an example.
  • v6.6.1 Changes

    ⚡️ 1. Updated Carthage xcconfig dependency to 1.1 for proper building arm64 macOS variants. (#826, kudos to @MikeChugunov)

    🚦 1. Fixed issue with SignalProducer.Type.interval() making Swift 5.3 a requirement. (#823 kudos to @mluisbrown)

  • v6.6.0 Changes

    ⏱ 1. Added the SignalProducer.Type.interval() operator for emitting values on a regular schedule. (#810, kudos to @mluisbrown)

    ♻️ 1. When debugging your application, the call stacks involving ReactiveSwift may start to look cleaner and less cryptic. This is an on-going refactoring effort to improve the developer experience. See #799 for an example.

    🚀 1. Bumped deployment target to iOS 9.0, per Xcode 12 warnings. (#818, kudos to @harleyjcooper)

    🗄 1. Fixed a few deprecation warning when the project is being built. (#819, kudos to @apps4everyone)


  • v6.5.0 Changes

    October 27, 2020

    🚀 This is the fifth minor release of ReactiveSwift 6.0.

    ⚡️ ⚠️ ReactiveSwift 6.5.0 is a strongly recommended update , especially for users routinely lifting custom Signal operators to work with SignalProducer.

    🔄 Changes

    🛠 Fixed a SignalProducer.lift issue which may leak intermediate signals. (#808)

    ➕ Add ExpressibleByNilLiteral constraint to OptionalProtocol (#805, kudos to @nkristek)

    ➕ Add variadic sugar for boolean static methods such as Property.any(boolProperty1, boolProperty2, boolProperty3) (#801, kudos to @fortmarek)

  • v6.4.0 Changes

    September 29, 2020

    🚀 This is the forth minor release of ReactiveSwift 6.

    🔄 Changes

    🚀 Minimum deployment target is now iOS 9.0+ when using Swift Package Manager, so as to silence Xcode 12 warnings. (#802)

    🛠 Fix a debug assertion in Lock.try() that could be raised in earlier OS versions (< iOS 10.0, < macOS 10.12). (#747, #788)

    Specifically, ReactiveSwift now recognizes EDEADLK as expected error code from pthread_mutex_trylock alongside 0, EBUSY and EAGAIN.

  • v6.3.0 Changes

    May 25, 2020

    🚀 This is the third minor release of ReactiveSwift 6.0.

    ➕ Additions

    Property and MutableProperty can now be used as property wrapper. Note that they remain a reference type container, so it may not be appropriate to use them in types requiring value semantics. (#781)

    class ViewModel { @MutableProperty var count: Int = 0func subscribe() { self.$count.producer.startWithValues { print("`count` has changed to \(count)") } } func increment() { print("count prior to increment: \(count)") self.$count.modify { $0 += 1 } } }

    🚦 When combineLatest or zip over a sequence of SignalProducers or Propertys, you can now specify an optional emptySentinel parameter, which would be used when the sequence is empty.

    ⚡️ This becomes relevant, when the sequence of producers is calculated from some other Signal and the signal resulting from the joined producers is observed. If no value is sent when the sequence is empty, the observer gets terminated silently, and, e.g., the UI would not be updated.

    (#774, kudos to @rocketnik)


    ✅ 1. Test dependencies should no longer be built for SwiftPM users, as a result of ReactiveSwift moving to swft-tools-version: 5.2. (#784)

  • v6.2.1 Changes

    February 28, 2020

    🐎 1. Improved performance of joining signals by a factor of around 5. This enables joining of 1000 and more signals in a reasonable amount of time. 🚦 1. Fixed SignalProducer.debounce operator that, when started more than once, would not deliver values on producers started after the first time. (#772, kudos to @gpambrozio)

    1. FlattenStrategy.throttle is introduced. (#713, kudos to @inamiy) ⚡️ 1. Updated to reflect Swift 5.1 compatibility and point snippets to 6.1.0 (#763, kudos to @Marcocanc) ⚡️ 1. Update travis to Xcode 11.1 and Swift 5.1 (#764, kudos @petrpavlik)
    2. [SwiftPM] Add platforms (#761, kudos to @ikesyo) 🗄 1. Renamed filterMap to compactMap and deprecated filterMap (#746, kudos to @Marcocanc)
  • v6.2.0 Changes

    January 07, 2020

    🔄 Changes

    FlattenStrategy.throttle is introduced. (#713, kudos to @inamiy)

    Given a first inner stream, all subsequent inner streams sent by the upstream would be dropped until the first inner stream has completed. The whole process repeats indefinitely until the upstream terminates. The behavior is akin to throttle(_:on:) except for operating in the domain of streams instead of time.

    📦 The package file of ReactiveSwift now declares supported platforms. (#761, kudos to @ikesyo)

    🗄 Renamed filterMap to compactMap and deprecated filterMap (#746, kudos to @Marcocanc)

  • v6.1.0 Changes

    June 20, 2019

    👌 Support Swift 5.1 and Xcode 11 (#739, thanks @NachoSoto!)

    ➕ Add all and any operators with array of arguments (#735, kudos to @olejnjak)

    let property = Property.any([boolProperty1, boolProperty2, boolProperty3])

    🛠 Fixed Result extensions ambiguity (#733, kudos to @nekrich)

    ➕ Add <~ binding operator to Signal.Observer (#635, kudos to @Marcocanc)

  • v6.0.0 Changes

    April 11, 2019

    🚀 This release drops support for Swift 4.2 (Xcode 10/10.1) and removes the dependency on antitypical/Result. 🎉 (#702, kudos to @NachoSoto and @mdiep)

    ⬆️ Upgrade to 6.0.0

    • 🚚 If you have used Result only as dependency of ReactiveSwift, remove all instances of import Result, import enum Result.NoError or import struct Result.AnyError and remove the Result Framework from your project.
    • 🚦 Replace all cases where NoError was used in a Signal or SignalProducer with Never
    • 🚦 Replace all cases where AnyError was used in a Signal or SignalProducer with Swift.Error