Why does TargetDependencyCondition not have a configuration parameter?

In my mission to figure out how to restrict an SPM dependency for Apple Silicon platforms, I was poking around the PackageDescription definition and noticed that if configuration were allowed in TargetDependencyCondition.when, we'd have an available workaround, given that we currently only need to strip Apple Silicon-incompatible dependencies on the .debug configuration.

SE-0273 includes it in a target definition very clearly, but it was not implemented this way.

So why does TargetDependencyCondition.when not offer a configuration option? I can see why this would not typically make sense, but would love to understand more about why it is explicitly not included in this Condition struct given that it was in the proposal.

If it were allowed, this seems like it would offer a pretty easy way to differentiate local dependencies vs. dependencies that are only needed when the application is built for production, which could even help optimize some larger projects as well.

The signature for TargetDependencyCondition.when is:

public static func when(platforms: [PackageDescription.Platform]? = nil) -> PackageDescription.TargetDependencyCondition

while the signature for BuildSettingCondition.when is:

public static func when(platforms: [PackageDescription.Platform]? = nil, configuration: PackageDescription.BuildConfiguration? = nil) -> PackageDescription.BuildSettingCondition
3 Likes

This is one of those feature that you hardly ever need, but when you need it, you really need it.

There already exists a thread about this, but there is no answer.