Skip to content

Traducción 🌍

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

Contribuye

Integración continua (CI)

Para utilizar el registro en su CI, debe asegurarse de que ha iniciado sesión en el registro ejecutando tuist registry login como parte de su flujo de trabajo.

SOLO XCODE INTEGRATION

La creación de un nuevo llavero predesbloqueado sólo es necesaria si se utiliza la integración de paquetes en Xcode.

Dado que las credenciales de registro se almacenan en un llavero, es necesario asegurarse de que el llavero se puede acceder en el entorno de CI. Tenga en cuenta que algunos proveedores de CI o herramientas de automatización como Fastlane ya crean un llavero temporal o proporcionan una forma integrada de crearlo. Sin embargo, también puede crear uno creando un paso personalizado con el siguiente código:

bash
TMP_DIRECTORY=$(mktemp -d)
KEYCHAIN_PATH=$TMP_DIRECTORY/keychain.keychain
KEYCHAIN_PASSWORD=$(uuidgen)
security create-keychain -p $KEYCHAIN_PASSWORD $KEYCHAIN_PATH
security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
security default-keychain -s $KEYCHAIN_PATH
security unlock-keychain -p $KEYCHAIN_PASSWORD $KEYCHAIN_PATH

tuist registry login almacenará las credenciales en el llavero por defecto. Asegúrese de que su llavero predeterminado está creado y desbloqueado antes de ejecutar tuist registry login.

Además, debe asegurarse de que la variable de entorno TUIST_CONFIG_TOKEN está configurada. Puede crear una siguiendo la documentación

aquí.

Un ejemplo de flujo de trabajo para GitHub Actions podría ser el siguiente:

yaml
name: Build

jobs:
  build:
    steps:
      - # Your set up steps...
      - name: Create keychain
        run: |
        TMP_DIRECTORY=$(mktemp -d)
        KEYCHAIN_PATH=$TMP_DIRECTORY/keychain.keychain
        KEYCHAIN_PASSWORD=$(uuidgen)
        security create-keychain -p $KEYCHAIN_PASSWORD $KEYCHAIN_PATH
        security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
        security default-keychain -s $KEYCHAIN_PATH
        security unlock-keychain -p $KEYCHAIN_PASSWORD $KEYCHAIN_PATH
      - name: Log in to the Tuist Registry
        env:
          TUIST_CONFIG_TOKEN: ${{ secrets.TUIST_CONFIG_TOKEN }}
        run: tuist registry login
      - # Your build steps

Resolución incremental entre entornos

Las resoluciones limpias/frías son ligeramente más rápidas con nuestro registro, y puede experimentar mejoras aún mayores si persiste las dependencias resueltas a través de las compilaciones CI. Ten en cuenta que gracias al registro, el tamaño del directorio que necesitas almacenar y restaurar es mucho menor que sin el registro, tardando significativamente menos tiempo. Para almacenar en caché las dependencias cuando se utiliza la integración de paquetes por defecto de Xcode, lo mejor es especificar una clonedSourcePackagesDirPath personalizada cuando se resuelven las dependencias a través de xcodebuild. Esto puede hacerse añadiendo lo siguiente a su archivo Config.swift:

swift
import ProjectDescription

let config = Config(
    generationOptions: .options(
        additionalPackageResolutionArguments: ["-clonedSourcePackagesDirPath", ".build"]
    )
)

Además, necesitará encontrar una ruta del Package.resolved. Puede obtener la ruta ejecutando ls **/Package.resolved. La ruta debería ser algo parecido a App.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved.

Para los paquetes Swift y la integración basada en XcodeProj, podemos utilizar el directorio por defecto .build ubicado en la raíz del proyecto o en el directorio Tuist. Asegúrate de que la ruta es correcta cuando configures tu pipeline.

A continuación se muestra un flujo de trabajo de ejemplo para las Acciones de GitHub para resolver y almacenar en caché las dependencias cuando se utiliza la integración predeterminada de paquetes de Xcode:

yaml
- name: Restore cache
  id: cache-restore
  uses: actions/cache/restore@v4
  with:
    path: .build
    key: ${{ runner.os }}-${{ hashFiles('App.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved') }}
- name: Resolve dependencies
  if: steps.cache-restore.outputs.cache-hit != 'true'
  run: xcodebuild -resolvePackageDependencies -clonedSourcePackagesDirPath .build
- name: Save cache
  id: cache-save
  uses: actions/cache/save@v4
  with:
    path: .build
    key: ${{ steps.cache-restore.outputs.cache-primary-key }}

Released under the MIT License.