Плагины
Плагины - это инструмент для совместного и повторного использования артефактов Tuist в нескольких проектах. Поддерживаются следующие артефакты:
- Помощники по описанию проектов в нескольких проектах.
- Шаблоны для нескольких проектов.
- Выполнение задач в рамках нескольких проектов.
- Шаблон ресурса accessor для нескольких проектов
Обратите внимание, что плагины - это простой способ расширить функциональность Tuist. Поэтому есть некоторые ограничения, которые следует учитывать:
- Плагин не может зависеть от другого плагина.
- Плагин не может зависеть от сторонних пакетов Swift
- Плагин не может использовать хелперы описания проекта из проекта, в котором используется плагин.
Если вам нужна большая гибкость, предложите свою функцию для инструмента или
создайте собственное решение на основе генераторной схемы Tuist,
TuistGenerator.
Типы плагинов#
Вспомогательный плагин для описания проекта#
Плагин-помощник для описания проекта представлен директорией, содержащей файл
манифеста Plugin.swift, в котором объявлено имя плагина, и директорию
ProjectDescriptionHelpers, содержащую файлы-помощники Swift.
import ProjectDescription
let plugin = Plugin(name: "MyPlugin")
.
├── ...
├── Plugin.swift
├── ProjectDescriptionHelpers
└── ...
Плагин шаблонов доступа к ресурсам#
Если вам необходимо совместно использовать
синтезированные аксессоры ресурсов, вы можете использовать этот тип плагина.
Плагин представлен директорией, содержащей файл манифеста Plugin.swift, в
котором объявляется имя плагина, и директорию ResourceSynthesizers, содержащую
файлы шаблонов аксессоров ресурсов.
import ProjectDescription
let plugin = Plugin(name: "MyPlugin")
.
├── ...
├── Plugin.swift
├── ResourceSynthesizers
├───── Strings.stencil
├───── Plists.stencil
├───── CustomTemplate.stencil
└── ...
Имя шаблона - это camel case версия типа ресурса:
| Тип ресурса | Имя файла шаблона |
|---|---|
| Струны | Строки.трафарет |
| Активы | Активы.трафарет |
| Списки недвижимости | Plists.stencil |
| Шрифты | Шрифты.трафарет |
| Основные данные | CoreData.stencil |
| Построитель интерфейсов | InterfaceBuilder.stencil |
| JSON | JSON.stencil |
| YAML | YAML.stencil |
При определении синтезаторов ресурсов в проекте можно указать имя плагина, чтобы использовать шаблоны из этого плагина:
let project = Project(resourceSynthesizers: [.strings(plugin: "MyPlugin")])
Плагин задачи #
Плагины задач устарели. Ознакомьтесь с этой записью в блоге, если вы ищете решение для автоматизации своего проекта.
Задачи - это $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:
import ProjectDescription
let tuist = Tuist(
project: .tuist(plugins: [
.local(path: "/Plugins/MyPlugin")
])
)
Если вы хотите повторно использовать плагин в проектах, которые находятся в
разных репозиториях, вы можете поместить свой плагин в Git-репозиторий и
ссылаться на него в файле 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")
])
)
После добавления плагинов tuist install соберет плагины в глобальный каталог
кэша.
Как вы могли заметить, мы не предоставляем разрешение версий для плагинов. Мы рекомендуем использовать Git-теги или SHA для обеспечения воспроизводимости.
При использовании плагина-помощника для описания проекта имя модуля, в котором содержатся помощники, является именем плагина
import ProjectDescription
import MyTuistPlugin
let project = Project.app(name: "MyCoolApp", platform: .iOS)