迁移 XcodeGen 项目
XcodeGen 是一个项目生成工具,它使用 YAML 作为配置格式来定义 Xcode 项目。许多组织采用它是为了避免使用 Xcode 项目时经常出现的 Git 冲突。然而,频繁的 Git 冲突只是组织遇到的众多问题之一。Xcode 向开发者暴露了许多复杂的细节和隐式配置,使得项目难以维护和大规模优化。XcodeGen 在这方面设计上存在不足,因为它只是一个生成 Xcode 项目的工具,而不是项目管理者。如果你需要一个超越生成 Xcode 项目功能的工具,可以考虑使用 Tuist。
以下是在将项目从 XcodeGen 迁移到 Tuist 时需要考虑的一些事项和指南。
Tuist 和 XcodeGen 都提供了 generate 命令,可以将项目声明转换为 Xcode 项目和工作空间。
xcodegen generatetuist generate区别在于编辑体验。使用 Tuist,你可以运行 tuist edit 命令,它会动态生成一个 Xcode 项目,你可以打开它并开始工作。这在想要快速修改项目时特别有用。
project.yaml
Section titled “project.yaml”XcodeGen 的 project.yaml 描述文件变为 Project.swift。此外,你还可以有 Workspace.swift 来自定义项目在工作空间中的分组方式。你也可以有一个项目 Project.swift,其中包含引用其他项目中的 target 的 target。在这种情况下,Tuist 会生成一个包含所有项目的 Xcode 工作空间。
/ project.yaml/ Tuist.swift Project.swift Workspace.swiftYAML 作为项目配置语言的一个缺点是它本身不支持跨 YAML 文件的可重用性。这是在描述项目时的常见需求,XcodeGen 必须使用名为”模板”的专有解决方案来解决这个问题。而 Tuist 的可重用性内置于语言本身,即 Swift,并通过一个名为
::: code-group
import ProjectDescription
extension Target { /** 这是一个工厂函数,用于创建组合在一起表示一个特性的 targets。 */ static func featureTargets(name: String) -> [Target] { // ... }}import ProjectDescriptionimport ProjectDescriptionHelpers // [!code highlight]
let project = Project(name: "MyProject", targets: Target.featureTargets(name: "MyFeature")) // [!code highlight]