无法创建Swift Package Manager库,发布匈牙利算法库遇阻求助
我太懂这种憋屈感了——好不容易把匈牙利算法用Swift撸完,想着打包成库分享出去,结果卡在SPM这儿,连新建仓库都救不了,再加上网上搜的都是好几年前的老文档,简直头大!我来给你分享几个我踩过的坑和排查步骤,应该能帮你解决:
第一步:先把
Package.swift的配置盯死 SPM的核心就是这个配置文件,很多问题都出在这儿:
- 检查
products节点:必须明确声明你的库类型,比如:products: [ .library( name: "HungarianAlgorithm", // 这个名字是其他项目引用时要用到的 targets: ["HungarianAlgorithm"] // 要和下面targets里的名字完全一致 ), ], - 确认
targets的路径:如果你的源码放在Sources/HungarianAlgorithm目录下,target的配置可以不用写path(SPM会自动匹配),但如果路径特殊,一定要指定path: "你的源码路径",别写错文件夹名。 - 排查依赖:如果你的库用到了非系统默认的框架,要在
dependencies里正确声明,不过一般纯Swift算法库可能只需要Foundation,这个不用额外加,SPM会自动处理。
第二步:GitHub仓库的细节不能漏
SPM对GitHub仓库的要求有点“矫情”,这些点一定要做:
- 仓库必须是公开的(私有库需要配置权限,先搞成公开测试最稳妥)。
- 给仓库打一个语义化版本的Tag,比如
1.0.0。SPM非常依赖Tag来识别可安装的版本,没有Tag的话,其他项目根本找不到你的库。打Tag的命令:
别只push分支,一定要把Tag推上去!git tag 1.0.0 git push origin --tags - 确保
Package.swift在仓库的主分支根目录(比如main分支的最外层),别把它藏在子文件夹或者其他分支里。
第三步:测试引用的姿势要正确
有时候不是库的问题,是引用的方式错了:
- 远程引用时,URL要写对:要么是完整的
https://github.com/你的用户名/仓库名.git,要么简化成github.com/你的用户名/仓库名,SPM都能识别。 - 本地测试可以先试试路径引用:在其他项目的
Package.swift里写.package(path: "../HungarianAlgorithm"),先确保本地能拉取成功,再推到GitHub测远程。 - 别忘了在目标项目的target依赖里添加你的库:比如在
targets里的对应target中,加上.product(name: "HungarianAlgorithm", package: "HungarianAlgorithm"),这里的两个名字要和你自己库的Package.swift里的一致。
第四步:清缓存!清缓存!清缓存!
SPM的缓存经常搞事情,尤其是你改了配置之后:
- 清空SPM缓存的命令:
rm -rf ~/Library/Caches/org.swift.swiftpm - 然后重启Xcode,再重新添加依赖,很多时候莫名其妙的错误就这么解决了。
- 如果Xcode的提示太模糊,用命令行测试:在目标项目根目录执行
swift package resolve,终端会输出详细的错误信息,比Xcode的弹窗有用多了。
另外提一句关于文档的事:苹果官方的SPM文档其实一直在更新,你直接在Xcode里按Shift+Command+0打开开发者文档,搜索「Swift Package Manager」,里面的内容都是最新的。还有个偷懒的办法——找几个热门的Swift库(比如Alamofire),看看人家的Package.swift怎么写的,抄作业永远是最快的!
内容的提问来源于stack exchange,提问作者Javier Sagredo
相关产品推荐
相关产品推荐

