同一Xcode项目中动态本地Swift Package跨包导入失败的解决方法
问题描述
我有一个包含两个本地动态Package(PackageA和PackageB)的Xcode项目,希望在PackageB的package.swift中配置依赖,使其能够导入PackageA并在PackageB中使用;同时Xcode项目因已导入PackageB,可同时使用这两个包。但当前配置下PackageB无法找到PackageA,附上两个包的package.swift代码如下:
// PackageB的package.swift let package = Package( name: "PackageB", products: [ .library( name: "PackageB", targets: ["PackageB"]), ], dependencies: [ // Dependencies declare other packages that this package depends on. // .package(url: /* package url */, from: "1.0.0"), ], targets: [ .target( name: "PackageB", dependencies: ["PackageA"]), .testTarget( name: "PackageBTests", dependencies: ["PackageB"]), ] ) // PackageA的package.swift let package = Package( name: "PackageA", products: [ .library( name: "PackageA", targets: ["PackageA"]), ], dependencies: [ // Dependencies declare other packages that this package depends on. // .package(url: /* package url */, from: "1.0.0"), ], targets: [ .target( name: "PackageA", dependencies: []), .testTarget( name: "PackageATests", dependencies: ["PackageA"]), ] )
解决建议
声明本地依赖路径
在PackageB的package.swift的dependencies数组中,添加对PackageA的本地路径引用。根据两个包的实际相对目录调整路径,比如如果两者在同一级目录下,修改如下:dependencies: [ .package(path: "../PackageA") ],明确Target依赖的Product
PackageB的target不能直接写["PackageA"],需要明确指定依赖的是PackageA导出的product,修改target部分:.target( name: "PackageB", dependencies: [.product(name: "PackageA", package: "PackageA")]),刷新Xcode依赖
修改完成后,在Xcode中执行File > Packages > Update to Latest Package Versions,或者重启Xcode,让IDE重新加载依赖配置。额外验证项
- 确认PackageA的
package.swift中products里的name确实是PackageA,和PackageB中引用的名称一致 - 检查相对路径是否正确,避免因路径错误导致无法找到PackageA
- 确认PackageA的
内容的提问来源于stack exchange,提问作者bogen
相关产品推荐
相关产品推荐

