The project is organized in several targets that are defined in the
Package.swift manifest file:
- TuistKit: It contains the commands and Tuist’s business logic.
- TuistEnvKit: It contains the commands and the logic to manage multiple Tuist versions in the environment.
- TuistLoader: Contains models and utilities to load the manifest files from the disk.
- TuistGenerator: It contains all the business logic to read the project definition and generate Xcode projects.
- TuistGalaxy: It contains the business logic for Galaxy-specific features.
- TuistAutomation: It contains the business logic for automation command such as build, test, or lint.
- TuistCore: Contains the models that are specific to the Tuist domain and protocols to allow doing dependency inversion between the features in the layers above.
- TuistSupport: Contains support utilities and extensions that are share across the other targets. They are Tuist-agnostic.
- ProjectManifest: Contains the models that the developers can use to declare their projects in the
- tuist: It’s the actual CLI that exposes the commands defined in
- tuistenv: It’s the CLI of
tuistenv. It exposes the commands defined in
Information - Package.swift
The Package.swift file declares the structure of our project (a Swift package) and the Swift Package Manager uses it to generate the Xcode project and provide us with a set of commands to interact with it, like 'swift build'
Information - Tests
The targets have an associated target that contains the tests. Unit tests are located in the test targets prefixed with Tests, while integration tests are in the ones prefixed with IntegrationTests.
All generic utilities live in the
TuistSupport framework. This section documents some of the utilities and how to use them.
When printing output for the user, this is the utility that should be used over the global
The methods from the public interface take a
PrintableString as an input. Printable strings support interpolating formatted strings. For instance, if we want to tell users they need to run a command, we can do the following:
Printer.shared.print("Please run the folling command to setup the environment: \(.command("tuist up"))")