コンテンツへスキップ

Tuist v3 から v4 へ

Tuist 4 のリリースに伴い、プロジェクトの長期的な使いやすさと保守性を向上させるため、いくつかの破壊的変更を導入しました。このドキュメントでは、Tuist 3 から Tuist 4 へアップグレードするためにプロジェクトに適用すべき変更点を説明します。

tuistenv によるバージョン管理の廃止#

Tuist 4 より前は、インストールスクリプトが tuistenv というツールをインストールし、インストール時に tuist にリネームしていました。このツールは Tuist のバージョンをインストールしてアクティブ化し、環境間での決定性を保証していました。Tuist の機能範囲を縮小するため、私たちは tuistenv を廃止し、同じ役割を果たしつつより柔軟でさまざまなツールで使用できる Mise を採用することにしました。tuistenv を使用していた場合は、curl -Ls https://uninstall.tuist.io | bash を実行して現在の Tuist バージョンをアンインストールし、任意のインストール方法で再インストールする必要があります。Mise は環境間で決定論的にバージョンをインストールおよびアクティブ化できるため、その使用を強く推奨します。

bash
curl -Ls https://uninstall.tuist.io | bash
CI 環境および Xcode プロジェクトにおける Mise

Mise がもたらす決定性を受け入れる場合は、CI 環境 および Xcode プロジェクト で Mise を使用する方法に関するドキュメントを確認することをお勧めします。

Homebrew に対応

macOS で人気のあるパッケージマネージャーである Homebrew を使用して、引き続き Tuist をインストールできます。Homebrew を使用した Tuist のインストール手順については、インストールガイドをご覧ください。

init モデルから ProjectDescription コンストラクタの削除#

API の可読性と表現力を向上させるため、すべての ProjectDescription モデルから init コンストラクタを削除しました。各モデルには、インスタンスを作成するために使用できる静的コンストラクタが用意されています。init コンストラクタを使用していた場合は、代わりに静的コンストラクタを使用するようにプロジェクトを更新してください。

命名規則

私たちが従う命名規則では、モデル名を静的コンストラクタの名前として使用します。例えば、Target モデルの静的コンストラクタは Target.target です。

--no-cache から --no-binary-cache への名称変更#

--no-cache フラグの意味が曖昧だったため、バイナリキャッシュを参照することを明確にするために --no-binary-cache に名称を変更しました。--no-cache フラグを使用していた場合は、代わりに --no-binary-cache フラグを使用するようにプロジェクトを更新してください。

tuist fetch から tuist install への名称変更#

業界の慣習に合わせて、tuist fetch コマンドを tuist install に名称変更しました。tuist fetch コマンドを使用していた場合は、代わりに tuist install コマンドを使用するようにプロジェクトを更新してください。

依存関係の DSL として Package.swift を採用#

Tuist 4 より前は、Dependencies.swift ファイルで依存関係を定義できました。この独自形式により、Dependabot や Renovatebot などのツールによる依存関係の自動更新サポートが失われていました。さらに、ユーザーにとって不要な間接層をもたらしていました。そのため、Tuist では依存関係を定義する方法として Package.swift のみを使用することを採用しました。Dependencies.swift ファイルを使用していた場合は、Tuist/Dependencies.swift の内容をルートにある Package.swift に移動し、#if TUIST ディレクティブを使用して統合を設定する必要があります。Swift Package の依存関係を統合する方法の詳細については、こちらをご覧ください。

tuist cache warm から tuist cache への名称変更#

簡潔さのため、tuist cache warm コマンドを tuist cache に名称変更しました。tuist cache warm コマンドを使用していた場合は、代わりに tuist cache コマンドを使用するようにプロジェクトを更新してください。

tuist cache print-hashes から tuist cache --print-hashes への名称変更#

tuist cache print-hashes コマンドを tuist cache --print-hashes に名称変更し、これが tuist cache コマンドのフラグであることを明確にしました。tuist cache print-hashes コマンドを使用していた場合は、代わりに tuist cache --print-hashes フラグを使用するようにプロジェクトを更新してください。

キャッシングプロファイルの削除#

Tuist 4 より前は、Tuist/Config.swift でキャッシュの設定を含むキャッシングプロファイルを定義できました。プロジェクト生成時に使用したプロファイルとは異なるプロファイルを使用して生成プロセスで利用すると混乱を招く可能性があるため、この機能を削除することにしました。さらに、デバッグプロファイルを使用してアプリのリリースビルドを行うなど、予期しない結果を招く可能性がありました。代わりに、プロジェクト生成時に使用する構成を指定できる --configuration オプションを導入しました。キャッシングプロファイルを使用していた場合は、代わりに --configuration オプションを使用するようにプロジェクトを更新してください。

引数の採用に伴う --skip-cache の削除#

どのターゲットでバイナリキャッシュをスキップするかを引数で制御できるようにするため、generate コマンドから --skip-cache フラグを削除しました。--skip-cache フラグを使用していた場合は、代わりに引数を使用するようにプロジェクトを更新してください。

bash
tuist generate --skip-cache Foo
bash
tuist generate Foo

署名機能の廃止#

署名は、Fastlane や Xcode 自体といったコミュニティツールによってすでに解決されており、それらのほうがはるかに優れています。署名は Tuist にとって過剰な目標であり、プロジェクトのコア機能に集中するほうが良いと考えました。リポジトリ内の証明書とプロファイルを暗号化し、生成時に適切な場所にインストールする Tuist の署名機能を使用していた場合は、プロジェクト生成前に実行する独自のスクリプトでそのロジックを再現することを検討してください。具体的には以下のとおりです。

  • ファイルシステムまたは環境変数に保存されたキーを使用して証明書とプロファイルを復号し、証明書をキーチェーンに、プロビジョニングプロファイルを ~/Library/MobileDevice/Provisioning\ Profiles ディレクトリにインストールするスクリプト。
  • 既存のプロファイルと証明書を取得して暗号化するスクリプト。
署名の要件

署名には、キーチェーンに必要な証明書が存在し、プロビジョニングプロファイルが ~/Library/MobileDevice/Provisioning\ Profiles ディレクトリに存在している必要があります。security コマンドラインツールを使用してキーチェーンに証明書をインストールし、cp コマンドを使用してプロビジョニングプロファイルを適切なディレクトリにコピーできます。

Dependencies.swift を介した Carthage 統合の廃止#

Tuist 4 より前は、Carthage の依存関係を Dependencies.swift ファイルで定義でき、ユーザーは tuist fetch を実行してそれらを取得できました。Swift Package Manager が依存関係管理の好ましい方法となる将来を考えると、これも Tuist にとって過剰な目標であると考えました。Carthage の依存関係を使用していた場合は、Carthage を直接使用してプリコンパイルされたフレームワークと XCFramework を Carthage の標準ディレクトリに取得し、TargetDependency.xcframework および TargetDependency.framework ケースを使用してターゲットからそれらのバイナリを参照する必要があります。

Carthage は引き続きサポートされています

一部のユーザーは、私たちが Carthage のサポートを終了したと誤解しました。そうではありません。Tuist と Carthage の出力との間の契約は、システムに保存されたフレームワークと XCFramework です。変更されたのは、依存関係の取得を担当する主体だけです。以前は Carthage を介して Tuist が行っていたものが、現在は Carthage 自体が行います。

TargetDependency.packagePlugin API の削除#

Tuist 4 より前は、TargetDependency.packagePlugin ケースを使用してパッケージプラグインの依存関係を定義できました。Swift Package Manager が新しいパッケージタイプを導入するのを見て、より柔軟で将来に対応できる API へと改良することにしました。TargetDependency.packagePlugin を使用していた場合は、代わりに TargetDependency.package を使用し、使用したいパッケージのタイプを引数として渡す必要があります。

非推奨 API の削除#

Tuist 3 で非推奨とマークされていた API を削除しました。非推奨の API を使用していた場合は、新しい API を使用するようにプロジェクトを更新する必要があります。