持续集成
持续集成 (CI) {#continuous-integration-ci}
Section titled “持续集成 (CI) {#continuous-integration-ci}”注册表在 CI 上开箱即用,无需任何额外的身份验证设置。默认情况下,未认证的请求按 IP 地址限制为 每分钟 1000 次请求。
如果需要更高的速率限制 每分钟 20000 次请求,你可以通过运行 tuist registry login 进行身份验证。这需要设置 TUIST_TOKEN 环境变量。你可以通过按照
::: info
只有在需要使用 tuist registry login 来获得更高的速率限制时才需要以下钥匙串设置。在大多数情况下,默认的未认证速率限制是足够的,你可以完全跳过这一步。
此外,只有在使用 Xcode 包集成时才需要创建新的预解锁钥匙串。
:::
由于 tuist registry login 将凭据存储在钥匙串中,你需要确保钥匙串可以在 CI 环境中访问。请注意,一些 CI 提供商或自动化工具(如 Fastlane)已经创建了临时钥匙串或提供了创建钥匙串的内置方法。但是,你也可以通过创建具有以下代码的自定义步骤来创建一个:
TMP_DIRECTORY=$(mktemp -d)KEYCHAIN_PATH=$TMP_DIRECTORY/keychain.keychainKEYCHAIN_PASSWORD=$(uuidgen)security create-keychain -p $KEYCHAIN_PASSWORD $KEYCHAIN_PATHsecurity set-keychain-settings -lut 21600 $KEYCHAIN_PATHsecurity default-keychain -s $KEYCHAIN_PATHsecurity unlock-keychain -p $KEYCHAIN_PASSWORD $KEYCHAIN_PATH确保在运行 tuist registry login 之前创建并解锁你的默认钥匙串。
跨环境增量解析 {#incremental-resolution-across-environments}
Section titled “跨环境增量解析 {#incremental-resolution-across-environments}”使用我们的注册表时,清洁/冷解析稍快一些,如果你将解析的依赖项持久化到 CI 构建中,体验会更好。请注意,由于注册表,你需要存储和恢复的目录大小比不使用注册表时小得多,所需时间显著减少。
要在使用默认 Xcode 包集成时缓存依赖项,最好的方法是在通过 xcodebuild 解析依赖项时指定自定义 clonedSourcePackagesDirPath。这可以通过将以下内容添加到你的 Config.swift 文件来实现:
import ProjectDescription
let config = Config( generationOptions: .options( additionalPackageResolutionArguments: ["-clonedSourcePackagesDirPath", ".build"] ))此外,你需要找到 Package.resolved 的路径。你可以通过运行 ls **/Package.resolved 获取路径。路径看起来应该像 App.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved。
对于 Swift 包和 XcodeProj 基于集成,我们可以使用位于项目根目录或 Tuist 目录中的默认 .build 目录。设置管道时确保路径正确。
以下是在使用默认 Xcode 包集成时解析和缓存依赖项的 GitHub Actions 工作流程示例:
- name: Restore cache id: cache-restore uses: actions/cache/restore@v4 with: path: .build key: ${{ runner.os }}-${{ hashFiles('App.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved') }}- name: Resolve dependencies if: steps.cache-restore.outputs.cache-hit != 'true' run: xcodebuild -resolvePackageDependencies -clonedSourcePackagesDirPath .build- name: Save cache id: cache-save uses: actions/cache/save@v4 with: path: .build key: ${{ steps.cache-restore.outputs.cache-primary-key }}