Skip to content

Releases: ReactiveCocoa/reactiveswift-composable-architecture

0.42.0

02 Jan 10:44
Compare
Choose a tag to compare

Brings the fork up to date with the upstream TCA release 0.42.0

Please refer to the TCA release notes for 0.42.0.

0.41.2

31 Dec 17:27
Compare
Choose a tag to compare

Brings the fork up to date with the upstream TCA release 0.41.2

Please refer to the TCA release notes for 0.41.0, 0.41.1 and 0.41.2.

0.40.2

31 Dec 17:24
Compare
Choose a tag to compare

Brings the fork up to date with the upstream TCA release 0.40.2

Please refer to the TCA release notes for 0.40.0, 0.40.1 and 0.40.2.

RAS-TCA specific changes

  • Effect now conforms to SignalProducerConvertible, so a public var producer: SignalProducer<Action, Failure> is exposed.

0.39.1

31 Dec 17:15
Compare
Choose a tag to compare

Brings the fork up to date with the upstream TCA release 0.39.1

Please refer to the TCA release notes for 0.39.1 and 0.39.0.

This brings the fork up to date with all the commits from TCA after the Concurrency Beta was merged, then up to version 0.39.1.

Migration notes

Please refer to PR #58 for more details, but the main points can be found below.

⚠️ Breaking changes due to Effect no longer typealiasing SignalProducer ⚠️

This update will cause countless breaking changes in projects as Effect is now a struct that wraps a SignalProducer instead of being a typealias of it. This is not as big of a problem in upstream TCA because Effect is still a Publisher, so all Combine operators will keep working on Effect operation chains, whereas in RAS-TCA they will now break.

We felt that despite being a harder migration path, users will be (forcibly 😅) steered away from SP-based effects in favor of the new async based ones quicker. Deprecation warnings providing fix-its were difficult to add, so please bear with the compiler screaming a bit at you 🙏🏼

ReactiveSwift 7.1 dependency

This release now points to ReactiveSwift 7.1, which already includes async APIs in TestScheduler and DateScheduler.

New SignalProducerConvertible.values Async(Throwing)Stream APIs

In order to use SignalProducers in the async "world", while replicating the existing APIs in Combine, two new
values computed properties in SignalProducerConvertible were added:

  • values: AsyncStream<Value> when Error == Never
  • values: AsyncThrowingStream<Value, Swift.Error> otherwise

0.38.3

09 Aug 10:07
Compare
Choose a tag to compare

Brings the fork up to date with the upstream TCA release 0.38.3

Please refer to the TCA release notes for 0.38.2 and 0.38.3.

This brings the fork up to date with all the commits from TCA before the Concurrency Beta was merged.

The Swift Concurrency changes in TCA are a very significant re-architecture of TCA which make porting these changes to the Reactive Swift fork challenging, to say the least. This is likely to be the last release of this repo for some time.

0.38.1

26 Jun 20:46
Compare
Choose a tag to compare

Brings the fork up to date with the latest upstream TCA release 0.38.1

By implementing a ReactiveSwift version of the CurrentValueRelay in TCA the ViewStore implementation is now much closer to the upstream one.

From upstream TCA

Please refer to the TCA release notes for changes since 0.33.1.

0.33.1

22 Feb 12:10
Compare
Choose a tag to compare

Breaking changes

This release increases the minimum supported Apple OSes to be the same as Combine TCA:

  • iOS 13
  • macOS 10.15
  • tvOS 13
  • watchOS 6

Support for Linux is unchanged.

See this blog post for more details on the reasons.

If you want to continue to use RAS TCA with older OS versions, please use release 0.28.1, which is the last release that supports them.

From upstream TCA

Please refer to the Combine TCA release notes for changes since 0.28.1.

0.28.1

11 Nov 10:01
Compare
Choose a tag to compare

From upstream TCA

This release brings this fork up to date with the upstream library at release 0.28.1. Please refer to the upstream release notes.

An extra commit from upstream was also added: Add actionless CaseLet overload

From TCA 0.28.0

Please refer to the TCA 0.28.0 release notes.

From TCA 0.27.1

Please refer to the TCA 0.27.1 release notes.

0.27.0

12 Sep 12:36
Compare
Choose a tag to compare

RAS-TCA specific changes

Changed: now requires ReactiveSwift 6.7.0 which supports re-entrant signals. This change, which is only used in Store.send means that RAS-TCA now works exactly like the original Combine version and allows recursive calls to .send, which previously would cause a crash on obtaining a Signal lock.

This now means that in the cases where previously you needed to wrap a call to .send in a DispatchQueue.main.async {} wrapper, this is no longer required.

It also means that all performance improvements from TCA have now been able to be ported across 🚀 However this does can cause a potential breaking change as mentioned in the release notes for TCA 0.20.0:

Performance improvement/fix: a store publisher will only emit a single state change per synchronous Store.send and asynchronous effect received. This means synchronous effects (returned immediately from a reducer via Effect.init(value:)) will no longer result in extra publisher emissions. This is a breaking change if your application previously depended on each of these emissions. Workaround: use Publisher.receive(on:) to schedule these effects on the next run loop tick.

The workaround for RAS-TCA is to use .observe(on: QueueScheduler.main) for these situations.

From upstream TCA

This release brings this fork up to date with the upstream library at release 0.27.0:

From TCA 0.23.0

Please refer to the TCA 0.23.0 release notes.

From TCA 0.24.0

Please refer to the TCA 0.24.0 release notes.

From TCA 0.25.0

Please refer to the TCA 0.25.0 release notes.

Note:

Added: the Composable Architecture now uses Custom Dump for its debugging and testing tools. This library improves upon the original debugging/diffing tools that came with earlier versions of the Composable Architecture by collapsing unchanged parts of the diff, and more.

Since Custom Dump requires iOS 13, macOS 10.15 etc, this fork continues with the existing debugDump code in the library and doesn't use Custom Dump. This also means XCTAssertNoDifference is not available in this fork.

From TCA 0.26.0

Please refer to the TCA 0.26.0 release notes.

From TCA 0.27.0

Please refer to the TCA 0.27.0 release notes.

0.22.0

20 Jul 18:24
Compare
Choose a tag to compare

This release brings this fork up to date with the upstream library (finally). It was a tricky one. It was possible to bring over most, but not all, of the performance improvements from the upstream TCA. The ReactiveSwift limitation of not allowing reentrant Signals (which I hope will soon be fixed) is the main reason that not all the performance improvements were able to be migrated.

Note: there is a minor breaking change in this release which is that the parameter names for Effect.throttle (now public) and Effect.debounce have been changed to match their equivalents in the upstream repo.

From TCA 0.19.0:

  • Added: a new overload of Reducer.pullback for working with enum-based state. It uses a case path instead of a writable key path for extracting and embedding state for a particular enum case.
  • Added: a new SwitchStore view for converting stores on enum state into stores on individual enum cases (thanks @lukeredpath for sketching out the original implementation).
  • Changed: Effect.timer now calls cancelInFlight: true under the hood to automatically cancel any in-flight timers with the same cancellable id (thanks @dannyhertz). If you rely on the existing behavior, which allows for timers to interleave and stack on one another, you must manually create these timers using SignalProducer.timer instead before upgrading.
  • Fixed: ForEachStore has been optimized and a crash related to removing rows has been fixed.
  • Fixed: documentation cleanup.
  • Infrastructure: modernized example/demo code, along with assorted fixes (thanks @yimajo, @filblue).

From TCA: 0.20.0

  • Added: Effect.deferred(), for delaying the execution of an effect by a given time (compare to SignalProducer.delay(), which delays merely the delivery of some work that has already been performed). Thanks, @wendyliga.
  • Updated: SwitchStore now supports up to 9 CaseLet views.
  • Performance improvement/fix: the number of times Store.scope's state transform function has been minimized. Previously it was evaluated an extra time, multiplied by downstream scopes.
  • Performance improvement/fix: the number of times ViewStore's duplicate check has been reduced.
  • This change was impossible to implement due to the way ReactiveSwift is implemented internally: Performance improvement/fix: a store publisher will only emit a single state change per synchronous Store.send and asynchronous effect received. This means synchronous effects (returned immediately from a reducer via Effect.init(value:)) will no longer result in extra publisher emissions. If your application previously depended on each of these emissions, use Publisher.receive(on:) to schedule these effects on the next run loop tick.
  • Infrastructure: cleaned up demo apps and documentation; added an Indonesian translation of the README (thanks @wendyliga).

From TCA: 0.21.0

  • As Identified Collections cannot support iOS <13 this library continues to depend on the internal IdentifiedArray, and will do for the foreseeable future. Changed: the Composable Architecture now depends on Identified Collections for IdentifiedArray, which has been rewritten for correctness and performance. There are some breaking changes, which are documented in its release.
  • Changed: Reducer.binding now takes an extract function, not a case path. Case path expressions can still be used, or you can refer to casePath.extract(from:).
  • Changed: TestStore has relaxed its Equatable constraint on Action. It is only required for when TestStore.receives actions from effects.
  • Performance fixed: view stores now perform the minimum number of equality checks necessary (thanks @iampatbrown).
  • Fixed: ViewStore.publisher now emits the current store state, and not the previous state (thanks @maximkrouk, @iampatbrown).
  • Infrastructure: cleaned up recursive case study, web socket case study; added benchmarking target.

From TCA: 0.22.0

  • Added: Effect.throttle can throttle how often its associated action is fed back into the reducer (thanks @kerryknight).
  • This change was not applied, as it forces explicit disposing of any producer of state obtained from a ViewStore, which would be counterintuitive for ReactiveSwift users. Be aware that if a ViewStore is deinitialized, it's producer will no longer emit actions. Fixed: A change in 0.21.0 that prevented store publishers from emitting actions if their view stores were deinitialized. This mainly affected UIKit apps.
  • Fixed: A change in 0.20.0 that could leave an action buffered in the store and emit late (thanks @heyltsjay).