如何在终端更新Xcode项目中Swift Package Manager的子依赖?
Swift Package Manager间接依赖的终端更新方案
问题根源
xcodebuild -resolvePackageDependencies 只会基于已锁定的Package.resolved文件拉取依赖,不会主动更新间接依赖的版本,再加上Xcode的缓存机制,导致.resolved文件无法即时更新。
实用解决方法
方法1:用SPM原生命令更新(推荐)
切换到项目根目录(也就是.xcodeproj所在的文件夹),执行以下两步:
- 先更新所有直接+间接依赖到最新兼容版本:
swift package update - 再让Xcode项目同步更新后的依赖配置:
(指定xcodebuild -resolvePackageDependencies -project YourProject.xcodeproj -configuration DebugDebug或Release配置能减少缓存干扰)
方法2:清缓存后强制更新
如果方法1没起效,大概率是缓存搞的鬼,先清掉相关缓存:
- 删除SPM本地缓存:
rm -rf ~/Library/Caches/org.swift.swiftpm - 删除项目的DerivedData:
rm -rf ~/Library/Developer/Xcode/DerivedData/YourProject-* - 删除项目根目录的
.build文件夹(如果存在):rm -rf .build - 最后重新执行更新和解析:
swift package update xcodebuild -resolvePackageDependencies -project YourProject.xcodeproj
方法3:重置.resolved文件(极端情况)
要是上面的方法都不管用,直接删掉项目根目录的Package.resolved文件,然后执行:
swift package resolve xcodebuild -resolvePackageDependencies -project YourProject.xcodeproj
这会让SPM重新计算所有依赖的最新兼容版本,生成全新的.resolved文件。
注意事项
swift package update是SPM的原生命令,会递归处理所有直接和间接依赖,比xcodebuild的解析命令更彻底。- 执行完命令后,
.resolved文件会即时更新,不需要重新打开Xcode,下次打开Xcode时会自动加载新的依赖配置。
内容的提问来源于stack exchange,提问作者Arietis
相关产品推荐
相关产品推荐

