Copy logo as SVG
Copy wordmark as SVG
Download brand assets
Brand guidelines

Compare your options

XcodeGen vs Tuist: keep XcodeGen, add build infrastructure

Last updated November 12, 2026

XcodeGen generates your Xcode project. Tuist is build infrastructure that makes that project's builds and tests faster and easier to investigate for developers, CI, and coding agents, without migrating off XcodeGen.

What is XcodeGen?

XcodeGen is an open-source, MIT-licensed command-line tool that generates an Xcode project from your folder structure and a project spec. The spec is a YAML or JSON file, project.yml by default, that declares targets, configurations, schemes, build settings, and dependencies on other targets, Swift packages, Carthage frameworks, and SDKs. Teams commonly adopt it to stop committing .xcodeproj files and the merge conflicts that come with them. Its project spec offers include for splitting a spec across files, setting groups, and target and scheme templates for reuse.

What is Tuist?

Tuist is build infrastructure for engineering teams and coding agents: a shared environment where developers, CI, and coding agents build and test. It is not a CI provider, a CI runner, or a coding agent. Many Apple developers first met Tuist as a project generator, and generated projects are still one of its capabilities, but most of Tuist works on whatever Xcode project you already have, including one generated by XcodeGen. XcodeGen and Tuist answer different questions: XcodeGen decides how the project is described, and Tuist works on what happens every time that project is built and tested.

Keep XcodeGen, add Tuist

What you needTuist capabilityWith an XcodeGen project
Stop recompiling code another machine already compiledXcode cache shares Xcode's compilation outputs across developer machines, CI, and agentsYes, with Xcode 26 or later
See where build time goes and when it regressedBuild insights records every build's duration, steps, and cache resultsYes
Find slow and flaky testsTest insights and flaky-test detection keep a shared test historyYes
Share builds for reviewPreviews turn an app build into a link teammates can installYes
Give coding agents the same evidenceThe Tuist MCP server exposes build and test records to authorized agentsYes
Skip unchanged modules entirelyThe module cache replaces unchanged targets with prebuilt binariesRequires a Tuist generated project
Run only the tests a change affectsSelective testing skips unchanged test targetsRequires a Tuist generated project

To connect an XcodeGen project, follow the existing Xcode project guide. Because xcodegen generate rewrites the project, put Tuist's configuration in the spec rather than in Xcode: the compilation-cache build settings that tuist setup cache prints go in the spec's settings or an .xcconfig referenced through configFiles, and the build-insights script goes in the scheme's postActions, with settingsTarget set to your app target.

First experiment

Keep XcodeGen as it is. Record a clean build, the same build on a second machine, and a full test run. Connect the Xcode cache, build insights, and test insights, then repeat the same runs and compare feedback time, total machine usage, and how quickly someone, or an authorized agent, can explain a slow build or a failing test.

Project generation: YAML spec or Swift manifests

Generation is the one place the tools overlap. Both produce standard Xcode projects and workspaces, both let you remove generated projects from Git, and XcodeGen writes projects with XcodeProj, the same library Tuist uses. The difference is the language. XcodeGen describes projects in a YAML or JSON data file and reuses configuration through includes, setting groups, and templates. Tuist describes them in Swift manifests, reuses code through project description helpers, opens them in Xcode with completion and type checking through tuist edit, and keeps an explicit dependency graph it can inspect, for example with tuist inspect dependencies --only implicit.

That graph is what the module cache and selective testing use to hash targets. It is the practical reason to move generation to Tuist, more than the choice of language.

When to migrate

Migrate when the module cache or selective testing would remove work your team repeats today, or when you want to describe projects in Swift. Until then, XcodeGen and Tuist work together. The XcodeGen migration guide walks through the mapping:

  1. Translate project.yml into Project.swift, one target at a time. Targets, configurations, schemes, and build settings map to the same Xcode concepts.
  2. Replace target and scheme templates with project description helpers.
  3. Move Swift package dependencies into Tuist/Package.swift and run tuist install.
  4. Replace xcodegen generate with tuist generate in scripts and CI, then compare the generated project and a clean build against the XcodeGen output.

Large projects can migrate one project or module group at a time. The cache, insights, and previews you already connected keep working throughout.

Frequently asked questions

Is Tuist an Xcode project generator?

Project generation is one Tuist capability, not the product. Tuist is build infrastructure: shared caching, build and test insights, previews, and agent access to build and test evidence. Most of it works with any Xcode project, including one generated by XcodeGen.

Can I use Tuist with an XcodeGen project?

Yes. The Xcode compilation cache, build insights, test insights, flaky-test detection, previews, and the MCP server work with an XcodeGen-generated project. The module cache and selective testing require a Tuist generated project.

Will xcodegen generate overwrite Tuist's setup?

Only if the setup lives in the generated project. Put the compilation-cache build settings in your spec's settings or an xcconfig file, and the build-insights script in the scheme's post-actions, so every regeneration keeps them.

What do I gain by migrating to Tuist generated projects?

The module cache, which replaces unchanged targets with prebuilt binaries, and selective testing, which runs only the test targets a change affects. You also describe the project in Swift instead of YAML.

Are XcodeGen and Tuist open source?

Yes. XcodeGen and the Tuist CLI are both MIT-licensed. Tuist's server features, such as the remote cache and insights, run as a hosted service, and organizations on the Enterprise plan can self-host them.

Sources and review

Sources checked on 2026-11-12. Written by Tuist, not an independent benchmark. XcodeGen facts come from its README, project spec, and releases (2.46.0 at review time). Tuist facts come from the linked documentation. No benchmarks, customer results, or prices are implied.

Explore Cache, Tests, Previews, documentation, pricing, and all comparisons.