Configuración dinámica
Hay ciertos escenarios en los que podrías necesitar configurar tu proyecto dinámicamente durante la generación. Por ejemplo, es posible que quieras cambiar el nombre de la app, el identificador del bundle o el destino de despliegue en función del entorno donde se está generando el proyecto. Tuist lo admite mediante variables de entorno, a las que se puede acceder desde los archivos de manifiesto.
Configuración mediante variables de entorno#
Tuist permite pasar configuración a través de variables de entorno a las que se puede acceder desde los archivos de manifiesto. Por ejemplo:
TUIST_APP_NAME=MyApp tuist generate
Si quieres pasar varias variables de entorno, sepáralas con un espacio. Por ejemplo:
TUIST_APP_NAME=MyApp TUIST_APP_LOCALE=pl tuist generate
Lectura de las variables de entorno desde los manifiestos#
Se puede acceder a las variables usando el tipo Environment. Cualquier variable que siga la convención TUIST_XXX definida en el entorno o pasada a Tuist al ejecutar comandos será accesible mediante el tipo Environment. El siguiente ejemplo muestra cómo accedemos a la variable TUIST_APP_NAME:
func appName() -> String {
if case let .string(environmentAppName) = Environment.appName {
return environmentAppName
} else {
return "MyApp"
}
}
Acceder a las variables devuelve una instancia del tipo Environment.Value? que puede tomar cualquiera de los siguientes valores:
| Caso | Descripción |
|---|---|
.string(String) | Se usa cuando la variable representa una cadena. |
También puedes recuperar la variable Environment de tipo string o boolean usando cualquiera de los métodos auxiliares definidos a continuación; estos métodos requieren que se pase un valor predeterminado para garantizar que el usuario obtenga resultados consistentes cada vez. Esto evita la necesidad de definir la función appName() mostrada arriba.
Environment.appName.getString(default: "TuistServer")
Environment.isCI.getBoolean(default: false)
Reenvío de variables de entorno adicionales a los manifiestos#
De forma predeterminada, solo las variables con el prefijo TUIST_, además de CI y DEVELOPER_DIR, se reenvían al subproceso que evalúa Project.swift, Workspace.swift, Package.swift y los ayudantes de descripción del proyecto. Esto mantiene la generación determinista y evita que variables no relacionadas del shell o de CI invaliden la caché del manifiesto.
Cuando un manifiesto necesita leer variables que no están bajo tu control (por ejemplo, un Package.swift de terceros que ya lee OPENSWIFTUI_LIBRARY_TYPE), decláralas en Tuist.swift mediante manifestEnvironment en las opciones de generación. Cada entrada es bien un nombre literal o un nombre que termina en * para coincidencia por prefijo:
import ProjectDescription
let tuist = Tuist(
project: .tuist(
generationOptions: .options(
manifestEnvironment: [
"OPENSWIFTUI_*",
"MY_VAR",
]
)
)
)
Las variables listadas participan en el hash de la caché del manifiesto, por lo que los cambios en sus valores invalidan la caché como se espera. Las variables no listadas permanecen ocultas para la evaluación del manifiesto.