通过SPM来管理swift开发中第三方库是首选方案,至于为何是首选,有很多人分享,这里就不赘述了。今天分享一个使用SPM遇到的问题,花了我2小时,感觉需要发出来能够对他人有所裨益。
背景
帮一个海外的朋友开发一款SwiftUI的应用,顺便一起学习下SwiftUI开发。我们是通过github来管理项目,我本地使用Github Desktop作为git工具。(github官方出的工具比较香,尤其是对git不是太熟悉的同学,我选择用Desktop是因为sourceTree 在使用翻墙工具以后,会出现 confuse 的错误,使用Desktop就可以丝滑的clone、update。当然sourceTree 最后也解决了confuse的问题,这需要另外开一篇了)
在早上pull了最新的代码,对方主要的更新就是 使用了SPM添加了Alamofire。由于本地没有什么改动,于是就要run,结果 提示 找不到
‘Alamofire’,对方用的好好的,怎么pull到我这边就出错了呢?第一时间去查看packageDependencises,结果就发现👇
过程
看到这个屌样子,就知道是alamofire 虽然在dependencise中,但是没有下载到本地项目中,编译链接不到文件,这个在cocoapods中就是pod install 了,但是这里是SPM呀。怎么实现reload package呢?google大法上也没有找到,找到的大神可以交流下。
然后就想到 右键 PackageDependencies 试了Reset /Resolve,然鹅没屌用,当然也试过clean Xcode,重启大法等等
尴尬了,多试几次,依然是这个问题,确定不是网络问题了,意思Package.resolved,出问题了,导致packageDependencise不工作了,正常情况下,pull了以后,是会自动下载pages的。
于是就开启google大法,看到了Stackoverflow 看了一下就是寻找package.resolved文件,然后移动位置,还有说重启大法的,总之没看太明白,于是就想到官方论坛然后看到 Xcode 13.2.1 Could not resolve package dependencies👇
症状很像呀,窃喜。。不过药方这么简单吗,我看了人家发了两遍药方,重点“Deleting Package.resolved”文件,结合stackOverflow看到方案,病灶应该在Package.resolved文件,那就找呗,
在finder中结果找到两个packeage.resolved文件,删除、clean 然后继续添加page,结果又失败了,同样的错误提示。
这NM..
忽然想到想到我本地其他工程依然丝滑的使用PackageDependences,说明问题在这个项目中,不是xcode的bug之类的,那就在项目中找找,右键 yourApp.xcodeproj文件显示包文件,看到👇
还没有那就继续看.xcworkspace的包内容
这个突然发现了Package.resolved文件了,幸福来的突然了,有点儿不真实,是不是想到刚在finder中删除过这个名字的文件嘛,怎么这里还有?
不管了,删掉Package.resolved,然后+ package,竟然一气呵成了。有点儿懵。。
突然想到stackOverflow中好像提到在项目文件中找这个文件,但是他是让移动文件到bin文件中,然后reset PackageDependencise,最后还是苹果官方给的简单药方管用呀😼
总结反思
一般项目中需要改动或者删除什么隐藏文件之类,应该在该项目中找,这是第一位的,当然也不是绝对,不过方向没错,缩小寻找答案的范围。至于为何pull了项目以后,项目中的Package.resolved文件为何会损坏不可用,还没有找到病根儿,初步猜测是和不同Xcode开发的版本有关系,有发现病根儿的大神不吝赐教呀