升级了Xcode10之后,因为项目没有新需求,就去写其他东西了,一直没运行过以前的项目,昨天朋友问我问题,运行了一下以前的项目,发现不能编译通过,报错,网上各种找答案之后解决了,现在把自己遇到的问题整理一下,方便其他遇到相同问题的人。
首先,运行项目之后报下面的错,找不到sdk:
原因说的很清楚了,找不到sdk,在TARGETS -> Build Settings -> Base SDK查看也显示“iphoneos11.4(SDK not found)”解决方案:把Base SDK 选择改成 “iOS”,如下图:
sdk not found solution.jpg
(注意是TARGETS下修改,我之前没注意,查看的是PROJECT里面的,发现本来就是选择的iOS,就一直没找到)
修改好之后,再运行,又报错,info.plist重复:
Multiple commands produce problem.jpg
解决方案1:
1.Build Phases ->Copy Bundle Resources
2.搜索找到info.plist,删除它
3.clean一下
解决方案2:Xcode -> File -> Project Settings/Workspace Setting -> Build System -> Legacy Build System
Xcode9之后,Xcode新增了一个构建系统“New Build System”(新构建系统),在Xcode10中默认使用New Build System,这套编译会严格解析各个文件的依赖关系。旧的构建系统称为 legacy build system (传统构建系统),切换成Legacy Build System则是表示使用之前的构建系统。
重新运行项目,接着报错,library not found for -lstdc++.6.0.9:
linker command failed.jpg
查看项目里面framwork中发现libstdc++.6.0.9.tdb变红
libstdc++.6.0.9.tbd变红.jpg
苹果的解释是libstdc++已经标记为废弃有5年了,建议大家使用经过了llvm优化过并且全面支持C++11的libc++库。而这次Xcode10中已经彻底移除了libstdc++及其相关库,如果没有用到的不用修改,但是目前有的三方库中会依赖libstdc++,目前临时的解决办法是将以前的Xcode中的libstdc++、libstdc++.6、libstdc++6.0.9拷贝到Xcode10中,在网上找到了一份制作好的libstdc++库,这里给出链接(经过作者同意后转载,该作者原文章地址:https://www.jianshu.com/p/6d94278d62b3):下载地址按照下载链接中的说明,将库复制到相应目录中。再运行项目,就可以正常运行了。