server/priv/docs/zh_Hant/guides/features/projects/manifests.md
Tuist 預設以 Swift 檔案作為定義專案和工作區以及設定產生程序的主要方式。這些檔案在整個文件中被稱為manifest files 。
使用 Swift 的決定是受到 Swift Package Manager 的啟發,它也使用 Swift 檔案來定義套件。由於使用 Swift,我們可以利用編譯器來驗證內容的正確性,並在不同的清單檔案中重複使用程式碼,而 Xcode 則可利用語法高亮、自動完成和驗證功能,提供一流的編輯體驗。
[!NOTE] Caching
由於清单文件是需要编译的 Swift 文件,Tuist 会缓存编译结果以加快解析过程。因此,您會發現第一次執行 Tuist 時,產生專案的時間可能會稍長。之後的執行將會更快。
<LocalizedLink href="/references/project-description/structs/project">Project.swift</LocalizedLink>
manifest 宣告了一個 Xcode 專案。專案會在清單檔案所在的同一個目錄中產生,其名稱會在name 屬性中顯示。
// Project.swift
let project = Project(
name: "App",
targets: [
// ....
]
)
[!WARNING] Root Variables
唯一應該在 manifest 根部的變數是
let project = Project(...)。如果您需要在清单的各个部分重用代码,可以使用 Swift 函数。
預設情況下,Tuist 會產生一個 Xcode
Workspace
包含正在產生的專案及其相依專案。如果基於任何原因,您想要自訂工作區以新增其他專案或包含檔案與群組,您可以透過定義
<LocalizedLink href="/references/project-description/structs/workspace">Workspace.swift</LocalizedLink>
清单來達成。
// Workspace.swift
import ProjectDescription
let workspace = Workspace(
name: "App-Workspace",
projects: [
"./App", // Path to directory containing the Project.swift file
]
)
[!NOTE] Tuist 會解析相依性圖形,並將相依性的專案包含在工作區中。您不需要手動包含它們。這是建立系統正確解析相依性所必需的。
一個經常出現的問題是在工作區中使用單一專案還是多專案。在沒有 Tuist 的世界裡,單一專案的設定會導致頻繁的 Git 衝突,因此我們鼓勵使用工作區。但是,由於我們不建議在 Git 倉庫中包含 Tuist 生成的 Xcode 專案,因此 Git 衝突不是問題。因此,在工作區中使用單一專案或多個專案的決定權在您。
在 Tuist 專案中,我們傾向使用單一專案,因為冷生成時間較快(需要編譯的manifest檔案較少),而且我們利用 <LocalizedLink href="/guides/features/projects/code-sharing">Project description helpers</LocalizedLink> 作為封裝單位。然而,您可能希望使用 Xcode 專案作為封裝單位,以代表應用程式的不同領域,這與 Xcode 所推薦的專案結構更為接近。
Tuist 提供了
<LocalizedLink href="/contributors/principles#default-to-conventions">合理的預設值</LocalizedLink>來簡化專案配置。不過,您可以透過在專案根目錄定義
<LocalizedLink href="/references/project-description/structs/tuist">Tuist.swift</LocalizedLink>
來自訂配置,Tuist 會使用它來判斷專案的根目錄。
import ProjectDescription
let tuist = Tuist(
project: .tuist(generationOptions: .options(enforceExplicitDependencies: true))
)