id = "tuist" name = "Tuist" homepage = "https://tuist.dev" description = "Tuist is a virtual platform team for Swift app devs who ship." # The site's own apple-touch-icon, 180x180. icon = "https://tuist.dev/apple-touch-icon.png" executables = ["tuist"] # The CLI is built for Apple platforms and Linux — cli/Sources/TuistServer/ # Utilities/ServerCredentialsStore.swift compiles a file-backed store for macOS # and Linux and a Keychain-backed one for the other Apple platforms. platforms = ["macos", "linux"] [dotfiles] # Nothing to sync as content: a Tuist project is configured by Tuist.swift and # Project.swift inside the repository. The only thing the CLI writes to the home # directory is the session below. paths = [] # cli/Sources/TuistEnvironment/Environment.swift: `cacheDirectory` is # XDG_CACHE_HOME (or ~/.cache) + "tuist" and `stateDirectory` is XDG_STATE_HOME # (or ~/.local/state) + "tuist" — build cache and run state. The cache is # `[xdgCache]`, the XDG half of the pair: tuist uses the XDG cache directory on # macOS too rather than ~/Library/Caches, so the variable is honoured instead # of its default. The state directory keeps its literal spelling because no # named base directory stands for XDG_STATE_HOME. exclude = [ "[xdgCache]/tuist/", "~/.local/state/tuist/", ] # cli/Sources/TuistServer/Utilities/ServerCredentialsStore.swift: # credentialsFilePath(serverURL:) returns # `/credentials/.json`, and configDirectory in # cli/Sources/TuistEnvironment/Environment.swift is XDG_CONFIG_HOME (or # ~/.config) + "tuist" — `[configHome]`, the XDG location on macOS as well, so # the variable is honoured instead of its default. One file per server host, # so the name is a glob — # `tuist.dev.json` for the hosted server, another for a self-hosted one. # # The file is a JSON ServerCredentials and nothing else: `accessToken` and # `refreshToken`, both JWTs for the signed-in account. secret = ["[configHome]/tuist/credentials/*.json"] [commands] format = 1 label = "Tuist" description = "Xcode project generator. Forms cover generate, build, test and clean." quality = "ai-draft" base = "fig:tuist" parser = { end_of_options = "--", interleave = "permute", long_equals = true, short_attached = true, short_bundles = false } [[commands.source]] id = "fig" kind = "completion" url = "https://github.com/withfig/autocomplete/blob/master/src/tuist.ts" license = "MIT" [[commands.subcommand]] path = ["generate"] label = "Generate workspace" description = "Generate an Xcode workspace from the manifests." [[commands.subcommand.source]] id = "fig" kind = "completion" url = "https://github.com/withfig/autocomplete/blob/master/src/tuist.ts" license = "MIT" [[commands.subcommand.field]] id = "sources" label = "Targets to focus" description = "Other targets are linked as binaries if possible." type = "string" position = 0 multiple = true sources = ["fig"] [[commands.subcommand.field]] id = "path" label = "Project directory" type = "path" option = ["--path", "-p"] path = { kind = "directory", role = "input" } sources = ["fig"] [[commands.subcommand.field]] id = "no_open" label = "Do not open" type = "boolean" option = ["--no-open", "-n"] sources = ["fig"] [[commands.subcommand.field]] id = "xcframeworks" label = "Use xcframeworks" type = "boolean" option = ["--xcframeworks", "-x"] sources = ["fig"] [[commands.subcommand.field]] id = "no_cache" label = "Ignore cache" type = "boolean" option = ["--no-cache"] sources = ["fig"] [[commands.subcommand.field]] id = "profile" label = "Cache profile" type = "string" option = ["--profile", "-P"] sources = ["fig"] [[commands.subcommand.task]] id = "generate" label = "Generate" fields = ["sources", "path", "no_open"] required = [] [[commands.subcommand.task]] id = "generate-nocache" label = "Generate without cache" set = { no_cache = [true] } fields = ["sources", "no_cache"] required = [] [[commands.subcommand.group]] id = "basic" label = "Basic" fields = ["sources", "path", "no_open", "no_cache"] [[commands.subcommand.group]] id = "advanced" label = "Advanced" fields = ["xcframeworks", "profile"] [[commands.subcommand]] path = ["build"] label = "Build" description = "Build schemes of the project in the current directory." [[commands.subcommand.source]] id = "fig" kind = "completion" url = "https://github.com/withfig/autocomplete/blob/master/src/tuist.ts" license = "MIT" [[commands.subcommand.field]] id = "scheme" label = "Scheme" type = "string" position = 0 sources = ["fig"] [[commands.subcommand.field]] id = "device" label = "Device" type = "string" option = ["--device"] sources = ["fig"] [[commands.subcommand.field]] id = "os" label = "OS version" type = "string" option = ["--os"] sources = ["fig"] [[commands.subcommand.field]] id = "output" label = "Build output path" type = "path" option = ["--build-output-path"] path = { kind = "directory", role = "output" } sources = ["fig"] [[commands.subcommand.task]] id = "build" label = "Build" fields = ["scheme", "device", "os"] required = [] [[commands.subcommand.group]] id = "basic" label = "Basic" fields = ["scheme", "device", "os"] [[commands.subcommand.group]] id = "advanced" label = "Advanced" fields = ["output"] [[commands.subcommand]] path = ["test"] label = "Test" description = "Run the tests of a scheme." [[commands.subcommand.source]] id = "fig" kind = "completion" url = "https://github.com/withfig/autocomplete/blob/master/src/tuist.ts" license = "MIT" [[commands.subcommand.field]] id = "scheme" label = "Scheme" type = "string" position = 0 sources = ["fig"] [[commands.subcommand.field]] id = "path" label = "Project directory" type = "path" option = ["--path", "-p"] path = { kind = "directory", role = "input" } sources = ["fig"] [[commands.subcommand.field]] id = "clean" label = "Clean first" type = "boolean" option = ["--clean", "-c"] sources = ["fig"] [[commands.subcommand.field]] id = "device" label = "Device" type = "string" option = ["--device", "-d"] sources = ["fig"] [[commands.subcommand.field]] id = "os" label = "OS version" type = "string" option = ["--os", "-o"] sources = ["fig"] [[commands.subcommand.field]] id = "skip_ui" label = "Skip UI tests" type = "boolean" option = ["--skip-ui-tests"] sources = ["fig"] [[commands.subcommand.field]] id = "retry" label = "Retry count" type = "string" option = ["--retry-count"] sources = ["fig"] [[commands.subcommand.task]] id = "test" label = "Test" fields = ["scheme", "device", "os"] required = [] [[commands.subcommand.task]] id = "test-clean" label = "Clean then test" set = { clean = [true] } fields = ["scheme", "clean"] required = [] [[commands.subcommand.group]] id = "basic" label = "Basic" fields = ["scheme", "path", "clean", "device", "os"] [[commands.subcommand.group]] id = "advanced" label = "Advanced" fields = ["skip_ui", "retry"] [[commands.subcommand]] path = ["clean"] label = "Clean" description = "Delete data generated by Tuist." [[commands.subcommand.source]] id = "fig" kind = "completion" url = "https://github.com/withfig/autocomplete/blob/master/src/tuist.ts" license = "MIT" [[commands.subcommand.field]] id = "categories" label = "Categories" description = "Leave empty to clean everything." type = "string" position = 0 multiple = true suggestions = [{ value = "plugins", label = "plugins" }, { value = "builds", label = "builds" }, { value = "tests", label = "tests" }, { value = "manifests", label = "manifests" }] sources = ["fig"] [[commands.subcommand.field]] id = "path" label = "Project directory" type = "path" option = ["--path", "-p"] path = { kind = "directory", role = "input" } sources = ["fig"] [[commands.subcommand.task]] id = "clean" label = "Clean" fields = ["categories", "path"] required = [] [[commands.subcommand.group]] id = "basic" label = "Basic" fields = ["categories", "path"]