跳至內容

持續整合 (CI)

註冊中心喺 CI 環境入面开箱即用,唔需要額外設定認證。預設情況下,每個 IP 地址嘅未認證請求會被限制為每分鐘 1,000 次請求。

如果你需要更高嘅速率限制(每分鐘 20,000 次請求),可以執行 tuist registry login 進行認證。這需要設定 TUIST_TOKEN 環境變量。你可以按照文檔 此處 建立專案令牌。

Note

下面嘅鑰匙圈設定只係喺你使用 tuist registry login 獲取更高速率限制時才需要。大多數情況下,預設嘅未認證速率限制已經足夠,你可以完全跳過此步驟。

此外,只有當使用 Xcode 套件整合時,才需要建立一個新嘅預先解鎖鑰匙圈。

由於 tuist registry login 會將憑證儲存喺鑰匙圈中,你需要確保喺 CI 環境中可以訪問該鑰匙圈。請注意,某些 CI 供應商或自動化工具(例如 Fastlane)已經會建立臨時鑰匙圈或提供內建方法來建立。不過,你也可以通過以下代碼建立自定義步驟來建立:

bash
TMP_DIRECTORY=$(mktemp -d)
KEYCHAIN_PATH=$TMP_DIRECTORY/keychain.keychain
KEYCHAIN_PASSWORD=$(uuidgen)
security create-keychain -p $KEYCHAIN_PASSWORD $KEYCHAIN_PATH
security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
security default-keychain -s $KEYCHAIN_PATH
security unlock-keychain -p $KEYCHAIN_PASSWORD $KEYCHAIN_PATH

請確保喺執行 tuist registry login 之前,你嘅默認鑰匙圈已經建立並解鎖 之前。

跨環境嘅增量解析#

使用我哋嘅註冊中心時,乾淨/冷啟動解析會稍快一些,如果你喺 CI 構建之間持久化已解析嘅依賴項,體驗到更大嘅改進。請注意,得益於註冊中心,你需要儲存和恢復嘅目錄大小比不使用註冊中心時小得多,所需時間亦顯著減少。當使用默認 Xcode 套件整合時,緩存依賴項嘅最佳方法係喺通過 xcodebuild 解析依賴項時指定自定義嘅 clonedSourcePackagesDirPath。你可以通過將以下內容添加到 Config.swift 文件中來實現:

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 解析和緩存依賴項嘅工作流程示例:

yaml
- 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 }}