跳至內容

動態設定

在某些情況下,你可能需要在專案產生期間進行動態設定。例如,你可能想根據專案產生的環境來變更應用程式名稱、Bundle Identifier 或部署目標。Tuist 透過環境變數支援此功能,這些變數可從資訊清單檔案中存取。

透過環境變數進行設定#

Tuist 允許透過環境變數傳遞設定,這些變數可從資訊清單檔案中存取。例如:

bash
TUIST_APP_NAME=MyApp tuist generate

若要傳遞多個環境變數,只需用空格分隔即可。例如:

bash
TUIST_APP_NAME=MyApp TUIST_APP_LOCALE=pl tuist generate

從資訊清單讀取環境變數#

可以使用 Environment 類型來存取變數。任何遵循 TUIST_XXX 慣例並在環境中定義或在執行命令時傳遞給 Tuist 的變數,都可以使用 Environment 類型存取。以下範例顯示如何存取 TUIST_APP_NAME 變數:

swift
func appName() -> String {
if case let .string(environmentAppName) = Environment.appName {
return environmentAppName
} else {
return "MyApp"
}
}

存取變數會傳回 Environment.Value? 類型的實例,其值可以是下列任一項:

案例說明
.string(String)當變數代表字串時使用。

你也可以使用下方定義的輔助方法來取得字串或布林值的 Environment 變數;這些方法需要傳入預設值,以確保使用者每次都能獲得一致的結果。這樣就不需要定義上述的 appName() 函式。

swift
Environment.appName.getString(default: "TuistServer")
swift
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 宣告它們。每個項目可以是明確的名稱,或是以 * 結尾的名稱以進行前綴比對:

swift
import ProjectDescription
let tuist = Tuist(
project: .tuist(
generationOptions: .options(
manifestEnvironment: [
"OPENSWIFTUI_*",
"MY_VAR",
]
)
)
)

列出的變數會參與資訊清單快取的雜湊計算,因此其值的變更會如預期般使快取失效。未列出的變數在資訊清單評估過程中仍保持隱藏。