向Xcode工作区多Target添加同一Package失败问题求助
解决Xcode多Target重复引入同一Package的命名冲突问题
你遇到的问题是因为Xcode默认会全局管理Package依赖,同一个仓库的Package只会被解析一次,但如果通过界面分别给两个Target添加,会导致Xcode尝试创建两个独立的Package实例,触发同名产品/目标的冲突。以下是不用建立Target间依赖的解决办法:
方法一:用根Package.swift统一管理依赖
如果你的工作区没有根Package.swift,先在工作区根目录新建一个,然后按下面的配置修改:
let package = Package( name: "你的工作区名称", dependencies: [ // 只声明一次git_repo_A的依赖 .package(url: "git_repo_A的Git地址", from: "指定版本号") ], targets: [ // 给Target_A添加ABC产品依赖 .target( name: "Target_A", dependencies: [.product(name: "ABC", package: "git_repo_A")] ), // 给Target_B添加ABC产品依赖 .target( name: "Target_B", dependencies: [.product(name: "ABC", package: "git_repo_A")] ) ] )
这样Xcode只会拉取和构建一次git_repo_A,两个Target都能使用ABC,且互相独立,没有依赖关系。
方法二:在Xcode界面中统一添加后关联多Target
- 打开Xcode工作区,进入
File > Add Packages...,添加一次git_repo_A到工作区的Package Dependencies中 - 在左侧导航栏选中添加好的git_repo_A,点击右侧面板的
Add to Target按钮 - 分别勾选Target_A和Target_B,完成关联
这种方式不会创建重复的Package引用,Xcode会用同一个实例给两个Target提供ABC,避免冲突。
方法三:修改源Package的模块名(有权限修改git_repo_A时用)
如果你能修改git_repo_A的Package.swift,可以给ABC目标设置唯一的模块名,避免同名冲突:
// git_repo_A根目录的Package.swift .target( name: "ABC", path: "ABC.xcframework所在的路径", moduleName: "UniqueABC" // 设置一个唯一的模块名 )
之后在两个Target中引入UniqueABC模块即可,这样即使多次引用也不会触发命名冲突。
内容的提问来源于stack exchange,提问作者Amit Nadir
相关产品推荐
相关产品推荐

