Tuist Best Practices
When to use
-
editing Tuist manifests or adding targets
-
updating project structure or shared helpers
-
generating Xcode projects or debugging Tuist behavior
Repo layout
-
root config in Tuist.swift
-
shared helpers in Tuist/ProjectDescriptionHelpers
-
iOS manifest in Project.swift (often under ios/ but not required)
-
prefer repo-provided task runner (just , make , etc.) for generate/build/test/open
-
if using tuist xcodebuild , keep subcommand first to avoid argument reorder issues
Manifests
-
Project.swift : root variable should be let project = Project(...)
-
Workspace.swift optional; Tuist auto-generates workspace with project + dependencies
-
Tuist.swift recommended; Tuist walks up dirs to find it, so running from ios/ still uses root config
Code sharing
-
place helpers in Tuist/ProjectDescriptionHelpers
-
import with import ProjectDescriptionHelpers in manifests
-
helpers available in Project.swift , Workspace.swift , and Package.swift (behind #TUIST )
Caching
-
tuist cache builds binaries; tuist generate/test use binary cache by default when available
-
opt out with --no-binary-cache
-
binary cache is for dev/test, not release builds
Change workflow
-
add targets/settings in Project.swift using helpers
-
after adding files or project changes: run repo generate task (e.g. just generate )
-
avoid running xcodebuild directly
References
- Tuist docs: manifests, directory structure, code sharing, module cache, config (docs.tuist.dev)