跳转到内容

从 v3 到 v4

随着 Tuist 4 的发布,我们借此机会为项目引入了一些破坏性变更,我们认为这将使项目在长期内更易于使用和维护。本文概述了你需要对项目进行的更改,以从 Tuist 3 升级到 Tuist 4。

在 Tuist 4 之前,安装脚本会安装一个工具 tuistenv,该工具会在安装时重命名为 tuist。该工具负责安装和激活 Tuist 版本,确保跨环境的一致性。为了减少 Tuist 的功能面,我们决定放弃 tuistenv,转而使用 Mise,这是一个做同样工作但更灵活且可用于不同工具的工具。如果你正在使用 tuistenv,你需要通过运行 curl -Ls https://uninstall.tuist.io | bash 卸载当前版本的 Tuist,然后使用你选择的安装方法安装它。我们强烈推荐使用 Mise,因为它能够在不同环境中确定性安装和激活版本。

Terminal window
curl -Ls https://uninstall.tuist.io | bash

ProjectDescription 模型中移除 init 构造函数

Section titled “从 ProjectDescription 模型中移除 init 构造函数”

为了提高 API 的可读性和表达力,我们决定从所有 ProjectDescription 模型中移除 init 构造函数。每个模型现在都提供了一个静态构造函数,你可以用它来创建模型实例。如果你正在使用 init 构造函数,你需要更新项目以使用静态构造函数。

--no-cache 重命名为 --no-binary-cache

Section titled “将 --no-cache 重命名为 --no-binary-cache”

由于 --no-cache 标志有歧义,我们决定将其重命名为 --no-binary-cache,以明确它指的是二进制缓存。如果你正在使用 --no-cache 标志,你需要更新项目以使用 --no-binary-cache 标志。

tuist fetch 重命名为 tuist install

Section titled “将 tuist fetch 重命名为 tuist install”

我们将 tuist fetch 命令重命名为 tuist install,以与行业惯例保持一致。如果你正在使用 tuist fetch 命令,你需要更新项目以使用 tuist install 命令。

在 Tuist 4 之前,你可以在 Dependencies.swift 文件中定义依赖。这种专有格式破坏了 DependabotRenovatebot 等工具的支持,无法自动更新依赖。此外,它为用户引入了不必要的间接层。因此,我们决定采用 Package.swift 作为在 Tuist 中定义依赖的唯一方式。如果你正在使用 Dependencies.swift 文件,你需要将 Tuist/Dependencies.swift 的内容移到根目录的 Package.swift,并使用 #if TUIST 指令来配置集成。你可以在这里阅读更多关于如何集成 Swift 包依赖的信息这里

tuist cache warm 重命名为 tuist cache

Section titled “将 tuist cache warm 重命名为 tuist cache”

为了简洁,我们决定将 tuist cache warm 命令重命名为 tuist cache。如果你正在使用 tuist cache warm 命令,你需要更新项目以使用 tuist cache 命令。

tuist cache print-hashes 重命名为 tuist cache --print-hashes

Section titled “将 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 选项。

移除 generate 命令中的 --skip-cache,改用参数

Section titled “移除 generate 命令中的 --skip-cache,改用参数”

我们从 generate 命令中移除了 --skip-cache 标志,改为通过参数控制哪些 target 应跳过二进制缓存。如果你正在使用 --skip-cache 标志,你需要更新项目以使用参数。

Terminal window
tuist generate --skip-cache Foo
Terminal window
tuist generate Foo

签名已经被 Fastlane 和 Xcode 本身等社区工具解决,它们做得更好。我们认为签名是 Tuist 的一个延伸目标,最好专注于项目的核心功能。如果你正在使用 Tuist 的签名功能(包括在仓库中加密证书和配置文件,并在生成时将它们安装到正确的位置),你可能希望在自己的脚本中复制该逻辑,这些脚本在项目生成之前运行。特别是:

  • 一个使用存储在文件系统或环境变量中的密钥解密证书和配置文件的脚本,并将证书安装到钥匙串,将配置文件复制到目录 ~/Library/MobileDevice/Provisioning\ Profiles
  • 一个可以获取现有配置文件和证书并加密它们的脚本。

通过 Dependencies.swift 放弃 Carthage 集成

Section titled “通过 Dependencies.swift 放弃 Carthage 集成”

在 Tuist 4 之前,Carthage 依赖可以在 Dependencies.swift 文件中定义,用户可以通过运行 tuist fetch 来获取。我们也认为这是 Tuist 的一个延伸目标,特别是考虑到 Swift Package Manager 将成为首选依赖管理方式的未来。如果你正在使用 Carthage 依赖,你需要直接使用 Carthage 将预编译的框架和 XCFramework 拉到 Carthage 的标准目录,然后使用 TargetDependency.xcframeworkTargetDependency.framework 从你的 target 引用这些二进制文件。

在 Tuist 4 之前,你可以使用 TargetDependency.packagePlugin case 定义包插件依赖。在看到 Swift Package Manager 引入了新的包类型后,我们决定迭代 API,使其更加灵活和面向未来。如果你正在使用 TargetDependency.packagePlugin,你需要改用 TargetDependency.package,并传递你想要使用的包类型作为参数。

我们移除了在 Tuist 3 中标记为已弃用的 API。如果你正在使用任何已弃用的 API,你需要更新项目以使用新的 API。