Estructura de directorios
Aunque los proyectos de Tuist se usan habitualmente para sustituir a los proyectos de Xcode, no se limitan a este caso de uso. Los proyectos de Tuist también se utilizan para generar otros tipos de proyectos, como paquetes SPM, plantillas, complementos y tareas. Este documento describe la estructura de los proyectos de Tuist y cómo organizarlos. En secciones posteriores, veremos cómo definir plantillas, complementos y tareas.
Proyectos estándar de Tuist#
Los proyectos de Tuist son el tipo de proyecto más común generado por Tuist. Se utilizan para compilar apps, frameworks y bibliotecas, entre otros. A diferencia de los proyectos de Xcode, los proyectos de Tuist se definen en Swift, lo que los hace más flexibles y fáciles de mantener. Los proyectos de Tuist también son más declarativos, lo que facilita su comprensión y análisis. La siguiente estructura muestra un proyecto típico de Tuist que genera un proyecto de Xcode:
Tuist.swift
Tuist/
Package.swift
ProjectDescriptionHelpers/
Projects/
App/
Project.swift
Feature/
Project.swift
Workspace.swift
Directorio Tuist: Este directorio tiene dos propósitos. En primer lugar, indica dónde está la raíz del proyecto. Esto permite construir rutas relativas a la raíz del proyecto y también ejecutar comandos de Tuist desde cualquier directorio dentro del proyecto. En segundo lugar, es el contenedor de los siguientes archivos:
- ProjectDescriptionHelpers: Este directorio contiene código Swift que se comparte en todos los archivos de manifiesto. Los archivos de manifiesto pueden
import ProjectDescriptionHelperspara usar el código definido en este directorio. Compartir código es útil para evitar duplicaciones y garantizar la coherencia entre los proyectos. - Package.swift: Este archivo contiene las dependencias de Swift Package para que Tuist las integre mediante proyectos y destinos de Xcode (como CocoaPods) que son configurables y optimizables. Más información aquí.
- ProjectDescriptionHelpers: Este directorio contiene código Swift que se comparte en todos los archivos de manifiesto. Los archivos de manifiesto pueden
Directorio raíz: El directorio raíz de tu proyecto que también contiene el directorio
Tuist.Tuist.swift: Este archivo contiene la configuración de Tuist que se comparte en todos los proyectos, espacios de trabajo y entornos. Por ejemplo, puede usarse para desactivar la generación automática de esquemas o para definir el destino de implementación de los proyectos.Workspace.swift: Este manifiesto representa un espacio de trabajo de Xcode. Se utiliza para agrupar otros proyectos y también puede añadir archivos y esquemas adicionales.Project.swift: Este manifiesto representa un proyecto de Xcode. Se utiliza para definir los destinos que forman parte del proyecto y sus dependencias.
Al interactuar con el proyecto anterior, los comandos esperan encontrar un archivo Workspace.swift o Project.swift en el directorio de trabajo o en el directorio indicado mediante la opción --path. El manifiesto debe estar en un directorio o subdirectorio de un directorio que contenga un directorio Tuist, que representa la raíz del proyecto.
Los espacios de trabajo de Xcode permitían dividir los proyectos en varios proyectos de Xcode para reducir la probabilidad de conflictos al fusionar cambios. Si ese era el motivo por el que utilizabas espacios de trabajo, no los necesitas en Tuist. Tuist genera automáticamente un espacio de trabajo que contiene un proyecto y los proyectos de sus dependencias.
Swift Package #
Tuist también admite proyectos de paquetes SPM. Si estás trabajando en un paquete SPM, no deberías necesitar actualizar nada. Tuist detecta automáticamente tu Package.swift raíz y todas las funcionalidades de Tuist funcionan como si fuera un manifiesto Project.swift.
Para empezar, ejecuta tuist install y tuist generate en tu paquete SPM. Tu proyecto debería tener ahora los mismos esquemas y archivos que verías en la integración vanilla de SPM de Xcode. Sin embargo, ahora también puedes ejecutar tuist cache y tener la mayoría de tus dependencias y módulos SPM precompilados, lo que hace que las compilaciones posteriores sean extremadamente rápidas.