跳转到内容

迁移 XcodeGen 项目

迁移 XcodeGen 项目 {#migrate-an-xcodegen-project}

Section titled “迁移 XcodeGen 项目 {#migrate-an-xcodegen-project}”

XcodeGen 是一个项目生成工具,它使用 YAML 作为配置格式来定义 Xcode 项目。许多组织采用它是为了避免使用 Xcode 项目时经常出现的 Git 冲突。然而,频繁的 Git 冲突只是组织遇到的众多问题之一。Xcode 向开发者暴露了许多复杂的细节和隐式配置,使得项目难以维护和大规模优化。XcodeGen 在这方面设计上存在不足,因为它只是一个生成 Xcode 项目的工具,而不是项目管理者。如果你需要一个超越生成 Xcode 项目功能的工具,可以考虑使用 Tuist。

::: tip SWIFT 优于 YAML

许多组织也选择 Tuist 作为项目生成工具,因为它使用 Swift 作为配置格式。Swift 是一种开发者熟悉的编程语言,可以利用 Xcode 的自动补全、类型检查和验证功能,为开发者带来便利。

:::

以下是在将项目从 XcodeGen 迁移到 Tuist 时需要考虑的一些事项和指南。

Tuist 和 XcodeGen 都提供了 generate 命令,可以将项目声明转换为 Xcode 项目和工作空间。

::: code-group

Terminal window
xcodegen generate
Terminal window
tuist generate

:::

区别在于编辑体验。使用 Tuist,你可以运行 tuist edit 命令,它会动态生成一个 Xcode 项目,你可以打开它并开始工作。这在想要快速修改项目时特别有用。

XcodeGen 的 project.yaml 描述文件变为 Project.swift。此外,你还可以有 Workspace.swift 来自定义项目在工作空间中的分组方式。你也可以有一个项目 Project.swift,其中包含引用其他项目中的 target 的 target。在这种情况下,Tuist 会生成一个包含所有项目的 Xcode 工作空间。

::: code-group

Terminal window
/
project.yaml
Terminal window
/
Tuist.swift
Project.swift
Workspace.swift

:::

::: tip XCODE 的语言

XcodeGen 和 Tuist 都采用 Xcode 的语言和概念。然而,Tuist 基于 Swift 的配置让你能够使用 Xcode 的自动补全、类型检查和验证功能。

:::

YAML 作为项目配置语言的一个缺点是它本身不支持跨 YAML 文件的可重用性。这是在描述项目时的常见需求,XcodeGen 必须使用名为”模板”的专有解决方案来解决这个问题。而 Tuist 的可重用性内置于语言本身,即 Swift,并通过一个名为 project description helpers 的 Swift 模块来实现,允许在所有清单文件中重用代码。

::: code-group

import ProjectDescription
extension Target {
/**
这是一个工厂函数,用于创建组合在一起表示一个特性的 targets。
*/
static func featureTargets(name: String) -> [Target] {
// ...
}
}
import ProjectDescription
import ProjectDescriptionHelpers // [!code highlight]
let project = Project(name: "MyProject",
targets: Target.featureTargets(name: "MyFeature")) // [!code highlight]