Skip to content

Translation 🌍

You can translate or improve the translation of this page.

Contribute

插件

插件是在多个项目中共享和重用 Tuist 工具的工具。支持以下工件:

请注意,插件的设计初衷是作为扩展 Tuist 功能的一种简单方式。因此,,需要考虑一些限制

  • 一个插件不能依赖于另一个插件。
  • 插件不能依赖第三方 Swift 软件包
  • 插件不能使用使用该插件的项目中的项目描述助手。

如果您需要更多灵活性,可以考虑为工具提出功能建议,或者在 Tuist 的生成框架 TuistGenerator 上构建自己的解决方案。

插件类型

项目描述辅助插件

项目描述辅助插件由一个目录表示,该目录包含一个Plugin.swift manifest 文件,其中声明了插件的名称,以及一个ProjectDescriptionHelpers 目录,其中包含辅助 Swift 文件。

代码组

bash
import ProjectDescription

let plugin = Plugin(name: "MyPlugin")
bash
.
├── ...
├── Plugin.swift
├── ProjectDescriptionHelpers
└── ...

:::

资源访问器模板插件

如果需要共享合成的资源访问器,可以使用这种类型的插件。插件由一个包含Plugin.swift manifest 文件(声明插件名称)和ResourceSynthesizers 目录(包含资源访问器模板文件)的目录表示。

代码组

bash
import ProjectDescription

let plugin = Plugin(name: "MyPlugin")
bash
.
├── ...
├── Plugin.swift
├── ResourceSynthesizers
├───── Strings.stencil
├───── Plists.stencil
├───── CustomTemplate.stencil
└── ...

:::

模板名称是资源类型的 camel case 版本:

资源类型模板文件名称
弦乐字符串模板
资产Assets.stencil
财产清单Plists.stencil
字体字体模板
核心数据CoreData.stencil
界面生成器InterfaceBuilder.stencil
JSONJSON.stencil
YAMLYAML.stencil

在项目中定义资源合成器时,可以指定插件名称,以便使用插件中的模板:

swift
let project = Project(resourceSynthesizers: [.strings(plugin: "MyPlugin")])

任务插件 deprecated

DEPRECATED

任务插件已过时。如果您正在为您的项目寻找自动化解决方案,请查看 本博文

任务是$PATH-exposed executables(暴露的可执行文件),如果它们遵循命名规范tuist-<task-name> ,则可通过tuist 命令调用。在早期版本中,Tuist 在tuist plugin 下提供了一些弱约定和工具,用于build,run,testarchive 任务,这些任务由 Swift 包中的可执行文件表示,但我们已弃用这一功能,因为它增加了工具的维护负担和复杂性。

如果您使用 Tuist 来分发任务,我们建议您构建自己的

  • 您可以继续使用随每个 Tuist 版本发布的ProjectAutomation.xcframework ,通过let graph = try Tuist.graph() 从逻辑中访问项目图。该命令使用系统进程运行tuist 命令,并返回项目图的内存表示。
  • 要发布任务,我们建议在 GitHub 发布中加入支持arm64x86_64 的胖二进制文件,并使用 Mise 作为安装工具。要指导 Mise 如何安装你的工具,你需要一个插件仓库。您可以使用 Tuist's 作为参考。
  • 如果将工具命名为tuist-{xxx} ,用户可以通过运行mise install 来安装它,他们可以直接调用它,也可以通过tuist xxx 运行它。

THE FUTURE OF PROJECTAUTOMATION

我们计划将ProjectAutomationXcodeGraph 的模型合并为一个单一的向后兼容框架,向用户公开项目图的整体性。此外,我们还将把生成逻辑提取到一个新的层中,即XcodeGraph ,您也可以通过自己的 CLI 使用该层。将其视为构建您自己的 Tuist。

使用插件

要使用插件,必须将其添加到项目的

`Tuist.swift`

清单文件中:

swift
import ProjectDescription


let tuist = Tuist(
    project: .tuist(plugins: [
        .local(path: "/Plugins/MyPlugin")
    ])
)

如果想在不同版本库的项目中重复使用插件,可以将插件推送到 Git 版本库,并在Tuist.swift 文件中引用它:

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 将从全局缓存目录中获取插件。

NO VERSION RESOLUTION

您可能已经注意到,我们不提供插件的版本解析。我们建议使用 Git 标签或 SHA 以确保可重复性。

PROJECT DESCRIPTION HELPERS PLUGINS

使用项目描述帮助插件时,包含帮助程序的模块名称就是插件名称

swift
import ProjectDescription
import MyTuistPlugin
let project = Project.app(name: "MyCoolApp", platform: .iOS)

Released under the MIT License.