Using plugins
Plugins
Plugins are meant to be separate and isolated directories, each containing code used to extend existing Tuist functionality.
You may use plugins that exist at a path local to your machine or at a git source URL to enable sharing and version control across multiple projects. They are fetched by running tuist fetch
. If you add plugin to your project you can not generate it without fetching.
Adding plugins
In order to tell Tuist you'd like to use plugins in your project, you can start by defining the plugins in the Config.swift
manifest.
import ProjectDescription
let config = Config(
plugins: [
.local(path: "/Plugins/MyPlugin"),
.git(url: "https://url/to/plugin.git", tag: "1.0.0"),
.git(url: "https://url/to/plugin.git", sha: "e34c5ba")
]
)
By defining plugins in the Config.swift
manifest Tuist is able to collect, cache and use your plugins to add or extend functionality.
Local plugin
Local plugins are stored relative to the machine generating the project. You can tell Tuist to find them at a given Path
.
PluginLocation.local(path: "/Plugins/MyPlugin")
PluginLocation.local(path: .relativeToCurrentFile("MyOtherPlugin/"))
PluginLocation.local(path: .relativeToManifest("../DevelopmentPlugin"))
Remote plugin
Remote plugins are stored on a remote server and can be downloaded by Tuist and shared across multiple projects.
Git
A common place to store plugins is in a git repository which is uploaded to a remote server. You can specify where to download the plugin as well as what version of the plugin to take. This allows you to version your plugins and share them with others.
Optionally, you can also specify a directory where the plugin is located, in case it's not at the root of the repository.
You can choose to collect a plugin at a specific git tag:
PluginLocation.git(url: "https://url/to/plugin.git", tag: "1.0.0"),
You may also collect a plugin at a specific git sha:
PluginLocation.git(url: "https://url/to/plugin.git", sha: "e34c5ba")
The Plugin.swift
manifest in a git repository should be located at the root of the repository.
Example
Let's say we have a plugin called MyTuistPlugin
. This plugin is designed to add functionality to ProjectDescription
, in this example the plugin will add a new method to Project
which allow us to define an application.
This plugin is stored in git on some remote server, and we'd like to use version 1.0.0
of the plugin.
We must first configure Tuist to use our plugin, we can do that by adding the plugin to the Config.swift
manifest.
import ProjectDescription
let config = Config(
plugins: [
.git(url: "https://url/to/MyTuistPlugin", tag: "1.0.0")
]
)
After plugins have been declared in Config.swift
, you need to fetch them by running tuist fetch
.
Tasks
To use a task plugin, simply import the plugin in Config.swift
and it will be automatically available by running tuist my-plugin-task
.
You can read more about tasks here.
Project description helpers
You can import a project description helper plugin with the name defined in the Plugin.swift
manifest, which can then be used in a project manifest:
import ProjectDescription
import MyTuistPlugin
let project = Project.app(name: "MyCoolApp", platform: .iOS)