{"id":14329,"plugin_id":"plugin_asdk_app_69fa07fe5ba48191a4ea47c4d7d55a69","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T23:09:17.136Z","digest":"53119d8a43e70a2ed7f9a783106519f905ab3d383e0219cb5e71c5b83e5adaa9","against":null,"payload":{"description":"Guides day-to-day work in Tuist-generated Xcode workspaces, including generation, build and test commands, and buildable folders. Use when working in a Tuist-generated project or when users mention `tuist generate`, `xcodebuild test`, or generated workspaces.","included_files":[],"name":"generated-projects","skill_md_contents":"---\nname: generated-projects\ndescription: Guides day-to-day work in Tuist-generated Xcode workspaces, including generation, build and test commands, and buildable folders. Use when working in a Tuist-generated project or when users mention `tuist generate`, `xcodebuild test`, or generated workspaces.\n---\n\n# Using Tuist Generated Projects\n\n## Quick Start\n\n```bash\n# Generate workspace without opening Xcode\ntuist generate --no-open\n\n# Build a scheme with xcodebuild\nxcodebuild build -workspace App.xcworkspace -scheme App\n\n# Run tests with xcodebuild\nxcodebuild test -workspace App.xcworkspace -scheme AppTests -only-testing AppTests/MyTestCase\n```\n\n## Project definition\n\n### Prefer buildable folders\n\nUse `buildableFolders` instead of `sources` and `resources` globs. Buildable folders stay synchronized with the file system, so adding or removing files does not require regeneration.\n\n```swift\nlet target = Target(\n  name: \"App\",\n  buildableFolders: [\n    \"App/Sources\",\n    \"App/Resources\",\n  ]\n)\n```\n\n### Tag targets for focus\n\nUse target tags to group areas of the project, for example:\n\n- `tag:team:*`\n- `tag:feature:*`\n- `tag:layer:*`\n\nThese tags make it easier to scope generation and testing later.\n\nExample target metadata with tags:\n\n```swift\nlet target = Target(\n  name: \"PaymentsUI\",\n  metadata: .metadata(tags: [\n    \"tag:team:commerce\",\n    \"tag:feature:payments\",\n    \"tag:layer:ui\",\n  ])\n)\n```\n\nWhen working on a focused area, generate only what you need:\n\n```bash\ntuist generate tag:feature:payments\ntuist generate PaymentsUI PaymentsTests\n```\n\n### Align build configurations\n\nKeep build configurations aligned between the project and external dependencies. Use `PackageSettings(settings: .settings(configurations: []))` to mirror project configurations; mismatches emit warnings.\n\n## Workflows\n\n### Generate intentionally\n\n- Use `tuist generate --no-open` in automation and scripts to avoid launching Xcode.\n- Regenerate when any manifest changes (or the dependency graph changes).\n- If generation fails due to missing products, run `tuist install` to resolve dependencies and retry.\n\n### Build with xcodebuild\n\nUse `xcodebuild build` against the generated workspace and scheme.\n\n```bash\nxcodebuild build \\\n  -workspace App.xcworkspace \\\n  -scheme App \\\n  -destination \"generic/platform=iOS Simulator\"\n```\n\n### Test with xcodebuild\n\nUse `xcodebuild test` for running tests locally. Prefer it over `tuist test` because `tuist test` regenerates the project on each invocation, which slows down iteration.\n\nTo optimize test run time:\n\n- **Use `--only-testing`** to run only the specific test suite or test case you are working on, instead of the full target.\n- **Pick the scheme with the fewest compilation targets** that still includes the test target you need. This minimizes build time before tests run.\n\n```bash\n# Run a specific test suite\nxcodebuild test \\\n  -workspace App.xcworkspace \\\n  -scheme AppTests \\\n  -only-testing AppTests/MyTestSuite\n\n# Run a single test case\nxcodebuild test \\\n  -workspace App.xcworkspace \\\n  -scheme AppTests \\\n  -only-testing AppTests/MyTestSuite/testMyFunction\n```\n\n## Guidelines\n\n- Keep `buildableFolders` paths aligned to the target's real file system layout.\n- Avoid overlapping `buildableFolders` with `sources` or `resources` globs in the same target.\n- Open Xcode manually when needed after running `tuist generate --no-open`.\n\n## Troubleshooting\n\n**Static side effects warnings:** adjust product types deliberately. Use `Target.product` for local targets and `PackageSettings(productTypes:)` for external products. Making everything dynamic with `.framework` can compile and run, but it may hurt launch time. Prefer static products (static frameworks or libraries) when possible and when they do not introduce side effects.\n\n**Objective-C dependency crashes:** add `-ObjC` or `-force_load` via `OTHER_LDFLAGS` on consuming targets as needed. Reference: `https://tuist.dev/en/docs/guides/features/projects/dependencies#objectivec-dependencies`.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}