Swift 5.7中Swift Package Manager缓存的存放路径是什么?
Swift 5.7 SPM标签哈希不匹配问题解决
重打Git标签后触发的does not match previously recorded value报错,是因为漏清理了SPM存储仓库元数据的全局目录,之前清理的缓存路径不包含这部分内容。
触发报错的原始信息:
Revision 30c16cab9c718416fee2191ff2ac0b6f91eeb511 for base
remoteSourceControl https://github.com/myUser/myRepo version 1.0.0
does not match previously recorded value
遗漏的缓存存放位置
Swift 5.7版本的SPM会把远程仓库的标签-提交哈希映射关系、已拉取的仓库裸库存放在非Caches路径下:~/Library/org.swift.swiftpm/
之前清理的~/Library/Caches/org.swift.swiftpm/是临时下载缓存,不存校验用的元数据,所以清完还是会报哈希校验失败。
完整清理操作步骤
执行操作前先退出所有Xcode进程、终止所有运行中的swift命令行任务,避免文件被占用:
- 删除项目本地缓存:项目根目录下的
.build文件夹、Package.resolved文件 - 删除Xcode派生数据:删除
~/Library/Developer/Xcode/DerivedData/下和当前项目对应的子目录 - 删除SPM临时下载缓存:删除
~/Library/Caches/org.swift.swiftpm/整个目录 - 删除遗漏的SPM元数据缓存:删除
~/Library/org.swift.swiftpm/整个目录,该目录会在下次SPM拉取依赖时自动重建,不会产生异常 - 回到项目根目录执行命令重置依赖:
swift package reset swift package resolve - 依赖解析完成后再执行
swift package generate-xcodeproj即可正常生成项目,不会再报哈希不匹配错误。
额外注意
如果后续用Xcode打开项目操作,清理完上述路径后还需要点击Xcode菜单的File > Packages > Reset Package Caches,清空Xcode进程内存中残留的旧依赖记录,避免再次触发同类报错。
内容的提问来源于stack exchange,提问作者Bretsko
相关产品推荐
相关产品推荐

