Getting Started With The Composable Architecture |

Learn how to structure your iOS app with understandable and predictable state changes using Point-Free’s The Composable Architecture (TCA) framework.

This is a companion discussion topic for the original entry at

Great article that hits most of the key features of The Composable Architecture. I am a little bit unsure of SystemEnvironment because its use cuts across modules. It mitigates coupling by using an unconstrained generic to model the sub-environment. However, if you want to put each feature in its own module, I guess you would need to put SystemEnvironment into its own module as well. I wonder if you did something similar to a pullback, you could avoid this. To me, the duplication seems like it might actually be worth it.

Thanks for the article; I learned a lot!

Great stuff! I feel TCA is actually a Redux pattern framework, which gives the easy way for people to leverage this pattern in SwiftUI.

A bit baffled: it seems that the downloadable materials already have all of the steps of the tutorial completed, which make it less useful as a learning tool. Am I missing something?

Hi Sean!

Hope am not too late in replying

I think you used the final version which is there for if you wanted to revise something or fix something

you should use the starter if you wanna code-along, or the final if you just wanna jump into the final version and grab something quickly

Have a great day!

Hi @dpiper,
Thanks for the great Article, really cut thru all the needed stuff to learn TCA

I wanted to ask specifically at something, JSONDecoder

May I know why do we need to explicitly specify JSONDecoder when just using the default or maybe a customized implementation that can be just initiated on need?


It seems that the starter project doesn’t compile anymore. The error message states that the Compostable package is not included.

Managed to resolve this by changing the minimumVersion of the swift-composable-architecture package (opened up the project.pbxproj in an editor, I am old school - this can be also done from the Package Dependencies tab). Afterwards I ran into some compiler errors due to the JSONDecoder and DispatchQueue, these were fixed by importing Foundation and Dispatch accordingly. I am not saying that this is the right way, but it did the work for me.