generated-projects について
Tuistが生成するXcodeプロジェクトを扱う開発者向けの実践ガイドです。buildableFolders、タグによる対象の絞り込み、xcodebuildでのビルドとテストを説明します。
主な機能
- 01buildableFoldersによるファイル管理
- 02ターゲットタグで生成範囲を限定
- 03プロジェクトと依存関係の設定調整
- 04xcodebuildでのビルドとテスト
- 05依存関係やリンカー問題の調査
活用シーン
- 01Tuist workspaceの生成とビルド
- 02指定したテストスイートやケースの実行
- 03プロジェクト領域を絞ったターゲット生成
- 04依存関係やリンカー問題の調査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ tuist/ tuist --skill generated-projectsインストール後、Claude Code で/generated-projectsを入力して読み込まれたか確認します。
詳細
Tuist 生成プロジェクトの使用
クイックスタート
# Generate workspace without opening Xcode
tuist generate --no-open
# Build a scheme with xcodebuild
xcodebuild build -workspace App.xcworkspace -scheme App
# Run tests with xcodebuild
xcodebuild test -workspace App.xcworkspace -scheme AppTests -only-testing AppTests/MyTestCase
プロジェクト定義
ビルド可能なフォルダーを優先する
sources および resources の glob の代わりに buildableFolders を使用してください。ビルド可能なフォルダーはファイルシステムと同期されるため、ファイルを追加または削除しても再生成は不要です。
let target = Target(
name: "App",
buildableFolders: [
"App/Sources",
"App/Resources",
]
)
ターゲットにタグを付けて範囲を絞る
ターゲットタグを使ってプロジェクトの領域をグループ化します。たとえば、次のように指定します。
tag:team:*tag:feature:*tag:layer:*
これらのタグを使うと、後で生成やテストの対象範囲を絞り込みやすくなります。
タグを使ったターゲットメタデータの例:
let target = Target(
name: "PaymentsUI",
metadata: .metadata(tags: [
"tag:team:commerce",
"tag:feature:payments",
"tag:layer:ui",
])
)
対象範囲を絞って作業する場合は、必要なものだけを生成してください。
tuist generate tag:feature:payments
tuist generate PaymentsUI PaymentsTests
ビルド構成を揃える
プロジェクトと外部依存関係のビルド構成を揃えてください。PackageSettings(settings: .settings(configurations: [])) を使ってプロジェクトの構成を反映します。構成が一致しない場合は警告が出ます。
ワークフロー
意図的に生成する
- Xcode の起動を避けるため、自動化やスクリプトでは
tuist generate --no-openを使用してください。 - マニフェストが変更された場合(または依存関係のグラフが変更された場合)は、再生成してください。
- プロダクトが見つからず生成に失敗する場合は、
tuist installを実行して依存関係を解決し、再試行してください。
xcodebuild でビルドする
生成されたワークスペースとスキームを指定して、xcodebuild build を使用してください。
xcodebuild build \
-workspace App.xcworkspace \
-scheme App \
-destination "generic/platform=iOS Simulator"
xcodebuild でテストする
ローカルでテストを実行するには、xcodebuild test を使用してください。tuist test は呼び出すたびにプロジェクトを再生成するため、反復作業が遅くなります。これを避けるため、tuist test よりも xcodebuild test を優先してください。
テストの実行時間を最適化するには、次の点に留意してください。
--only-testingを使用すると、ターゲット全体ではなく、作業中の特定のテストスイートまたはテストケースだけを実行できます。- 必要なテストターゲットを含む範囲で、コンパイル対象が最も少ないスキームを選択してください。これにより、テスト開始前のビルド時間を最小限に抑えられます。
# Run a specific test suite
xcodebuild test \
-workspace App.xcworkspace \
-scheme AppTests \
-only-testing AppTests/MyTestSuite
# Run a single test case
xcodebuild test \
-workspace App.xcworkspace \
-scheme AppTests \
-only-testing AppTests/MyTestSuite/testMyFunction
ガイドライン
buildableFoldersのパスを、ターゲットの実際のファイルシステム上の構成に合わせてください。- 同じターゲットで、
buildableFoldersとsourcesまたはresourcesの glob が重複しないようにしてください。 tuist generate --no-openの実行後、必要に応じて Xcode を手動で開いてください。
トラブルシューティング
静的副作用に関する警告: プロダクトの種類を意図的に調整してください。ローカルターゲットには Target.product を、外部プロダクトには PackageSettings(productTypes:) を使用します。すべてを .framework で動的にするとコンパイルおよび実行はできますが、起動時間に悪影響を及ぼす可能性があります。副作用が発生しない場合は、可能な限り静的プロダクト(静的フレームワークまたはライブラリ)を優先してください。
Objective-C 依存関係によるクラッシュ: 必要に応じて、利用側のターゲットの OTHER_LDFLAGS に -ObjC または -force_load を追加してください。参考:https://tuist.dev/en/docs/guides/features/projects/dependencies#objectivec-dependencies