Thoughts, reflections, and ideas

Building a Galaxy for your projects

Posted on

I recently started working on extending Tuist's set of functionalities with some features that I refer to as cloud. They are client-side features that require a server-side component to work. For example, insights from your projects, which is a state that needs to be stored somewhere that everyone in the team has access to. Another cloud feature is caching; it transforms the dependency tree and swaps transitive dependencies with their pre-compiled .xcframework. This idea is inspired by Facebook's internal focus command where develpers only get the sources of the targets they plan to work on.

Tuist does not provide a server-side implementation. However, it only defines the contract between the client-side and the server-side REST API: how to authenticate users and projects, what endpoints should be available, and what data is expected and returned from each of them. This gives teams the freedom to provide their own implementation and choose where to store the data.

For those teams that might not have enough resources to develop and maintain their own server, we are developing a project, Galaxy, that offers an easy-to-adopt solution that integrates with services that teams might already be using: Slack and GitHub.

I'm thrilled to work on this project and bring small teams workflows that only large companies can afford having (because they have a tooling/infra team). All of this is possible thanks to the project generation phase that Tuist introduces, and an excellent job that maintainers of the project did envisioning an architecture that allowed extensibility.

I thought Apple would introduce something along these lines in this WWDC, but once again, building SAAS software doesn't seem to be their thing. I'm glad that they are defaulting to .xcframeworks from the Swift Package Manager because we'll ben able to benefit from all the improvements that they add to them. Moreover, they improved the App Store Connect API, which we plan to use to provide another cloud feature: signing on demand.

If these features is something that you'd like to have in your project and you are not sure about the path to get there, feel free to join our Slack group, and we'll be happy to help you.