最佳做法
在多年与不同团队和项目的合作中,我们总结出了一套最佳实践,建议您在使用 Tuist 和 Xcode 项目时加以遵循。这些实践并不是强制性的,但它们可以帮助您以更易于维护和扩展的方式构建项目。
Xcode
灰心丧气的模式
模拟远程环境的配置
许多组织使用构建配置来模拟不同的远程环境(如Debug-Production 或Release-Canary ),但这种方法有一些缺点:
- 不一致: 如果整个图形中存在配置不一致的情况,那么构建系统最终可能会对某些目标使用错误的配置。
- 复杂性: 项目最终会产生一长串本地配置和远程环境,难以推理和维护。
构建配置是为了体现不同的构建设置而设计的,项目需要的配置很少超过Debug 和Release 。模拟不同环境的需求可以通过不同方式实现:
- 在调试构建中: 您可以在应用程序中包含开发过程中应可访问的所有配置(如端点),并在运行时进行切换。切换可以使用方案启动环境变量,也可以使用应用程序内的用户界面。
- 在发布版构建中: 在发行版中,只能包含发行版构建绑定的配置,而不能包含使用编译器指令切换配置的运行时逻辑。
信息 非标准配置
Tuist 支持非标准配置,与普通 Xcode 项目相比更易于管理,但如果整个依赖关系图中的配置不一致,您将收到警告。这有助于确保构建的可靠性,并防止出现与配置相关的问题。
:::
生成的项目
可构建文件夹
Tuist 4.62.0 添加了对可构建文件夹 (Xcode 的同步组)的支持,该功能在 Xcode 16 中引入,以减少合并冲突。
Tuist 的通配符模式(如Sources/**/*.swift )已经消除了生成项目中的合并冲突,而可构建文件夹则提供了额外的好处:
- 自动同步 :项目结构与文件系统保持同步--添加或删除文件时无需再生
- 人工智能友好型工作流 :编码助手和代理可以修改您的代码库,而不会触发项目再生
- 更简单的配置 :定义文件夹路径,而不是管理明确的文件列表
我们建议采用可构建文件夹,而不是传统的Target.sources 和Target.resources 属性,以获得更简化的开发体验。
代码组
swift
let target = Target(
name: "App",
buildableFolders: ["App/Sources", "App/Resources"]
)swift
let target = Target(
name: "App",
sources: ["App/Sources/**"],
resources: ["App/Resources/**"]
):::
依赖
在 CI 上强制已解决版本
在 CI 上安装 Swift 包管理器依赖项时,我们建议使用--force-resolved-versions 标志,以确保编译的确定性:
bash
tuist install --force-resolved-versions此标记可确保使用Package.resolved 中的准确版本来解析依赖关系,从而消除依赖关系解析中的非确定性所导致的问题。这对 CI 尤为重要,因为可重现的构建至关重要。
