Xcode 14.1集成Open3D-iOS Swift包报二进制产物缺失错误求助
解决Open3D-iOS Swift包"does not contain expected binary artifact"错误
问题背景
使用Open3D-iOS Swift包时,Xcode更新后持续遇到does not contain expected binary artifact错误。无论是通过Git ZIP链接配置binaryTarget,还是本地引用解压后的XCFramework,均出现相同类型错误,提示下载/本地的二进制目标不包含预期的工件名称。
错误原因
Swift Package Manager(SPM)要求binaryTarget的name必须和XCFramework文件夹内部的框架文件名完全匹配。当前配置的name使用了静态库的原始名称(如libOpen3D_3rdparty_liblzf.a),但XCFramework内部的实际工件名称通常会去掉冗余前缀,导致SPM无法匹配到目标文件。
解决方案步骤
1. 检查XCFramework内部结构
解压任意一个出错的XCFramework压缩包,查看内部的框架真实名称:
- 进入解压后的
.xcframework文件夹,打开对应平台目录(如ios-arm64) - 查看目录内的框架文件名,比如可能是
liblzf.framework而非libOpen3D_3rdparty_liblzf.a.framework
2. 修改binaryTarget的name参数
将binaryTarget的name改为XCFramework内部实际的框架名称,而非静态库的原名称。修改后的配置示例:
.binaryTarget(name: "liblzf", url: "https://github.com/kewlbear/Open3D-iOS/releases/download/0.0.20220804014308/libOpen3D_3rdparty_liblzf.a.xcframework.zip", checksum: "a652bd2ab0c76623bb27268acbd0832326031cb2acc71eda4bc0e36849f64e84"), .binaryTarget(name: "qhull_r", url: "https://github.com/kewlbear/Open3D-iOS/releases/download/0.0.20220804014308/libOpen3D_3rdparty_qhull_r.a.xcframework.zip", checksum: "55c0f90841fa15c7aa6e3de24e719936af7ea09bfe314eb3a1e44b97e0b49a76"), .binaryTarget(name: "qhullcpp", url: "https://github.com/kewlbear/Open3D-iOS/releases/download/0.0.20220804014308/libOpen3D_3rdparty_qhullcpp.a.xcframework.zip", checksum: "a5f2cd5c510dc92920aba4d23e7ee771c43e6f1187930707bccaeeac00e76a57"), .binaryTarget(name: "rply", url: "https://github.com/kewlbear/Open3D-iOS/releases/download/0.0.20220804014308/libOpen3D_3rdparty_rply.a.xcframework.zip", checksum: "9245503d7f4968faa706edce41da5cff5dd2330227234815d7b3855723e189e1"), .binaryTarget(name: "Open3D", url: "https://github.com/kewlbear/Open3D-iOS/releases/download/0.0.20220804014308/libOpen3D.a.xcframework.zip", checksum: "84915b1c787bc97f52b8cc39f51c9452a39ca6c5b83677cf422fd9e876e0794d"),
3. 修正本地XCFramework引用配置
如果使用本地引用,同样要确保name匹配内部框架名称,路径保持正确:
.binaryTarget(name: "liblzf", path: "artifacts/libOpen3D_3rdparty_liblzf.a.xcframework"), .binaryTarget(name: "qhull_r", path: "artifacts/libOpen3D_3rdparty_qhull_r.a.xcframework"), .binaryTarget(name: "qhullcpp", path: "artifacts/libOpen3D_3rdparty_qhullcpp.a.xcframework"), .binaryTarget(name: "rply", path: "artifacts/libOpen3D_3rdparty_rply.a.xcframework"), .binaryTarget(name: "Open3D", path: "artifacts/libOpen3D.a.xcframework"),
4. 清理Xcode缓存
修改配置后,执行以下操作确保缓存被彻底清理:
- 关闭Xcode
- 删除
~/Library/Caches/org.swift.swiftpm目录 - 删除项目的
DerivedData文件夹 - 重新打开项目并更新Swift包
额外检查点
- 确认XCFramework是完整构建的,包含所有需要的平台架构
- 验证SPM配置的
checksum与下载的压缩包一致,避免文件损坏
内容的提问来源于stack exchange,提问作者Sanket Dhuri
相关产品推荐
相关产品推荐

