Skip to content

Xcode Build Insights

Working on large projects should not require rebuilding the same code repeatedly. Tuist Build Insights lets you track build analytics so you can identify trends before local and CI build times become bottlenecks.

Build insights are driven by the tuist inspect build command, typically added to your scheme’s post-action.

To start tracking local build times, you can leverage the tuist inspect build command by adding it to your scheme’s post-action:

Post-action for inspecting builds

> > You can execute it in that case by setting `runPostActionsOnFailure` to `YES` in the relevant `project.pbxproj` `BuildAction`: > > ```diff > buildImplicitDependencies="YES" > parallelizeBuildables="YES" > + runPostActionsOnFailure="YES"> > ```

For Mise, activate tuist in the post-action environment:

Terminal window
# -C ensures that Mise loads the configuration from the Mise configuration
# file in the project's root directory.
$HOME/.local/bin/mise x -C $SRCROOT -- tuist inspect build

Once logged in, local builds are tracked and available from the Tuist dashboard:

Dashboard with build insights

> > If you do not want to track build insights in generated schemes, disable it using [buildInsightsDisabled](https://projectdescription.tuist.dev/documentation/projectdescription/tuist).

If you are using generated projects with custom schemes, add post-actions:

let project = Project(
name: "MyProject",
targets: [
// Your targets
],
schemes: [
.scheme(
name: "MyApp",
shared: true,
buildAction: .buildAction(
targets: ["MyApp"],
postActions: [
.executionAction(
title: "Inspect Build",
scriptText: """
$HOME/.local/bin/mise x -C $SRCROOT -- tuist inspect build
""",
target: "MyApp"
)
],
runPostActionsOnFailure: true
),
runAction: .runAction(configuration: "Debug")
)
]
)

If you are not using Mise, simplify to:

buildAction: .buildAction(
targets: ["MyApp"],
postActions: [
.executionAction(
title: "Inspect Build",
scriptText: "tuist inspect build",
target: "MyApp"
)
],
runPostActionsOnFailure: true
)

To track build insights on CI, make sure CI is authenticated.

For Xcodebuild-driven CI you need to:

  • Use tuist xcodebuild when invoking xcodebuild actions.
  • Add -resultBundlePath to your xcodebuild command.

Without -resultBundlePath, required activity logs and result bundles are not generated and tuist inspect build cannot analyze the build.

Build insights can include machine-level performance metrics (CPU, memory, network, and disk usage) captured during the build. To enable this, set up a lightweight background daemon that continuously samples system metrics:

Terminal window
tuist setup insights

This runs a local daemon that samples metrics in the background. The data is picked up automatically by tuist inspect build and uploaded with the build report.

You can attach metadata to builds with environment variables to improve filtering.

VariableFormatDescription
TUIST_BUILD_TAGSComma-separatedMultiple tags in one variable.
TUIST_BUILD_VALUE_*Single valueKey-value pair where suffix is the key.

Set these values in CI or your shell before invoking your build:

Terminal window
export TUIST_BUILD_TAGS="nightly,ios-team,release-candidate"
Terminal window
export TUIST_BUILD_VALUE_TICKET="PROJ-1234"
export TUIST_BUILD_VALUE_PR_URL="https://github.com/myorg/myrepo/pull/123"