Ir al contenido

Plugins

Los plugins son una herramienta para compartir y reutilizar artefactos de Tuist en varios proyectos. Se admiten los siguientes artefactos:

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.

bash
import ProjectDescription
let plugin = Plugin(name: "MyPlugin")
bash
.
├── ...
├── 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.

bash
import ProjectDescription
let plugin = Plugin(name: "MyPlugin")
bash
.
├── ...
├── 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 recursoNombre del archivo de plantilla
StringsStrings.stencil
AssetsAssets.stencil
Property ListsPlists.stencil
FontsFonts.stencil
Core DataCoreData.stencil
Interface BuilderInterfaceBuilder.stencil
JSONJSON.stencil
YAMLYAML.stencil

Al definir los sintetizadores de recursos en el proyecto, puedes especificar el nombre del plugin para usar las plantillas del plugin:

swift
let project = Project(resourceSynthesizers: [.strings(plugin: "MyPlugin")])

Plugin de tareas #

Obsoleto

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.xcframework distribuido con cada versión de Tuist para acceder al grafo del proyecto desde tu lógica con let graph = try Tuist.graph(). El comando utiliza un proceso del sistema para ejecutar el comando tuist y devolver la representación en memoria del grafo del proyecto.
  • Para distribuir tareas, recomendamos incluir un binario universal que admita arm64 y x86_64 en 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 ejecutando mise install, podrán ejecutarla invocándola directamente o a través de tuist xxx.
El futuro de ProjectAutomation

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:

swift
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:

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.

Sin resolución de versiones

Como habrás observado, no ofrecemos resolución de versiones para plugins. Recomendamos usar etiquetas de Git o SHAs para garantizar la reproducibilidad.

Plugins de helpers de descripción de proyecto

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

swift
import ProjectDescription
import MyTuistPlugin
let project = Project.app(name: "MyCoolApp", platform: .iOS)