Skip to content

Translation 🌍

You can translate or improve the translation of this page.

Contribute

迁移 XcodeGen 项目

XcodeGen 是一款项目生成工具,它使用 YAML 作为一种配置格式来定义 Xcode 项目。许多组织都采用了该工具,试图摆脱在处理 Xcode 项目时频繁出现的 Git 冲突。 然而,频繁的 Git 冲突只是企业遇到的众多问题之一。Xcode 为开发人员提供了大量错综复杂的隐含配置,这使得大规模维护和优化项目变得十分困难。XcodeGen 在设计上存在不足,因为它只是一个生成 Xcode 项目的工具,而不是一个项目管理器。如果您除了需要一个生成 Xcode 项目的工具外,还需要一个其他的工具,那么您可以考虑 Tuist。

SWIFT OVER YAML

许多组织也喜欢将 Tuist 作为项目生成工具,因为它使用 Swift 作为配置格式。Swift 是一种开发人员非常熟悉的编程语言,可以方便地使用 Xcode 的自动完成、类型检查和验证功能。

以下是一些注意事项和指南,可帮助您将项目从 XcodeGen 移植到 Tuist。

项目生成

Tuist 和 XcodeGen 都提供了一个生成 命令,可将项目声明转化为 Xcode 项目和工作区。

代码组

bash
xcodegen generate
bash
tuist generate

:::

不同之处在于编辑体验。使用 Tuist,您可以运行tuist edit 命令,该命令会即时生成一个 Xcode 项目,您可以打开并开始工作。当您想对项目进行快速修改时,这一点尤其有用。

project.yaml

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

代码组

bash
/
  project.yaml
bash
/
  Tuist.swift
  Project.swift
  Workspace.swift

:::

XCODE'S LANGUAGE

XcodeGen 和 Tuist 都采用了 Xcode 的语言和概念。不过,Tuist 基于 Swift 的配置为您提供了使用 Xcode 的自动完成、类型检查和验证功能的便利。

规格模板

YAML 作为项目配置语言的一个缺点是,它不支持开箱即用的 YAML 文件之间的复用。这是描述项目时的一个常见需求,XcodeGen 不得不使用自己的专利解决方案(名为*"templates"* )来解决这个问题。Tuist 的可重用性内置于 Swift 语言本身,并通过名为

project description helpers 的 Swift 模块实现,该模块允许在所有清单文件中重用代码。

代码组

swift
import ProjectDescription

extension Target {
  /**
    This function is a factory of targets that together represent a feature.
  */
  static func featureTargets(name: String) -> [Target] {
    // ...
  }
}
swift
import ProjectDescription
import ProjectDescriptionHelpers

let project = Project(name: "MyProject",
                      targets: Target.featureTargets(name: "MyFeature")) 

Released under the MIT License.