迁移 Bazel 项目
迁移 Bazel 项目 {#migrate-a-bazel-project}
Section titled “迁移 Bazel 项目 {#migrate-a-bazel-project}”Bazel 是 Google 于 2015 年开源的构建系统。它是一个强大的工具,可以让你快速可靠地构建和测试任意规模的软件。一些大型组织如 Spotify、Tinder 或 Lyft 都在使用它,然而,引入和维护它需要前期投入(即学习技术)和持续投入(即跟上 Xcode 更新)。虽然这对于一些将其作为跨领域问题来处理的组织来说是可以的,但对于想要专注于产品开发的组织来说可能不是最佳选择。例如,我们见过一些组织,其 iOS 平台团队引入了 Bazel,但在负责这项工作的工程师离开公司后不得不放弃它。苹果对 Xcode 和构建系统之间紧密耦合的态度是另一个使得 Bazel 项目难以长期维护的因素。
::: tip TUIST 的独特之处在于其精致
Tuist 不是与 Xcode 和 Xcode 项目对抗,而是拥抱它。它使用相同的概念(例如 targets、scheme、构建设置)、熟悉的语言(即 Swift),以及简单愉快的体验,使维护和扩展项目成为每个人的工作,而不仅仅是 iOS 平台团队的工作。
:::
规则 {#rules}
Section titled “规则 {#rules}”Bazel 使用规则来定义如何构建和测试软件。这些规则用 Starlark 编写,这是一种类似 Python 的语言。Tuist 使用 Swift 作为配置语言,为开发者提供了使用 Xcode 自动补全、类型检查和验证功能的便利。例如,以下规则描述了如何在 Bazel 中构建 Swift 库:
::: code-group
swift_library( name = "MyLibrary.library", srcs = glob(["**/*.swift"]), module_name = "MyLibrary")let project = Project( // ... targets: [ .target(name: "MyLibrary", product: .staticLibrary, sources: ["**/*.swift"]) ]):::
下面是另一个例子,比较了在 Bazel 和 Tuist 中如何定义单元测试:
::: code-group
ios_unit_test( name = "MyLibraryTests", bundle_id = "dev.tuist.MyLibraryTests", minimum_os_version = "16.0", test_host = "//MyApp:MyLibrary", deps = [":MyLibraryTests.library"],)let project = Project( // ... targets: [ .target( name: "MyLibraryTests", destinations: .iOS, product: .unitTests, bundleId: "dev.tuist.MyLibraryTests", sources: "Tests/MyLibraryTests/**", dependencies: [ .target(name: "MyLibrary"), ] ) ]):::
Swift Package Manager 依赖 {#swift-package-manager-dependencies}
Section titled “Swift Package Manager 依赖 {#swift-package-manager-dependencies}”在 Bazel 中,你可以使用 rules_swift_package_manager Gazelle 插件来将 Swift 包作为依赖使用。该插件需要一个 Package.swift 作为依赖的 truth source。Tuist 的接口与 Bazel 类似。你可以使用 tuist install 命令来解析和拉取包的依赖。解析完成后,可以使用 tuist generate 命令生成项目。
tuist install # 获取定义在 Tuist/Package.swift 中的依赖tuist generate # 生成 Xcode 项目项目生成 {#project-generation}
Section titled “项目生成 {#project-generation}”社区提供了一组规则 rules_xcodeproj,用于从 Bazel 声明的项目生成 Xcode 项目。与 Bazel 不同的是,Bazel 需要在 BUILD 文件中添加一些配置,而 Tuist 完全不需要任何配置。你可以在项目根目录运行 tuist generate,Tuist 会为你生成一个 Xcode 项目。