Skip to content

Traducción 🌍

Traduce o mejora la traducción de esta página.

Contribuye

Caché de módulos

::: advertencia REQUISITOS

:::

Tuist Module cache proporciona una potente forma de optimizar tus tiempos de compilación almacenando en caché tus módulos como binarios (.xcframeworks) y compartiéndolos a través de diferentes entornos. Esta capacidad te permite aprovechar los binarios generados previamente, reduciendo la necesidad de repetir la compilación y acelerando el proceso de desarrollo.

Calentamiento

Tuist utiliza eficientemente hashes para cada objetivo en el grafo de dependencia para detectar cambios. Utilizando estos datos, construye y asigna identificadores únicos a los binarios derivados de estos objetivos. En el momento de generar el grafo, Tuist sustituye sin problemas los objetivos originales por sus correspondientes versiones binarias.

Esta operación, conocida como "warming", produce binarios para uso local o para compartir con compañeros de equipo y entornos CI a través de Tuist. El proceso de calentamiento de la caché es sencillo y puede iniciarse con un simple comando:

bash
tuist cache

El comando reutiliza binarios para acelerar el proceso.

Uso

Por defecto, cuando los comandos de Tuist necesitan generar un proyecto, sustituyen automáticamente las dependencias por sus equivalentes binarios de la caché, si están disponibles. Además, si especificas una lista de objetivos en los que centrarte, Tuist también sustituirá cualquier objetivo dependiente por sus binarios de la caché, siempre que estén disponibles. Para aquellos que prefieren un enfoque diferente, hay una opción para optar por este comportamiento por completo mediante el uso de una bandera específica:

::: grupo de códigos

bash
tuist generate # Only dependencies
tuist generate Search # Dependencies + Search dependencies
tuist generate Search Settings # Dependencies, and Search and Settings dependencies
tuist generate --no-binary-cache # No cache at all
bash
tuist test

:::

::: advertencia

La caché binaria es una función diseñada para flujos de trabajo de desarrollo, como la ejecución de la aplicación en un simulador o dispositivo, o la ejecución de pruebas. No está pensada para compilaciones de lanzamiento. Al archivar la aplicación, genera un proyecto con los fuentes utilizando la opción --no-binary-cache.

:::

Perfiles de caché

Tuist admite perfiles de caché para controlar la agresividad con la que se sustituyen los objetivos por binarios en caché al generar proyectos.

  • Empotrados:
    • only-external: reemplaza sólo las dependencias externas (por defecto del sistema)
    • all-possible: reemplazar tantos objetivos como sea posible (incluidos los objetivos internos)
    • none: nunca reemplazar con binarios en caché

Seleccione un perfil con --cache-profile en tuist generate:

bash
# Built-in profiles
tuist generate --cache-profile all-possible

# Custom profiles (defined in Tuist Config)
tuist generate --cache-profile development

# Use config default (no flag)
tuist generate

# Focus on specific targets (implies all-possible)
tuist generate MyModule AnotherTarget

# Disable binary replacement entirely (backwards compatible)
tuist generate --no-binary-cache  # equivalent to --cache-profile none

Precedencia a la hora de resolver la conducta efectiva (de mayor a menor):

  1. --no-binary-cache → profile none
  2. Enfoque de objetivos (pasar objetivos a generar) → perfil todo-posible
  3. --perfil de caché
  4. Configuración por defecto (si está configurada)
  5. Sistema por defecto (only-external)

Productos compatibles

Tuist sólo puede almacenar en caché los siguientes productos de destino:

  • Frameworks (estáticos y dinámicos) que no dependen de XCTest
  • Paquetes
  • Macros Swift

Estamos trabajando para dar soporte a las librerías y objetivos que dependen de XCTest.

UPSTREAM DEPENDENCIES

Cuando un objetivo no es almacenable en caché, hace que los objetivos anteriores tampoco lo sean. Por ejemplo, si tienes el gráfico de dependencias A > B, donde A depende de B, si B no es almacenable en caché, A tampoco lo será.

Eficacia

El nivel de eficacia que puede alcanzarse con la caché binaria depende en gran medida de la estructura del grafo. Para obtener los mejores resultados, recomendamos lo siguiente:

  1. Evite los gráficos de dependencia muy anidados. Cuanto menos profundo sea el gráfico, mejor.
  2. Define las dependencias con objetivos de protocolo/interfaz en lugar de objetivos de implementación, e inyecta las implementaciones de dependencias desde los objetivos superiores.
  3. Dividir los objetivos modificados con frecuencia en otros más pequeños cuya probabilidad de cambio sea menor.

Las sugerencias anteriores forman parte de

La arquitectura modular, que proponemos como una forma de estructurar sus

proyectos para maximizar los beneficios no sólo de la caché binaria, sino también de las capacidades de Xcode.

Recomendamos tener un trabajo CI que ejecute en cada commit en la rama principal para calentar la caché. Esto asegurará que la caché siempre contenga binarios para los cambios en main para que la rama local y CI construyan incrementalmente sobre ellos.

CACHE WARMING USES BINARIES

El comando tuist cache también hace uso de la caché binaria para acelerar el calentamiento.

A continuación se ofrecen algunos ejemplos de flujos de trabajo habituales:

Un desarrollador empieza a trabajar en una nueva función

  1. Crean una nueva rama a partir de principal.
  2. Ejecutan tuist generan.
  3. Tuist extrae los binarios más recientes de main y genera el proyecto con ellos.

Un desarrollador introduce cambios

  1. El proceso CI ejecutará xcodebuild build o tuist test para construir o probar el proyecto.
  2. El flujo de trabajo extraerá los binarios más recientes de main y generará el proyecto con ellos.
  3. A continuación, construirá o probará el proyecto de forma incremental.

Configuración

Límite de concurrencia de la caché

Por defecto, Tuist descarga y sube artefactos de caché sin ningún límite de concurrencia, maximizando el rendimiento. Puedes controlar este comportamiento utilizando la variable de entorno TUIST_CACHE_CONCURRENCY_LIMIT:

bash
# Set a specific concurrency limit
export TUIST_CACHE_CONCURRENCY_LIMIT=10
tuist generate

# Use "none" for no limit (default behavior)
export TUIST_CACHE_CONCURRENCY_LIMIT=none
tuist generate

Esto puede ser útil en entornos con un ancho de banda de red limitado o para reducir la carga del sistema durante las operaciones de caché.

Solución de problemas

No utiliza binarios para mis objetivos

Asegúrese de que los

hashes son deterministas entre entornos y ejecuciones. Esto puede ocurrir

si el proyecto tiene referencias al entorno, por ejemplo a través de rutas absolutas. Puede utilizar el comando diff para comparar los proyectos generados por dos invocaciones consecutivas de tuist generate o a través de entornos o ejecuciones.

Asegúrese también de que el objetivo no depende directa o indirectamente de un

objetivo no almacenable en caché.

Símbolos que faltan

Cuando se utilizan fuentes, el sistema de compilación de Xcode, a través de los datos derivados, puede resolver las dependencias que no se declaran explícitamente. Sin embargo, cuando se confía en la caché binaria, las dependencias deben declararse explícitamente; de lo contrario, es probable que aparezcan errores de compilación cuando no se encuentren los símbolos. Para depurar esto, recomendamos usar el comando

`tuist inspect implicit-imports` y configurarlo en CI para prevenir

regresiones en el enlazado implícito.

Released under the MIT License.