Allow excluding dependencies from transitive linking #1582
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #1580
tl;dr
This change adds a property to the Dependency object such that the dependency will only be included as a dependency of a target if it is declared as a dependency directly in the target itself, and not if it is a transitive dependency.
Description
Let's say you have the following
project.yml
:Before this change, both
AppTarget
andFeatureModule
would includeSomePackage
as a dependency (in fact it would be included in any target that includesFeatureModule
as a dependency, even transitively). After this change, it will only be included inFeatureModule
.I'm open to alternatives in both naming and implementation. This just seemed like the easiest way to do it.
Why?
There's more information in the issue #1580, but the tl;dr is that if you have a Swift Package that is an XCFramework that wraps a static library and it gets included in more than one target, you'll get build errors. You should only include that package into one target -- adding it to more brings build errors.