Плагины
Плагины - это инструмент для совместного и повторного использования артефактов Tuist в нескольких проектах. Поддерживаются следующие артефакты:
- Помощники по описанию проектов в нескольких проектах.
- Шаблоныдля нескольких проектов.
- Выполнение задач в рамках нескольких проектов.
- Шаблон ресурса accessor для нескольких проектов
Обратите внимание, что плагины - это простой способ расширить функциональность Tuist. Поэтому есть некоторые ограничения, которые следует учитывать:
- Плагин не может зависеть от другого плагина.
- Плагин не может зависеть от сторонних пакетов Swift
- Плагин не может использовать хелперы описания проекта из проекта, в котором используется плагин.
Если вам нужна большая гибкость, предложите свою функцию для инструмента или создайте собственное решение на основе генераторной схемы Tuist, TuistGenerator.
Типы плагинов
Вспомогательный плагин для описания проекта
Плагин-помощник для описания проекта представлен директорией, содержащей файл манифеста Plugin.swift, в котором объявлено имя плагина, и директорию ProjectDescriptionHelpers, содержащую файлы-помощники Swift.
bash
import ProjectDescription
let plugin = Plugin(name: "MyPlugin")bash
.
├── ...
├── Plugin.swift
├── ProjectDescriptionHelpers
└── ...Плагин шаблонов доступа к ресурсам
Если вам необходимо совместно использовать
синтезированные аксессоры ресурсов, вы можете использовать этот тип плагина.Плагин представлен директорией, содержащей файл манифеста Plugin.swift, в котором объявляется имя плагина, и директорию ResourceSynthesizers, содержащую файлы шаблонов аксессоров ресурсов.
bash
import ProjectDescription
let plugin = Plugin(name: "MyPlugin")bash
.
├── ...
├── Plugin.swift
├── ResourceSynthesizers
├───── Strings.stencil
├───── Plists.stencil
├───── CustomTemplate.stencil
└── ...Имя шаблона - это camel case версия типа ресурса:
| Тип ресурса | Имя файла шаблона |
|---|---|
| Струны | Строки.трафарет |
| Активы | Активы.трафарет |
| Списки недвижимости | Plists.stencil |
| Шрифты | Шрифты.трафарет |
| Основные данные | CoreData.stencil |
| Построитель интерфейсов | InterfaceBuilder.stencil |
| JSON | JSON.stencil |
| YAML | YAML.stencil |
При определении синтезаторов ресурсов в проекте можно указать имя плагина, чтобы использовать шаблоны из этого плагина:
swift
let project = Project(resourceSynthesizers: [.strings(plugin: "MyPlugin")])Плагин задачи deprecated
DEPRECATED
Плагины задач устарели. Ознакомьтесь с этой записью в блоге, если вы ищете решение для автоматизации своего проекта.
Задачи - это $PATH-экспонируемые исполняемые файлы, которые вызываются командой tuist, если они следуют соглашению об именовании tuist-<task-name>. В предыдущих версиях Tuist предоставлял некоторые слабые соглашения и инструменты под tuist plugin для build, run, test и archive задач, представленных исполняемыми файлами в Swift-пакетах, но мы отказались от этой возможности, поскольку она увеличивает нагрузку на поддержку и сложность инструмента.
Если вы использовали Tuist для распределения задач, мы рекомендуем создать свой
- Вы можете продолжать использовать
ProjectAutomation.xcframework, распространяемый с каждым выпуском Tuist, чтобы иметь доступ к графу проекта из вашей логики с помощьюlet graph = try Tuist.graph(). Команда использует системный процесс для выполнения командыtuistи возвращает представление графа проекта в памяти. - Для распространения задач мы рекомендуем включать жирные бинарники, поддерживающие
arm64иx86_64, в релизы на GitHub и использовать Mise в качестве инструмента установки. Чтобы указать Mise, как установить ваш инструмент, вам понадобится репозиторий плагинов. Вы можете использовать Tuist's в качестве ссылки. - Если вы назовете свой инструмент
tuist-{xxx}и пользователи смогут установить его, выполнив командуmise install, они смогут запускать его, вызывая напрямую или черезtuist xxx.
::: инфо Будущее проектной автоматизации
Мы планируем объединить модели ProjectAutomation и XcodeGraph в единый обратно совместимый фреймворк, который откроет пользователю всю полноту графа проекта. Более того, мы выделим логику генерации в новый слой, XcodeGraph, который вы также сможете использовать из своего собственного CLI. Считайте, что вы создали свой собственный Tuist.
:::
Использование плагинов
Чтобы использовать плагин, вам нужно добавить его в файл манифеста вашего проекта
`Tuist.swift`:swift
import ProjectDescription
let tuist = Tuist(
project: .tuist(plugins: [
.local(path: "/Plugins/MyPlugin")
])
)Если вы хотите повторно использовать плагин в проектах, которые находятся в разных репозиториях, вы можете поместить свой плагин в Git-репозиторий и ссылаться на него в файле 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")
])
)После добавления плагинов tuist install соберет плагины в глобальный каталог кэша.
NO VERSION RESOLUTION
Как вы могли заметить, мы не предоставляем разрешение версий для плагинов. Мы рекомендуем использовать Git-теги или SHA для обеспечения воспроизводимости.
PROJECT DESCRIPTION HELPERS PLUGINS
При использовании плагина-помощника для описания проекта имя модуля, в котором содержатся помощники, является именем плагина
swift
import ProjectDescription
import MyTuistPlugin
let project = Project.app(name: "MyCoolApp", platform: .iOS)