- Swift Package 报 error: Could not compute dependency graph: unable to load transferred PIF: The workspace contains multiple references with the same GUID ‘PACKAGE: *****************::MANGROUP’
这个问题我们可以通过清除缓存来解决:
Swift Package 的缓存在下面两个目录里:
- ~/Library/Developer/Xcode/DerivedData/* (一般清除这里的就这里,如果这个清除的还不行,再把下面的也清除掉)
- ~/Library/Caches/org.swift.swiftpm
我们可以手动将这两个目录下的缓存清除掉然后再重启Xcode 加载Package 编译就可以了,
或者我们可以写一个脚本,每次需要清缓存的时候直接执行脚本就行, 对应shell 脚本如下:
echo "> Restoring your environment..."
echo "> Deep Cleaning..."
echo "> Killing xcode to clear out derived data"
kill $(ps aux | grep 'Xcode' | awk '{print $2}')
echo "> Destroying derived data"
rm -rf ~/Library/Developer/Xcode/DerivedData/*
echo "> Deleting SPM Cache"
rm -rf ~/Library/Caches/org.swift.swiftpm
echo "> Resolving Dependcies..."
xcodebuild -resolvePackageDependencies -scmProvider system
echo "> Opening the workspace..."
open BoseWillow.xcworkspace/
echo "> Restoration complete."
-
kill $(ps aux | grep 'Xcode' | awk '{print $2}')是查找并杀掉所有正在运行的 “Xcode” 进程 -
ps aux : 列出当前系统中所有正在运行的进程,包含用户、CPU 使用率、内存、PID(进程 ID)等信息。
-
grep 'Xcode': 在所有进程列表中查找包含 Xcode 字样的进程行。这会匹配到 Xcode 本身,也可能匹配到一些子进程或包含 Xcode 字符串的命令行。
-
awk '{print $2}'从匹配到的每一行中提取第二列的内容。在 ps aux 的输出中,第二列就是 PID(进程 ID)。 -
kill $( ... ):$( ... ) 是命令替换,把里面命令的输出作为参数传给 kill。最终的效果就是:kill 后面跟上所有 Xcode 相关进程的 PID,从而结束它们。 -
rm -rf ~/Library/Developer/Xcode/DerivedData/*和rm -rf ~/Library/Caches/org.swift.swiftpm是移除指定目录下的文件 -
xcodebuild -resolvePackageDependencies -scmProvider system是让 Xcode 提前解析并下载 Swift Package Manager 的依赖,并指定使用系统的 git(或其它 SCM 工具)来拉取代码。 -
open BoseWillow.xcworkspace/是打开项目











网友评论