Tuist

Supercharge your Xcode development workflows

Effortlessly build, test, and deploy your Xcode projects with Tuist's revolutionary automation and project management features.

Proudly sponsored by

  • Zero Git conficts — in .pbxproj files.

  • Faster Xcode — with focused projects.

  • Faster builds — through local and remote caches.


import ProjectDescription

let project = Project(
    name: "Tuist",
    targets: [
        Target(
            name: "Tuist",
            platform: .iOS,
            product: .app,
            bundleId: "io.tuist.Tuist",
            sources: ["Sources/**"]
        ),
        Target(
            name: "TuistTests",
            platform: .iOS,
            product: .unitTests,
            bundleId: "io.tuist.TuistTests",
            sources: ["Tests/**"],
            dependencies: [.target(name: "Tuist")]
        )
    ]
)

import ProjectDescription

let workspace = Workspace(
    name: "TuistWorkspace",
    projects: [
        "Projects/**",
    ]
)
Tuist powers impactful organizations building game-changing apps
Caching

Turbo-boost your builds: up to 90% faster with built-in caching

We fingerprint targets and dependencies and replace them with pre-built binaries generated from previous builds. And it works with Swift Packages too!

  • Easy Integration

    Unlock simplicity and efficiency with just a compilable project defined using Tuist APIs. Leave the heavy lifting of project mutations to us while you focus on what truly matters.
  • Swift Packages Support

    Most of the time you don't need the sources of your Swift Package dependencies. Therefore we compile them once and cache them for future builds.
  • Remote caching

    Share the cache across local and remote environments (e.g. CI) and save time and money keeping your developers productive.
OUR USERS

So much ❤️ from our users

This is what our users have to say about the tool:

Steve Landey ― Mobile Engineer at Asana

Tuist lets us write our build graph in code and make big changes with little effort. It solves a lot of workflow problems for our team, and it’s fast!
Project Generation

Experience clean, optimized, and conflict-free Xcode projects for effortless maintenance and streamlined development.

FAQS

Fully automated, fully supported

Join the vibrant Tuist community of passionate users, contributors, and maintainers who are ready to support you every step of the way on your journey.

Project generation

While we offer tools to assist in the migration process, automating it reliably can be challenging due to Xcode projects' implicit configurations resolved at build-time. Therefore, we recommend a manual approach, which presents a valuable opportunity to clean up your project and achieve greater consistency.

Unlike other project generation tools, Tuist goes beyond simply generating projects. We view project generation as a means to an end, leveraging the project information to validate, optimize, and automate workflows. With our Swift-based solution, teams are spared the burden of building and maintaining their own tooling upon project generation, ensuring a streamlined and efficient development process.

It's weak. The generated projects don't include any references to Tuist. If you ever decide to move away from Tuist or if we discontinue maintaining the tool, you can simply add the generated Xcode project to your Git repository, and you're good to go. Making it easier for users to transition away from Tuist is a design principle we adhere to.
Cache

To enable caching, you'll need to define your projects with Tuist and ensure that the configuration is explicit. If there are any implicit configurations that Tuist is not aware of, such as build-time linking, the build artifacts won't be cached. Additionally, there may be certain project scenarios that are not handled seamlessly. However, we are more than willing to collaborate with you to iterate and find solutions to make them work effectively.

The process involves generating a fingerprint for each target in the project targets graph, which takes into account their metadata, dependencies on files and other targets. This fingerprint serves as an indicator of whether any changes have occurred and if the target needs to be recompiled. During the generation phase, we check the cache for targets using their fingerprint. If pre-existing binaries are found, we utilize them instead of generating new targets with the corresponding source files.

Absolutely! To achieve this, you'll require a server that adheres to a predefined contract. You have the option to devise your own solution or leverage Tuist Cloud, which not only enables cache sharing but also offers additional useful features for building apps at scale.

Tuist

Need help migrating? Let us help you with that

l