Swiftパッケージを移行する
Swift Package Managerは、Swiftコードのための依存関係マネージャとして登場し、意図せずして、プロジェクトを管理し、Objective-Cのような他のプログラミング言語をサポートするという問題を解決することになった。このツールは異なる目的を念頭に置いて設計されたため、Tuistが提供する柔軟性、パフォーマンス、パワーを欠いているため、大規模なプロジェクトを管理するために使用するのは難しいかもしれません。これはScaling iOS at Bumbleの記事でよく捉えられており、Swift Package ManagerとネイティブのXcodeプロジェクトのパフォーマンスを比較した以下の表が含まれています:

Swift Package Managerが同じようなプロジェクト管理の役割を果たせることを考えると、Tuistの必要性に異議を唱える開発者や組織にしばしば出くわす。ある者は移行を敢行し、後になって開発者のエクスペリエンスが著しく低下していることに気づく。例えば、ファイル名の変更に再インデックスに最大15秒かかるかもしれない。15秒だ!
AppleがSwift Package Managerをビルドフォースケールのプロジェクトマネージャーにするかどうかは不明だ。 しかし、そうなる兆候は見られない。実際、私たちは全く逆のことを見ている。彼らはXcodeに触発された決定をしており、暗黙的なコンフィギュレーションを通して利便性を達成しているようなものです。私たちは、Appleが第一原則に立ち返り、例えばプロジェクトを定義するインターフェイスとしてコンパイル言語を使用するなど、依存関係マネージャーとしては意味があってもプロジェクトマネージャーとしては意味がなかったいくつかの決定を見直す必要があると考えている。
SPMは単なるディペンダンシーマネージャーとして。
TuistはSwift Package Managerを依存性マネージャーとして扱い、それは素晴らしいものだ。私たちは依存関係を解決し、それらをビルドするためにそれを使います。そのために設計されているわけではないので、プロジェクトを定義するために使うことはありません。
SwiftパッケージマネージャからTuistへの移行
Swift Package Manager と Tuist の類似点は移行プロセスを簡単にします。主な違いは、Package.swift の代わりにTuistのDSLを使ってプロジェクトを定義することです。
まず、Package.swift ファイルの隣に、Project.swift ファイルを作成します。Project.swift ファイルには、プロジェクトの定義が含まれます。以下は、Project.swift ファイルの例で、1 つのターゲットを持つプロジェクトを定義しています:
swift
import ProjectDescription
let project = Project(
name: "App",
targets: [
.target(
name: "App",
destinations: .iOS,
product: .app,
bundleId: "dev.tuist.App",
sources: ["Sources/**/*.swift"]*
),
]
)いくつか注意すべきことがある:
- ProjectDescription :
PackageDescriptionを使う代わりに、ProjectDescriptionを使うことになる。 - プロジェクト:
パッケージインスタンスをエクスポートする代わりに、プロジェクトインスタンスをエクスポートします。 - Xcode言語: プロジェクトを定義するために使用するプリミティブは、Xcodeの言語を模倣しているため、スキーム、ターゲット、ビルドフェーズなどがあります。
次に、Tuist.swift ファイルを以下の内容で作成する:
swift
import ProjectDescription
let tuist = Tuist()Tuist.swift にはプロジェクトの設定が含まれており、そのパスはプロジェクトのルートを決定するリファレンスとして機能します。Tuistプロジェクトの構造についてはディレクトリ構造ドキュメントを参照してください。
プロジェクトを編集する
`tuist edit`を使って、Xcodeでプロジェクトを編集することができます。コマンドは、開いて作業を開始できるXcodeプロジェクトを生成します。bash
tuist editプロジェクトの規模にもよりますが、一度に使用するか、段階的に使用するかを検討してください。DSLとワークフローに慣れるために、小さなプロジェクトから始めることをお勧めします。私たちのアドバイスは、常に、最も依存度の高いターゲットから始めて、トップレベルのターゲットまで作業することです。
