server/priv/docs/zh_Hans/guides/features/projects/plugins.md
插件是在多个项目中共享和重用 Tuist 工具的工具。支持以下工件:
请注意,插件的设计初衷是作为扩展 Tuist 功能的一种简单方式。因此,,需要考虑一些限制 :
如果您需要更多灵活性,可以考虑为工具提出功能建议,或者在 Tuist 的生成框架
TuistGenerator
上构建自己的解决方案。
项目描述辅助插件由一个目录表示,该目录包含一个Plugin.swift manifest
文件,其中声明了插件的名称,以及一个ProjectDescriptionHelpers 目录,其中包含辅助 Swift 文件。
代码组
import ProjectDescription
let plugin = Plugin(name: "MyPlugin")
.
├── ...
├── Plugin.swift
├── ProjectDescriptionHelpers
└── ...
:::
如果需要共享<LocalizedLink href="/guides/features/projects/synthesized-files#resource-accessors">合成的资源访问器</LocalizedLink>,可以使用这种类型的插件。插件由一个包含Plugin.swift
manifest 文件(声明插件名称)和ResourceSynthesizers 目录(包含资源访问器模板文件)的目录表示。
代码组
import ProjectDescription
let plugin = Plugin(name: "MyPlugin")
.
├── ...
├── Plugin.swift
├── ResourceSynthesizers
├───── Strings.stencil
├───── Plists.stencil
├───── CustomTemplate.stencil
└── ...
:::
模板名称是资源类型的 camel case 版本:
| 资源类型 | 模板文件名称 |
|---|---|
| 弦乐 | 字符串模板 |
| 资产 | Assets.stencil |
| 财产清单 | Plists.stencil |
| 字体 | 字体模板 |
| 核心数据 | CoreData.stencil |
| 界面生成器 | InterfaceBuilder.stencil |
| JSON | JSON.stencil |
| YAML | YAML.stencil |
在项目中定义资源合成器时,可以指定插件名称,以便使用插件中的模板:
let project = Project(resourceSynthesizers: [.strings(plugin: "MyPlugin")])
[!WARNING] Deprecated
任务插件已过时。如果您正在为您的项目寻找自动化解决方案,请查看 本博文。
任务是$PATH-exposed executables(暴露的可执行文件),如果它们遵循命名规范tuist-<task-name>
,则可通过tuist 命令调用。在早期版本中,Tuist 在tuist plugin
下提供了一些弱约定和工具,用于build,run,test 和archive 任务,这些任务由 Swift
包中的可执行文件表示,但我们已弃用这一功能,因为它增加了工具的维护负担和复杂性。
如果您使用 Tuist 来分发任务,我们建议您构建自己的
ProjectAutomation.xcframework ,通过let graph = try Tuist.graph() 从逻辑中访问项目图。该命令使用系统进程运行tuist 命令,并返回项目图的内存表示。arm64 和x86_64 的胖二进制文件,并使用
Mise 作为安装工具。要指导 Mise 如何安装你的工具,你需要一个插件仓库。您可以使用
Tuist's 作为参考。tuist-{xxx} ,用户可以通过运行mise install 来安装它,他们可以直接调用它,也可以通过tuist xxx
运行它。[!NOTE] The Future Of Projectautomation
我们计划将
ProjectAutomation和XcodeGraph的模型合并为一个单一的向后兼容框架,向用户公开项目图的整体性。此外,我们还将把生成逻辑提取到一个新的层中,即XcodeGraph,您也可以通过自己的 CLI 使用该层。将其视为构建您自己的 Tuist。
要使用插件,必须将其添加到项目的
<LocalizedLink href="/references/project-description/structs/tuist">Tuist.swift</LocalizedLink>
清单文件中:
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 将从全局缓存目录中获取插件。
[!NOTE] No Version Resolution
您可能已经注意到,我们不提供插件的版本解析。我们建议使用 Git 标签或 SHA 以确保可重复性。
[!TIP] Project Description Helpers Plugins
使用项目描述帮助插件时,包含帮助程序的模块名称就是插件名称
swiftimport ProjectDescription import MyTuistPlugin let project = Project.app(name: "MyCoolApp", platform: .iOS)