プラグイン
プラグインは、複数のプロジェクト間で Tuist の成果物を共有・再利用するためのツールです。以下の成果物がサポートされています:
- プロジェクト記述ヘルパー を複数のプロジェクト間で共有
- テンプレート を複数のプロジェクト間で共有
- タスクを複数のプロジェクト間で共有
- リソースアクセサ テンプレートを複数のプロジェクト間で共有
プラグインは Tuist の機能を簡単に拡張できるように設計されています。そのため、考慮すべき制限事項があります:
- プラグインは他のプラグインに依存できません。
- プラグインはサードパーティの Swift パッケージに依存できません。
- プラグインは、そのプラグインを使用するプロジェクトのプロジェクト記述ヘルパーを使用できません。
より高い柔軟性が必要な場合は、ツールへの機能提案を検討するか、Tuist の生成フレームワークである TuistGenerator を基盤として独自のソリューションを構築することを検討してください。
プラグインの種類#
プロジェクト記述ヘルパー プラグイン#
プロジェクト記述ヘルパー プラグインは、プラグイン名を宣言する Plugin.swift マニフェストファイルと、ヘルパーとなる Swift ファイルを含む ProjectDescriptionHelpers ディレクトリを含むディレクトリで表されます。
import ProjectDescription
let plugin = Plugin(name: "MyPlugin")
.
├── ...
├── Plugin.swift
├── ProjectDescriptionHelpers
└── ...
リソースアクセサ テンプレート プラグイン#
合成リソースアクセサ を共有する必要がある場合は、このタイプのプラグインを使用できます。プラグインは、プラグイン名を宣言する 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 は Swift パッケージ内の実行ファイルで表される build、run、test、および archive タスクに対して、tuist plugin の下でいくつかの緩やかな規約とツールを提供していましたが、ツールのメンテナンス負担と複雑さが増すため、この機能は非推奨となりました。
タスクの配布に Tuist を使用していた場合は、独自の
ProjectAutomation.xcframeworkを引き続き使用して、すべての Tuist リリースとともに配布され、let graph = try Tuist.graph()でロジックからプロジェクトグラフにアクセスできます。このコマンドはシステムプロセスを使用してtuistコマンドを実行し、プロジェクトグラフのメモリ内表現を返します。- タスクを配布するには、GitHub リリースに
arm64およびx86_64をサポートするファットバイナリを含め、インストールツールとして Mise を使用することをお勧めします。Mise にツールのインストール方法を指示するには、プラグインリポジトリが必要です。Tuist のもの を参考として使用できます。 - ツールに
tuist-{xxx}という名前を付け、ユーザーがmise installを実行してインストールできるようにすると、直接呼び出すか、tuist xxxを通じて実行できます。
ProjectAutomation と XcodeGraph のモデルを統合し、プロジェクトグラフの全体をユーザーに公開する単一の後方互換性のあるフレームワークにする予定です。さらに、生成ロジックを新しい層 XcodeGraph に抽出し、独自の CLI から使用できるようにします。独自の Tuist を構築するようなものだと考えてください。
プラグインの使用#
プラグインを使用するには、プロジェクトの 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 がグローバルキャッシュディレクトリにプラグインを取得します。
ご存知の通り、プラグインのバージョン解決は提供していません。再現性を確保するために、Git タグまたは SHA を使用することをお勧めします。
プロジェクト記述ヘルパー プラグインを使用する場合、ヘルパーを含むモジュールの名前はプラグインの名前になります
import ProjectDescription
import MyTuistPlugin
let project = Project.app(name: "MyCoolApp", platform: .iOS)