插件
插件是跨多个项目共享和重用 Tuist 产物的一种工具。支持以下产物:
- 跨多个项目的
项目描述辅助模块 。 - 跨多个项目的
模板 。 - 跨多个项目的任务。
- 跨多个项目的
资源访问器 模板。
请注意,插件旨在成为扩展 Tuist 功能的简单方式。因此,有一些限制需要考虑:
- 插件不能依赖另一个插件。
- 插件不能依赖第三方 Swift 包。
- 插件不能使用使用该插件的项目中的项目描述辅助模块。
如果你需要更多灵活性,建议为工具提出功能请求,或在 Tuist 的生成框架 TuistGenerator 之上构建自己的解决方案。
项目描述辅助模块插件
Section titled “项目描述辅助模块插件”项目描述辅助模块插件由一个目录表示,该目录包含一个声明插件名称的 Plugin.swift 清单文件和一个包含辅助 Swift 文件的 ProjectDescriptionHelpers 目录。
import ProjectDescription
let plugin = Plugin(name: "MyPlugin").├── ...├── Plugin.swift├── ProjectDescriptionHelpers└── ...资源访问器模板插件
Section titled “资源访问器模板插件”如果你需要共享Plugin.swift 清单文件和一个包含资源访问器模板文件的 ResourceSynthesizers 目录。
import ProjectDescription
let plugin = Plugin(name: "MyPlugin").├── ...├── Plugin.swift├── ResourceSynthesizers├───── Strings.stencil├───── Plists.stencil├───── CustomTemplate.stencil└── ...模板名称是资源类型的驼峰命名版本:
| 资源类型 | 模板文件名 |
|---|---|
| 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 |
在项目中定义资源合成器时,你可以指定插件名称以使用插件中的模板:
let project = Project(resourceSynthesizers: [.strings(plugin: "MyPlugin")])任务是 $PATH 可执行的可执行文件,如果它们遵循命名约定 tuist-<task-name>,可以通过 tuist 命令调用。在早期版本中,Tuist 在 tuist plugin 下提供了一些弱约定和工具,用于 build、run、test 和 archive 表示为 Swift 包中的可执行文件的任务,但我们已弃用此功能,因为它增加了工具的维护负担和复杂性。
如果你曾使用 Tuist 分发任务,我们建议构建你的
- 你可以继续使用随每个 Tuist 版本分发的
ProjectAutomation.xcframework来通过let graph = try Tuist.graph()从你的逻辑中访问项目图。该命令使用系统进程运行tuist命令,并返回项目图的内存表示。 - 为了分发任务,我们建议在 GitHub releases 中包含支持
arm64和x86_64的 fat 二进制文件,并使用 Mise 作为安装工具。为了指示 Mise 如何安装你的工具,你需要一个插件仓库。你可以使用 Tuist 的作为参考。 - 如果你将工具命名为
tuist-{xxx},用户可以通过运行mise install安装它,他们可以直接调用它,也可以通过tuist xxx调用。
要使用插件,你需要将其添加到项目的 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 会将插件获取到全局缓存目录。