跳转到内容

清单文件

Tuist 默认使用 Swift 文件作为定义项目和工作空间以及配置生成过程的主要方式。这些文件在文档中被称为清单文件

使用 Swift 的决定受到了 Swift Package Manager 的启发,它也使用 Swift 文件来定义包。由于使用了 Swift,我们可以利用编译器来验证内容的正确性,并在不同的清单文件中重用代码,同时利用 Xcode 的语法高亮、自动补全和验证功能提供一流编辑体验。

::: info 缓存

由于清单文件是需要编译的 Swift 文件,Tuist 会缓存编译结果以加快解析过程。因此,你可能注意到第一次运行 Tuist 时生成项目可能需要稍长时间。后续运行会更快。

:::

Project.swift 清单声明了一个 Xcode 项目。该项目在与清单文件相同的目录中生成,名称由 name 属性指定。

Project.swift
let project = Project(
name: "App",
targets: [
// ....
]
)

::: warning 根级变量

清单根级唯一应该存在的变量是 let project = Project(...)。如果需要在清单的各个部分重用代码,可以使用 Swift 函数。

:::

默认情况下,Tuist 会生成一个包含正在生成的项目及其依赖项目的 Xcode 工作空间。如果出于任何原因你想自定义工作空间以添加额外的项目或包含文件和组,可以通过定义 Workspace.swift 清单来实现。

Workspace.swift
import ProjectDescription
let workspace = Workspace(
name: "App-Workspace",
projects: [
"./App", // 包含 Project.swift 文件的目录路径
]
)

::: info

Tuist 会解析依赖图并将依赖的项目包含在工作空间中。你不需要手动包含它们。这是构建系统正确解析依赖所必需的。

:::

多项目或单项目 {#multi-or-monoproject}

Section titled “多项目或单项目 {#multi-or-monoproject}”

一个常见的问题是应该使用工作空间中的单个项目还是多个项目。在没有 Tuist 的世界里,单项目设置会导致频繁的 Git 冲突,因此鼓励使用工作空间。然而,由于我们不建议将 Tuist 生成的 Xcode 项目包含在 Git 仓库中,Git 冲突不是问题。因此,使用工作空间中的单个项目还是多个项目取决于你自己。

在 Tuist 项目中,我们倾向于使用单项目,因为冷启动生成时间更快(需要编译的清单文件更少),并且我们使用 project description helpers 作为封装单元。然而,你可能希望使用 Xcode 项目作为封装单元来表示应用的不同领域,这更符合 Xcode 推荐的 项目结构。

Tuist 提供合理的默认值来简化项目配置。但是,你可以通过在项目根目录定义 Tuist.swift 来自定义配置,Tuist 用它来确定项目的根目录。

import ProjectDescription
let tuist = Tuist(
project: .tuist(generationOptions: .options(enforceExplicitDependencies: true))
)