插件
插件 {#plugins}
Section titled “插件 {#plugins}”插件是跨多个项目共享和重用 Tuist 产物的一种工具。支持以下产物:
- 跨多个项目的
项目描述辅助模块 。 - 跨多个项目的
模板 。 - 跨多个项目的任务。
- 跨多个项目的
资源访问器 模板。
请注意,插件旨在成为扩展 Tuist 功能的简单方式。因此,有一些限制需要考虑:
- 插件不能依赖另一个插件。
- 插件不能依赖第三方 Swift 包。
- 插件不能使用使用该插件的项目中的项目描述辅助模块。
如果你需要更多灵活性,建议为工具提出功能请求,或在 Tuist 的生成框架 TuistGenerator 之上构建自己的解决方案。
插件类型 {#plugin-types}
Section titled “插件类型 {#plugin-types}”项目描述辅助模块插件 {#project-description-helper-plugin}
Section titled “项目描述辅助模块插件 {#project-description-helper-plugin}”项目描述辅助模块插件由一个目录表示,该目录包含一个声明插件名称的 Plugin.swift 清单文件和一个包含辅助 Swift 文件的 ProjectDescriptionHelpers 目录。
::: code-group
import ProjectDescription
let plugin = Plugin(name: "MyPlugin").├── ...├── Plugin.swift├── ProjectDescriptionHelpers└── ...:::
资源访问器模板插件 {#resource-accessor-templates-plugin}
Section titled “资源访问器模板插件 {#resource-accessor-templates-plugin}”如果你需要共享Plugin.swift 清单文件和一个包含资源访问器模板文件的 ResourceSynthesizers 目录。
::: code-group
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")])任务插件 {#task-plugin-badge-typewarning-textdeprecated-}
Section titled “任务插件 {#task-plugin-badge-typewarning-textdeprecated-}”::: warning 已弃用 任务插件已弃用。如果你正在为项目寻找自动化解决方案,请查看这篇博客文章。 :::
任务是 $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调用。
::: info PROJECTAUTOMATION 的未来
我们计划将 ProjectAutomation 和 XcodeGraph 的模型整合到一个向后兼容的框架中,向用户公开整个项目图。此外,我们将把生成逻辑提取到一个新层 XcodeGraph 中,你也可以从自己的 CLI 中使用它。想象一下构建你自己的 Tuist。
:::
使用插件 {#using-plugins}
Section titled “使用插件 {#using-plugins}”要使用插件,你需要将其添加到项目的 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 会将插件获取到全局缓存目录。
::: info 无版本解析 正如你可能注意到的,我们不提供插件的版本解析。我们建议使用 Git 标签或 SHA 来确保可重现性。 :::
::: tip 项目描述辅助模块插件 使用项目描述辅助模块插件时,包含辅助模块的名称就是插件的名称
import ProjectDescriptionimport MyTuistPluginlet project = Project.app(name: "MyCoolApp", platform: .iOS):::