Hello
,
You might know that Xcode 16 introduced a new concept in Xcode projects aimed at mitigating frequent merge conflicts: buildable folders. Although merge conflicts don’t happen that regularly in Tuist, thanks to wildcard references between your target definitions and the file system, there are a couple of scenarios where they play a key role:
- Preventing inconsistencies between your manifest definition and the generated Xcode project. For example, if a developer adds a file to the project that’s not captured by the wildcard, the error will likely surface the next time they generate the project or push their changes upstream.
- Preventing agents from having to regenerate the Xcode project on every file operation, which adds time to the feedback loop of agents.
To address this, we’ve added support for buildable folders in generated projects:
let target = Target(
// sources: ["Sources/**/*.swift"],
// resources: ["Resources/**"],
buildableFolders: [
"Sources/",
"Resources/"
]
)
Buildable folders (internally referred to in Xcode as syncable groups) support additional features that we don’t yet support. In XcodeProj’s terminology, you can add “exceptions” to syncable groups—for example, to exclude a particular file or to add compiler flags to a specific file.
If you haven’t tried them yet, we recommend giving them a shot. We’ve started using them ourselves.