Hi, I've just migrated to Swift Tools 6.2 and package traits, and I'm encountering an issue when using traits with multiple targets in the same Xcode workspace.
Setup:
- Main iOS app target
- App Clip target
- Both consume the same local packages (e.g.,
UIComponents)
What I'm trying to achieve:
- Main app imports packages without the
COMPACT_BUILDtrait - App Clip imports packages with the
COMPACT_BUILDtrait enabled
Package configuration (simplified):
// UIComponents/Package.swift
let package = Package(
name: "UIComponents",
platforms: [.iOS(.v18)],
traits: [
.trait(name: "COMPACT_BUILD", description: "Minimal build for App Clips"),
],
// ...
targets: [
.target(
name: "UIComponents",
dependencies: [...],
swiftSettings: [
.define("COMPACT_BUILD", .when(traits: ["COMPACT_BUILD"])),
]
),
]
)
In the code:
#if COMPACT_BUILD
// Excluded from App Clip
#endif
The consumer packages:
Main app's package imports without trait:
.package(path: "../UIComponents")
App Clip's package imports with trait:
.package(path: "../UIComponents", traits: ["COMPACT_BUILD"])
The problem:
When building the main app target, the COMPACT_BUILD compiler condition is unexpectedly active — even though the main app's dependency chain never enables that trait. It seems like the trait enabled by the App Clip target is "leaking" into the main app build.
I confirmed this by adding #error("COMPACT_BUILD is active") — it triggers when building the main app, which shouldn't happen.
If I disable the App Clip target from the build scheme, the main app builds correctly with COMPACT_BUILD not defined.
I am also able to build the App Clip separately.
Environment:
- Xcode 26.2
- swift-tools-version: 6.2
- iOS 26.2
Questions:
- Is this expected behavior with Xcode's SPM integration? Are traits resolved workspace-wide rather than per-target?
- Is there a workaround to have different trait configurations for different targets consuming the same package?
- Or do I need to fall back to separate package targets (e.g.,
UIComponentsandUIComponentsCompact) to achieve this?
Any guidance would be appreciated. Thanks!