从 Tuist v3 到 v4
随着 Tuist 4 的发布,我们借此机会对项目进行了一些突破性的改动,我们相信从长远来看,这些改动将使项目更易于使用和维护。本文档概述了从 Tuist 3 升级到 Tuist 4 时需要对项目做出的更改。
通过tuistenv 放弃版本管理
在 Tuist 4 之前,安装脚本会安装一个工具tuistenv ,在安装时会更名为tuist 。该工具将负责安装和激活 Tuist 版本,以确保跨环境的确定性。为了减少 Tuist 的功能面,我们决定放弃tuistenv ,转而使用 Mise,该工具可完成相同的工作,但更加灵活,可用于不同的工具。如果您使用的是tuistenv ,则必须卸载当前版本的 Tuist,方法是运行curl -Ls https://uninstall.tuist.io | bash ,然后使用您选择的安装方法安装。我们强烈推荐使用 Mise,因为它能在不同环境中确定性地安装和激活版本。
代码组
bash
curl -Ls https://uninstall.tuist.io | bash:::
CI 环境和 XCODE 项目中的 MISE 警告
如果您决定全面接受 Mise 带来的确定性,我们建议您查看有关如何在 CI 环境和 Xcode 项目中使用 Mise 的文档。
:::
支持主页信息
请注意,您仍然可以使用Homebrew来安装Tuist,这是一款适用于macOS的流行软件包管理器。您可以在安装指南中找到如何使用 Homebrew 安装 Tuist 的说明。
:::
从ProjectDescription 模型丢弃init 构造函数
为了提高 API 的可读性和表现力,我们决定从ProjectDescription 模型中移除init 构造函数。现在,每个模型都提供了一个静态构造函数,您可以用它来创建模型的实例。如果您正在使用init 构造函数,则必须更新您的项目以使用静态构造函数。
提示命名大会
我们遵循的命名惯例是使用模型的名称作为静态构造函数的名称。例如,Target 模型的静态构造函数是Target.target 。
:::
将--no-cache 更名为--no-binary-cache
由于--no-cache 标志含糊不清,我们决定将其更名为--no-binary-cache ,以明确它指的是二进制缓存。如果使用--no-cache 标志,则必须更新项目,改用--no-binary-cache 标志。
将tuist fetch 更名为tuist install
我们将tuist fetch 命令更名为tuist install ,以便与行业惯例保持一致。如果使用tuist fetch 命令,则必须更新项目,改用tuist install 命令。
采用Package.swift 作为依赖项的 DSL
在 Tuist 4 之前,您可以在Dependencies.swift 文件中定义依赖关系。这种专有格式破坏了 Dependabot 或 Renovatebot 等工具对自动更新依赖关系的支持。此外,它还为用户带来了不必要的间接性。因此,我们决定将Package.swift 作为在 Tuist 中定义依赖关系的唯一方式。如果您使用Dependencies.swift 文件,则必须将Tuist/Dependencies.swift 中的内容移至Package.swift 的根目录,并使用#if TUIST 指令配置集成。有关如何集成 Swift 软件包依赖项的更多信息,请参阅此处。
将tuist cache warm 更名为tuist cache
为简洁起见,我们决定将tuist cache warm 命令更名为tuist cache 。如果使用tuist cache warm 命令,则必须更新项目,改用tuist cache 命令。
将tuist cache print-hashes 重命名为tuist cache --print-hashes
我们决定将tuist cache print-hashes 命令更名为tuist cache --print-hashes ,以明确它是tuist cache 命令的一个标志。如果您使用的是tuist cache print-hashes 命令,则必须更新您的项目,改用tuist cache --print-hashes 标志。
移除缓存配置文件
在 Tuist 4 之前,您可以在Tuist/Config.swift 中定义缓存配置文件,其中包含缓存的配置。我们决定移除这一功能,因为在生成过程中,如果使用的配置文件与生成项目时使用的配置文件不同,可能会导致混淆。此外,它还可能导致用户使用调试配置文件来构建应用程序的发布版本,从而导致意想不到的结果。为此,我们引入了--configuration 选项,用于指定生成项目时要使用的配置。如果使用缓存配置文件,则必须更新项目,使用--configuration 选项。
已移除--skip-cache ,改为使用参数
我们从生成 命令中移除了--skip-cache 标志,转而使用参数来控制哪些目标应跳过二进制缓存。如果使用--skip-cache 标志,则必须更新项目以使用参数。
代码组
bash
tuist generate --skip-cache Foobash
tuist generate Foo:::
已删除的签名功能。
社区工具(如 Fastlane 和 Xcode 本身)已经解决了签名问题,它们在这方面做得更好。我们认为签名只是 Tuist 的一个延伸目标,最好将重点放在项目的核心功能上。如果您正在使用 Tuist 签名功能,其中包括对版本库中的证书和配置文件进行加密,并在生成时将其安装到正确的位置,那么您可能希望在项目生成前运行的脚本中复制这一逻辑。特别是
- 脚本会使用存储在文件系统或环境变量中的密钥解密证书和配置文件,并将证书安装到钥匙串中,将配置文件安装到
~/Library/MobileDevice/Provisioning\ Profiles目录中。 - 该脚本可对现有配置文件和证书进行加密。
提示签名要求
签名需要在钥匙串中安装正确的证书,并在~/Library/MobileDevice/Provisioning\ Profiles 目录中安装预配置文件。您可以使用security 命令行工具在钥匙串中安装证书,并使用cp 命令将供应配置文件复制到正确的目录。
:::
通过Dependencies.swift 删除迦太基集成
在 Tuist 4 之前,迦太基的依赖关系可以定义在Dependencies.swift 文件中,然后用户可以通过运行tuist fetch 来获取。我们还认为这是 Tuist 的一个扩展目标,特别是考虑到未来 Swift 包管理器将成为管理依赖关系的首选方式。如果您使用 Carthage 依赖项,则必须直接使用Carthage 将预编译框架和 XCFrameworks 拉入 Carthage 的标准目录,然后使用TargetDependency.xcframework 和TargetDependency.framework 从您的标签中引用这些二进制文件。
信息 CARTHAGE 仍然得到支持
有些用户认为我们放弃了对 Carthage 的支持。我们没有。Tuist 与 Carthage 输出之间的契约是系统存储框架和 XCFrameworks。唯一改变的是谁负责获取依赖关系。以前是 Tuist 通过 Carthage,现在是 Carthage。
:::
已删除TargetDependency.packagePlugin API
在 Tuist 4 之前,您可以使用TargetDependency.packagePlugin 案例来定义包插件依赖关系。在看到 Swift 包管理器引入了新的包类型后,我们决定对 API 进行迭代,使其更灵活、更面向未来。如果您正在使用TargetDependency.packagePlugin ,则必须使用TargetDependency.package ,并将您要使用的包类型作为参数传递。
已删除的废弃 API(已停用的 API
我们删除了 Tuist 3 中被标记为过时的 API。 如果您正在使用任何过时的 API,则必须更新您的项目以使用新的 API。
