#!/bin/bash
if [[ $# -eq 0 ]] ; then
echo 'Please call the script with the name of your project as it appears in the derived data directory. Case-insensitive.'
echo 'For example: ./fix-spm-cache.sh myproject'
exit 0
fi
# Delete all directories named "remotes" from the global Swift Package Manager cache.
cd ~/Library/Caches/org.swift.swiftpm/repositories
for i in $(find . -name "remotes" -type d); do
echo "Deleting $i"
rm -rf $i
done
# Find derived data directories for all projects matching the script argument, and
# delete all directories named "remotes" from source package repositories cache for those projects.
cd ~/Library/Developer/Xcode/DerivedData/
for project in $(find . -iname "$1*" -type d -maxdepth 1); do
for i in $(find "$project/SourcePackages/repositories" -name "remotes" -type d); do
echo "Deleting $i"
rm -rf $i
done
done
5条答案
按热度按时间aor9mmx11#
我想我可能已经发现了这里的问题!经过大量的挖掘,似乎Xcode和Swift PM有一个错误,使用git@而不是https://的repos
使用ssh时,我们会在缓存和派生数据中得到一个挂起的remote/origin/main引用。当使用https时,情况就不是这样了。这是有意义的,因为我们项目中唯一使用ssh的dep是我们的内部dep。
我通过在我们的项目中添加一个全新的第三方依赖项git@github.com:jpsim/Yams.git进行了测试,发现org.swift.swiftpm中该高速缓存更新不正确。
更新:10天后,这似乎是沿着的问题。然而,即使在改变引用,它采取了一个完整的DerivedData/SPM缓存/包。解决擦除之前,Xcode不再有任何参考
git@
repos。我已经提交了一个反馈与苹果的这个错误。tzxcd3kk2#
就像其他人已经回答的那样,这个问题可以通过删除项目的派生数据目录中的Swift包缓存以及
~/Library/Caches/org.swift.swiftpm
中的全局Swift Package Manager缓存来解决。更好的方法是,只删除受影响的remotes
目录,但查找包和文件夹可能会很耗时。下面是我快速编写的一个小脚本,它将删除全局Swift Package Manager缓存和项目的派生数据存储库目录中所有名为
remotes
的目录。如果您将代码保存在一个名为
fix-spm-cache.sh
的文件中,那么您可以执行chmod +x fix-spm-cache.sh
,使该文件成为可执行文件。然后,当您在Xcode中遇到错误时,只需运行带有项目名称(如./fix-spm-cache.sh myproject
)的脚本。您可以在运行脚本时保持Xcode打开。一旦脚本完成执行,请尝试再次解析或更新您的软件包。它应该可以工作,并且应该相对较快,因为我们没有删除整个缓存。
这将解决本主题中提到的错误,以及Xcode 13中发生的臭名昭著的
SwiftPM.SPMRepositoryError error 5
,这可能是同一个错误,只是消息不同。c9qzyr3d3#
今天我觉得挺管用的:
几秒钟后,一切似乎又恢复了正常。
3wabscal4#
有同样的问题,甚至创建了新的回购相同的内容,看看它是工作。最后我找到了一个解决方案,帮助我。
1.从项目中移除包
1.关闭Xcode
1.清洁SPM -
swift package purge-cache
1.删除派生数据-
rm -rf ~/Library/Developer/Xcode/DerivedData
1.打开项目并再次添加包。
P.S.
purge-cache
w/o移除DerivedData
不起作用,但可能只需要移除DerivedData
即可解决此问题。无法重新检查,因为我无法再重现此问题。**UPD:**不需要步骤#3。
yduiuuwa5#
在XCode和AppCode中出现这个问题后,我试图最小化我需要删除的文件夹。XCode和AppCode没有“重置包缓存”按钮,当你删除DerivedData文件夹时,需要永远重新索引整个iOS框架。
我最终得到了以下结果:一旦收到错误消息
git@library-project.git: An unknown error occurred. reference 'refs/remotes/origin/main' not found (-1)
,1.转到DerivedData文件夹(
~/Library/Developer/Xcode/DerivedData/
)(对于AppCode,它位于~/Library/Caches/JetBrains/AppCode2022.2/DerivedData
)1.转到以下目录,当然要与您的项目名称匹配:
<YourProject>-<RandomCharacters>/SourcePackages/repositories/<FailingLibraryProject>-<RandomCharacters>/refs/
1.删除
remotes
文件夹1.在XCode中,单击“文件”-〉“软件包”-〉“解析软件包版本
1.在AppCode中,点击工具-〉Swift软件包管理器-〉解析依赖项。
1.关闭并重新打开XCode
至少对我来说,这就是全部。我想你需要为每一个失败的图书馆项目重复这些步骤。最好的事情是:我再也不需要这样做了,不管我切换了多少次分支或依赖版本:)