This is a good reason why package names should be clear and specific,
avoiding common phrases and terms that will overlap.
A proven way to avoid such issues is to namespace your packages in some
way, e.g. prefer SadunStringUtilities vs SwiftString.
At this time there is no built-in way that I know of how to deal with
module name collisions. So let me speculate about what
a solution might look like. (Skip to the next message if this doesn't
interest.) Having a reverse domain name as
part of the Package declaration syntax maybe could address part of the
issue, for example:
import PackageDescription
let package = Package(
name: "SwiftString"
origin: "com.sadun"
)
and in the case of name conflicts use:
import com.sadun.SwiftString
import com.LeeJason.SwiftString
with all the annoying resolution that might involve in disambiguating
symbols. I could also
see some kind of package alias being needed if this problem got too bad,
e.g.
packagealias Sadun = com.sadun.SwiftString
packagealias LeeJ = com.lLeeJason.SwiftString
let x = LeeJ.countStringItems(someString)
but I don't know how Swift would disambiguate, for example, two packages
that both created
public extensions on String both being imported into the same file, and
both offering conflicting, say, properties.
-- Erica
On Feb 1, 2016, at 6:41 PM, Jason Lee via swift-users < > swift-users@swift.org> wrote:
Today I introduced a dependency on another project's package with brought
over a module name that conflicted with one he modules in my project.
Currently my project has multiple modules (and executables) in the package
and everything is working well for me. However, when I got this conflict
today, I was thinking this will be a problem going forward. I'm sure it's
been solved already by the package manager team, but I haven't figured out
how to do this from the docs yet.
An example:
Package 'A' has a module named 'Base'
My package also has a module named 'Base'
When I build, I get a circular ref error now. One way I was thinking I cld
fix this on my end is to prefix all my module names with my package name
(seems redundant, of course). Something like 'Base' becomes 'MyAppBase'.
And my imports could look like so:
import Foundation
import Base
import MyAppBase
Any thoughts on this? Thx.
- jason
Sent from my iPhone
_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users