動態設定
在某些情況下,你可能需要在專案產生期間進行動態設定。例如,你可能想根據專案產生的環境來變更應用程式名稱、Bundle Identifier 或部署目標。Tuist 透過環境變數支援此功能,這些變數可從資訊清單檔案中存取。
透過環境變數進行設定#
Tuist 允許透過環境變數傳遞設定,這些變數可從資訊清單檔案中存取。例如:
TUIST_APP_NAME=MyApp tuist generate
若要傳遞多個環境變數,只需用空格分隔即可。例如:
TUIST_APP_NAME=MyApp TUIST_APP_LOCALE=pl tuist generate
從資訊清單讀取環境變數#
可以使用 Environment 類型來存取變數。任何遵循 TUIST_XXX 慣例並在環境中定義或在執行命令時傳遞給 Tuist 的變數,都可以使用 Environment 類型存取。以下範例顯示如何存取 TUIST_APP_NAME 變數:
func appName() -> String {
if case let .string(environmentAppName) = Environment.appName {
return environmentAppName
} else {
return "MyApp"
}
}
存取變數會傳回 Environment.Value? 類型的實例,其值可以是下列任一項:
| 案例 | 說明 |
|---|---|
.string(String) | 當變數代表字串時使用。 |
你也可以使用下方定義的輔助方法來取得字串或布林值的 Environment 變數;這些方法需要傳入預設值,以確保使用者每次都能獲得一致的結果。這樣就不需要定義上述的 appName() 函式。
Environment.appName.getString(default: "TuistServer")
Environment.isCI.getBoolean(default: false)
將額外的環境變數轉發至資訊清單#
預設情況下,只有以 TUIST_ 為前綴的變數,以及 CI 和 DEVELOPER_DIR,會被轉發至評估 Project.swift、Workspace.swift、Package.swift 與專案描述輔助工具的子程序。這能讓產生過程保持確定性,並防止不相關的 Shell 或 CI 變數使資訊清單快取失效。
當資訊清單需要讀取不受你控制的變數時(例如,已讀取 OPENSWIFTUI_LIBRARY_TYPE 的第三方 Package.swift),請在 Tuist.swift 中透過產生選項上的 manifestEnvironment 宣告它們。每個項目可以是明確的名稱,或是以 * 結尾的名稱以進行前綴比對:
import ProjectDescription
let tuist = Tuist(
project: .tuist(
generationOptions: .options(
manifestEnvironment: [
"OPENSWIFTUI_*",
"MY_VAR",
]
)
)
)
列出的變數會參與資訊清單快取的雜湊計算,因此其值的變更會如預期般使快取失效。未列出的變數在資訊清單評估過程中仍保持隱藏。