Skip to content

翻訳 🌍

このページの翻訳を行ったり、改善したりすることができます。

コントリビュートする

XcodeGenプロジェクトを移行する

XcodeGenは、Xcodeプロジェクトを定義するための設定フォーマットとしてYAMLを使用するプロジェクト生成ツールです。多くの組織は、、Xcodeプロジェクトで作業するときに発生する頻繁なGitの衝突から逃れようとして、これを採用しました。 しかし、頻繁なGitの衝突は、組織が経験する多くの問題の一つに過ぎません。Xcodeは、開発者に多くの複雑さと暗黙的なコンフィギュレーションを提供し、大規模なプロジェクトを維持し最適化することを難しくしている。XcodeGenは、プロジェクトマネージャではなく、Xcodeプロジェクトを生成するツールであるため、設計上、そこでは不十分である。Xcodeプロジェクトを生成する以上のツールが必要な場合は、Tuistを検討するとよいだろう。

::: チップ SWIFT OVER YAML

多くの組織がプロジェクト生成ツールとしてもTuistを好むのは、Swiftを構成フォーマットとして使用しているからだ。Swiftは、開発者が慣れ親しんでいるプログラミング言語であり、Xcodeのオートコンプリート、タイプチェック、検証機能を使用する利便性を提供する。

:::

以下は、XcodeGenからTuistへプロジェクトを移行する際に役立ついくつかの考慮事項とガイドラインです。

プロジェクト生成

TuistもXcodeGenも、generate コマンドを提供し、プロジェクト宣言をXcodeプロジェクトとワークスペースに変換します。

bash
xcodegen generate
bash
tuist generate

違いは、編集体験にある。Tuistでは、tuist edit コマンドを実行すると、Xcodeプロジェクトがその場で生成され、それを開いて作業を始めることができる。これは、プロジェクトに素早く変更を加えたいときに特に便利です。

project.yaml

XcodeGen のproject.yaml 記述ファイルは、Project.swift になります。さらに、ワークスペースでプロジェクトをグループ化する方法をカスタマイズする方法として、Workspace.swift を持つことができます。また、他のプロジェクトのターゲットを参照するターゲットを持つプロジェクトProject.swift を持つこともできます。このような場合、Tuistはすべてのプロジェクトを含むXcode Workspaceを生成します。

bash
/
  project.yaml
bash
/
  Tuist.swift
  Project.swift
  Workspace.swift

::: 先端 XCODEの言語

XcodeGenとTuistの両方がXcodeの言語とコンセプトを受け入れている。しかし、TuistのSwiftベースのコンフィギュレーションは、Xcodeのオートコンプリート、タイプチェック、検証機能を使用する利便性を提供します。

:::

仕様テンプレート

プロジェクト設定のための言語としてのYAMLの欠点の1つは、YAMLファイル間での再利用性をサポートしていないことです。これはプロジェクトを記述するときの共通のニーズであり、XcodeGen は*"templates"* という独自のソリューションで解決しなければなりませんでした。Tuistの再利用性は言語そのものであるSwiftに組み込まれており、project description helpersというSwiftモジュールを通して、すべてのマニフェストファイルにわたってコードを再利用することができます。

swift
import ProjectDescription

extension Target {
  /**
    This function is a factory of targets that together represent a feature.
  */
  static func featureTargets(name: String) -> [Target] {
    // ...
  }
}
swift
import ProjectDescription
import ProjectDescriptionHelpers

let project = Project(name: "MyProject",
                      targets: Target.featureTargets(name: "MyFeature")) 

Released under the MIT License.