Swift Package Registry
隨著依賴項數量增加,解析它們所需的時間也會增長。雖然其他套件管理器如 CocoaPods 或 npm 採用集中式架構,但 Swift Package Manager 並非如此。因此,SwiftPM 需要透過深度克隆每個儲存庫來解析依賴項,這不僅耗時,而且比集中式方法佔用更多記憶體。為了解決這個問題,Tuist 提供了 Package Registry 的實作,讓你可以只下載你 真正需要 的提交記錄。Registry 中的套件基於 Swift Package Index —— 如果你在那裡能找到某個套件,該套件也會在 Tuist Registry 中提供。此外,這些套件透過邊緣儲存分發至全球,以在解析時實現最低延遲。
使用方法#
有兩種方式可以設定 Registry:
選項 1:在生成期間自動設定(推薦)#
如果你使用 Tuist 來生成專案,可以透過在 Tuist.swift 設定中設定 registryEnabled 選項來啟用 Registry:
import ProjectDescription
let tuist = Tuist(
project: .tuist(
generationOptions: .options(
registryEnabled: true
)
)
)
使用此選項後,tuist generate 會自動在你的工作區中建立 Registry 設定檔。這樣就無需單獨執行 tuist registry setup。
registryEnabled 也會為那些透過 Xcode 預設 Swift Package Manager 整合(而非 Tuist 基於 XcodeProj 的整合)來整合依賴項的專案設定 Registry。它不會設定 Xcode 從 Registry 解析以原始碼控制 URL 聲明的套件。若要這樣做,請依照 解析原始碼控制套件 中的說明,在每台機器上執行一次 tuist registry setup。
選項 2:手動設定#
若要手動設定 Registry,請在專案目錄中執行以下命令:
tuist registry setup
此命令會生成一個啟用專案 Registry 的設定檔。請確保提交此檔案,以便你的團隊也能受惠於 Registry。
驗證(可選)#
驗證是 可選的。如果不進行驗證,你可以使用 Registry,每個 IP 位址的限制為每分鐘 1,000 次請求。若要獲得每分鐘 20,000 次請求 的更高限制,你可以透過執行以下命令進行驗證:
tuist registry login
驗證需要一個 Tuist 帳戶和專案。
解析依賴項#
若要從 Registry 而非原始碼控制解析依賴項,請根據你的專案設定繼續閱讀:
- Xcode project
- Generated project with the Xcode package integration
- Generated project with the XcodeProj-based package integration
- Swift package
若要在 CI 上設定 Registry,請遵循此指南:持續整合。
套件 Registry 識別符#
當你在 Package.swift 或 Project.swift 檔案中使用套件 Registry 識別符時,你需要將套件的 URL 轉換為 Registry 慣例格式。Registry 識別符始終採用 {organization}.{repository} 的形式。例如,若要為 https://github.com/pointfreeco/swift-composable-architecture 套件使用 Registry,其套件 Registry 識別符將為 pointfreeco.swift-composable-architecture。
識別符不能包含超過一個點號。如果儲存庫名稱包含點號,則會替換為底線。例如,https://github.com/groue/GRDB.swift 套件的 Registry 識別符將為 groue.GRDB_swift。