哈希
哈希 {#hashing}
Section titled “哈希 {#hashing}”- Target 的属性(例如名称、平台、产品等)
- Target 的文件
- Target 依赖的哈希值
缓存属性 {#cache-attributes}
Section titled “缓存属性 {#cache-attributes}”此外,在计算
Swift 版本 {#swift-version}
Section titled “Swift 版本 {#swift-version}”我们哈希从运行命令 /usr/bin/xcrun swift --version 获取的 Swift 版本,以防止因 Swift 版本与 target 和二进制文件不匹配而导致的编译错误。
::: info 模块稳定性
以前版本的二进制缓存依赖 BUILD_LIBRARY_FOR_DISTRIBUTION 构建设置来启用模块稳定性,并启用与任何编译器版本一起使用二进制文件。但是,这会导致不支持模块稳定性的 target 的项目出现编译问题。生成的二进制文件绑定到用于编译它们的 Swift 版本,并且 Swift 版本必须与用于编译项目的版本一致。
:::
配置 {#configuration}
Section titled “配置 {#configuration}”-configuration 标志背后的想法是确保调试二进制文件不用于发布构建,反之亦然。但是,我们仍然缺少一种机制来从项目中删除其他配置以防止它们被使用。
调试 {#debugging}
Section titled “调试 {#debugging}”如果你在使用缓存时注意到跨环境或调用的非确定性行为,这可能与环境之间的差异或哈希逻辑中的 bug 有关。我们建议按照以下步骤来调试问题:
- 运行
tuist hash cache或tuist hash selective-testing(为二进制缓存 或选择性测试 计算哈希),复制哈希值,重命名项目目录,然后再次运行命令。哈希值应该匹配。 - 如果哈希值不匹配,可能是生成的项目依赖于环境。分别在两种情况下运行
tuist graph --format json并比较图。或者,生成项目并使用 Diffchecker 等 diff 工具比较它们的project.pbxproj文件。 - 如果哈希值相同但在不同的环境中不同(例如 CI 和本地),请确保在各处使用相同的配置和 Swift 版本。Swift 版本与 Xcode 版本绑定,因此请确认 Xcode 版本匹配。
如果哈希值仍然是非确定性的,请告诉我们,我们可以帮助调试。
::: info 计划改进调试体验 改进我们的调试体验已在路线图中。print-hashes 命令缺乏理解差异的上下文,将被一个更友好的命令取代,该命令使用类似树的结构来显示哈希值之间的差异。 :::