My package has a target named MessagePack. I am writing benchmarks to compare my package with other packages, so I need to add those other packages as dependencies of my package.
One of those dependencies also has a target named MessagePack. To avoid the naming conflict, I am attempting to use the moduleAliases feature to rename the dependency’s MessagePack target to FlightSchoolMessagePack:
However, the Swift package manager still complains:
multiple targets named 'MessagePack' in: 'messagepack', 'msgpack-swift'; consider using the moduleAliases parameter in manifest to provide unique names
Am I misunderstanding something or is this a bug in SwiftPM?
The package manager error goes away if I add a target dependency on a product with the module alias. But now I get the following build error:
Build service could not create build operation: unable to load transferred PIF: PIFLoader: GUID 'PRODUCTREF-PACKAGE-PRODUCT:MessagePack--1CE3093E568ECCB1-dynamic' has already been registered
The moduleAliases is meant to be used as a property of a product dependency, not a package dependency. It unfortunately had to be declared public in Package.Dependency at the time it was added due to the need for intra-module visibility, which was before a new access level package was introduced (swift 5.9) that allows the visibility needed (between modules but not to an external client). There are other properties such as .targetItem(name:...) that were made public for the same reason. Once modified with the new access level package, they should be hidden from users.