We use cookies
This site uses cookies. By continuing to use our site, you agree to use of cookies.
In this blog post we announce the latest version of Tuist, 1.9.0, which introduces significant improvements in the performance of the project generation.
Hi there 👋,
It has been quiet for the past few weeks, but we are back to announce a new release that we just baked, Tuist 1.9.0. As you might have noticed, from this release, we started giving them names. We not only do it for fun, but we think it is easier to remember a release.
1.9.0’s name is Speedy Gonzales, which relates well with one of the most significant improvements with are shipping with this release: faster project generation.
One of the features that make Tuist’s project generation unique at scale is using Swift as a format for the manifest files.
That allows developers to edit their projects using Xcode,
where they can get auto-completion, documentation, and validations.
Moreover,
they can extract pieces of their manifest into a separate framework,
ProjectDescriptionHelpers
,
which they can import and use from their manifest files.
That’s great,
but it comes with costs.
One of those is having to compile the files,
which takes significantly longer than reading a YAML or JSON file from disk.
Kas noticed that and ventured into improving that.
The result of this work is a project generation that is approximately 50% faster. Insane. We achieved that by introducing caching. After the manifest is first compiled, we serialize it and store it as a JSON in the cache. To uniquely identify the manifest in the cache, we hash the content of the manifest as well as other files and metadata the manifest depends on, for example, the project description helpers. If nothing has changed, future project generations will read the JSON instead of using the compiler.
And this is just the beginning. While doing this work, we spotted some other opportunities for improving performance. One of them is loading the dependency graph concurrently using multiple threads. Stay tuned because you’ll hear more about this topic in future updates.
Note that the new caching behavior is enabled by default. If you notice project generation misbehaving, you can disable it by setting the environment variable
TUIST_CACHE_MANIFESTS=0
.
Besides making Tuist faster,
this release also adds support for enabling the main thread checker in schemes.
It used to be enabled by default and we changed the behavior to be an opt-in feature.
If you define your own schemes,
RunAction
and TestAction
have now a new attribute,
diagnosticsOptions
that you can use to enable the main thread checker:
Moreover, we continued working on the Cloud set of features, adding some internal building blocks that will be necesary for collecting insights from your builds, and sending them to a server-side application that processes them.
Tuist 1.9.0 also fixes a bug that caused tuist edit
not to wait while the project was being edited.
and removes the unnecessary CFBundleExecutable
attribute from the auto-generated Info.plist
for bundle targets.
We are working on the following areas:
As always,
you can update Tuist by simply running tuist update
.
We are excited to keep pushing the project forward and making interacting with your projects as easy and fun as possible.
If you want to chat with contributors and other users of Tuist, you can join our community forum. Also, you may consider supporting us on the GitHub Sponsors program and Open Collective. This project is developed by people devoting their spare time, so a token of appreciation means a lot.
I hope you are all safe and wish you all a steady return to the new normal.