Plugins
Los plugins son una herramienta para compartir y reutilizar artefactos de Tuist en varios proyectos. Se admiten los siguientes artefactos:
- Helpers de descripción de proyecto en varios proyectos.
- Plantillas en varios proyectos.
- Tareas en varios proyectos.
- Plantilla de acceso a recursos en varios proyectos
Ten en cuenta que los plugins están diseñados para ser una forma sencilla de ampliar la funcionalidad de Tuist. Por ello, hay algunas limitaciones que debes tener en cuenta:
- Un plugin no puede depender de otro plugin.
- Un plugin no puede depender de paquetes Swift de terceros.
- Un plugin no puede usar helpers de descripción de proyecto del proyecto que utiliza el plugin.
Si necesitas más flexibilidad, considera sugerir una funcionalidad para la herramienta o construir tu propia solución sobre el framework de generación de Tuist, TuistGenerator.
Tipos de plugin#
Plugin de helper de descripción de proyecto#
Un plugin de helper de descripción de proyecto se representa mediante un directorio que contiene un archivo de manifiesto Plugin.swift que declara el nombre del plugin y un directorio ProjectDescriptionHelpers que contiene los archivos Swift de los helpers.
import ProjectDescription
let plugin = Plugin(name: "MyPlugin")
.
├── ...
├── Plugin.swift
├── ProjectDescriptionHelpers
└── ...
Plugin de plantillas de acceso a recursos#
Si necesitas compartir accessores de recursos sintetizados, puedes usar este tipo de plugin. El plugin se representa mediante un directorio que contiene un archivo de manifiesto Plugin.swift que declara el nombre del plugin y un directorio ResourceSynthesizers que contiene los archivos de plantilla de acceso a recursos.
import ProjectDescription
let plugin = Plugin(name: "MyPlugin")
.
├── ...
├── Plugin.swift
├── ResourceSynthesizers
├───── Strings.stencil
├───── Plists.stencil
├───── CustomTemplate.stencil
└── ...
El nombre de la plantilla es la versión en camel case del tipo de recurso:
| Tipo de recurso | Nombre del archivo de plantilla |
|---|---|
| Strings | Strings.stencil |
| Assets | Assets.stencil |
| Property Lists | Plists.stencil |
| Fonts | Fonts.stencil |
| Core Data | CoreData.stencil |
| Interface Builder | InterfaceBuilder.stencil |
| JSON | JSON.stencil |
| YAML | YAML.stencil |
Al definir los sintetizadores de recursos en el proyecto, puedes especificar el nombre del plugin para usar las plantillas del plugin:
let project = Project(resourceSynthesizers: [.strings(plugin: "MyPlugin")])
Plugin de tareas #
Los plugins de tareas están obsoletos. Consulta esta entrada del blog si buscas una solución de automatización para tu proyecto.
Las tareas son ejecutables expuestos en el $PATH que se pueden invocar a través del comando tuist si siguen la convención de nomenclatura tuist-<task-name>. En versiones anteriores, Tuist ofrecía algunas convenciones débiles y herramientas bajo tuist plugin para las tareas build, run, test y archive representadas por ejecutables en paquetes Swift, pero hemos declarado obsoleta esta funcionalidad ya que aumenta la carga de mantenimiento y la complejidad de la herramienta.
Si utilizabas Tuist para distribuir tareas, te recomendamos construir tu
- Puedes seguir utilizando el
ProjectAutomation.xcframeworkdistribuido con cada versión de Tuist para acceder al grafo del proyecto desde tu lógica conlet graph = try Tuist.graph(). El comando utiliza un proceso del sistema para ejecutar el comandotuisty devolver la representación en memoria del grafo del proyecto. - Para distribuir tareas, recomendamos incluir un binario universal que admita
arm64yx86_64en las releases de GitHub, y utilizar Mise como herramienta de instalación. Para indicar a Mise cómo instalar tu herramienta, necesitarás un repositorio de plugins. Puedes usar el de Tuist como referencia. - Si nombras tu herramienta
tuist-{xxx}y los usuarios pueden instalarla ejecutandomise install, podrán ejecutarla invocándola directamente o a través detuist xxx.
Planeamos consolidar los modelos de ProjectAutomation y XcodeGraph en un único framework compatible con versiones anteriores que exponga la totalidad del grafo del proyecto al usuario. Además, extraeremos la lógica de generación en una nueva capa, XcodeGraph, que también podrás usar desde tu propia CLI. Piénsalo como construir tu propio Tuist.
Uso de plugins#
Para usar un plugin, tendrás que añadirlo al archivo de manifiesto Tuist.swift de tu proyecto:
import ProjectDescription
let tuist = Tuist(
project: .tuist(plugins: [
.local(path: "/Plugins/MyPlugin")
])
)
Si quieres reutilizar un plugin en proyectos que residen en diferentes repositorios, puedes subir tu plugin a un repositorio Git y hacer referencia a él en el archivo Tuist.swift:
import ProjectDescription
let tuist = Tuist(
project: .tuist(plugins: [
.git(url: "https://url/to/plugin.git", tag: "1.0.0"),
.git(url: "https://url/to/plugin.git", sha: "e34c5ba")
])
)
Después de añadir los plugins, tuist install los obtendrá en un directorio de caché global.
Como habrás observado, no ofrecemos resolución de versiones para plugins. Recomendamos usar etiquetas de Git o SHAs para garantizar la reproducibilidad.
Al usar un plugin de helpers de descripción de proyecto, el nombre del módulo que contiene los helpers es el nombre del plugin
import ProjectDescription
import MyTuistPlugin
let project = Project.app(name: "MyCoolApp", platform: .iOS)