Skip to content

Xcode cache

Tuist provides support for the Xcode compilation cache, which allows teams to share compilation artifacts by leveraging the build system's caching capabilities.

Setup

REQUIREMENTS

If you don't already have a Tuist account and project, you can create one by running:

bash
tuist init

Once you have a Tuist.swift file referencing your fullHandle, you can set up the caching for your project by running:

bash
tuist setup cache

This command creates a LaunchAgent to run a local cache service on startup that the Swift build system uses to share compilation artifacts. This command needs to be run once in both your local and CI environments.

To set up the cache on the CI, make sure you are authenticated.

Configure Xcode Build Settings

Add the following build settings to your Xcode project:

COMPILATION_CACHE_ENABLE_CACHING = YES
COMPILATION_CACHE_REMOTE_SERVICE_PATH = $HOME/.local/state/tuist/your_org_your_project.sock
COMPILATION_CACHE_ENABLE_PLUGIN = YES

Note that COMPILATION_CACHE_REMOTE_SERVICE_PATH and COMPILATION_CACHE_ENABLE_PLUGIN need to be added as user-defined build settings since they're not directly exposed in Xcode's build settings UI:

SOCKET PATH

The socket path will be displayed when you run tuist setup cache. It's based on your project's full handle with slashes replaced by underscores.

You can also specify these settings when running xcodebuild by adding the following flags, such as:

xcodebuild build -project YourProject.xcodeproj -scheme YourScheme \
    COMPILATION_CACHE_ENABLE_CACHING=YES \
    COMPILATION_CACHE_REMOTE_SERVICE_PATH=$HOME/.local/state/tuist/your_org_your_project.sock \
    COMPILATION_CACHE_ENABLE_PLUGIN=YES

GENERATED PROJECTS

Setting the settings manually is not needed if your project is generated by Tuist.

In that case, all you need is to add enableCaching: true to your Tuist.swift file:

swift
import ProjectDescription

let tuist = Tuist(
    fullHandle: "your-org/your-project",
    url: "https://cloud.tuist.io",
    project: .tuist(
        generationOptions: .options(
            enableCaching: true
        )
    )
)

Released under the MIT License.