原文同步发布在devhy.com/2018/06/05/…ios
熬夜看完了WWDC 2018
,睡前电脑挂着下载Xcode10
。手机装好了iOS12
,体验了一番,感受比iOS11快多了,看了一眼各家App和我司的App,松了一口气,初步看来今年应该不须要作太多的适配工做,而后就睡了。(然而, 果真不能立flag!😂)c++
早上晚到了一些,Xcode10解压了一下,开始初步评估一下适配。emmmm,工程跑不起来了...好了果真不能低估,开干。git
一上来就是build没2秒就报错了,看报错的说法是有重复的info.plist。 github
咱们组件化后把一些三方库和封装方法打成了一个私有库。进去看了一下,咱们使用了阿里云统计 + 推送 + Alipay
,里面确实有好几个info.plist
,删除了就行了。xcode
临时解决方案也能够参考 掘金@来来来小牛仔 在评论中提到的:app
参考Stack Overflow中Xcode 10 Error: Multiple commands produce,修改Xcode编译配置
Xcode->File->Project Settings/Workspace Setting-> Build System -> Legacy Build System.
工具
这里定义为临时解决方案的缘由是:使用了Xcode10编译的新特性而抛出错误,既然是编译器的特性,那么最好仍是接受它的报错去修复。做为短暂的过渡使用老的编译方式是能够的,长期我我的以为是不合适的。组件化
报错:library not found for -lstdc++.6.0.9
ui
第一反应是去Build Phases
里的Link Binary With Libraries
进行添加,而后发现选择frameworks and libraries
里已经没有了这个库了😂,又回去看了一下Xcode9里是有的。阿里云
可是由于以前在Xcode9上是正常跑的项目,并且咱们组件化后,依赖是在私有库的podspec里定义的,全局搜了下全部的podspec并无依赖过这个lib。
想起来pod isntall
后会有一个Pods-xxxx.xcconfig
文件,果真找到了这个-l stdc++.6.0.9
,可是这边是汇总了全部的依赖,没法找到源头。
那若是直接在这里删掉这个依赖呢?是否是会爆出更清晰的错? 答案是就以下图,由于删掉了这个依赖,那依赖这个lib的源码就出现了一些调用方法的报错,以下图,很明显的发现了这个叫libQYSDK.a
的库。恩,就是三方库七鱼客服
了😂,赶忙联系了一波工具提供方。
临时方案能够参考:掘金@End 在评论区提到
将Xcode9的libstdc++6.0.9.tbd拷贝到Xcode10中使用。
感谢 掘金@vvveiii 提醒,以前在文档里没有查到相关信息,刚刚再去开发者论坛中看到Where is libstdc++.6.dylib in xcode10 beta 以及 libstdc++ is not supported by the tvOS platform? 中 staff的回应是请迁移到libc++
库。
因此Xcode10
中libstdc++
相关的3个库(libstdc++
、libstdc++.6
、libstdc++6.0.9
)应该都是被完全废弃了,若是你使用的三方库中有依赖,请尽快和提供方沟通,告知他们迁移吧。若是本身开发使用,也尽快考虑迁移的事宜吧。
通过上面一波操做后,终于编译经过了,也跑起来,就在觉得一切都正常起来的时候,忽然 崩!溃!了!
一看报错缘由,是Profile.StoryBoard
没有找到,咱们作了组件化后不少资源文件是在各自的pod里的,理论上这个sb应该在执行Copy Pods Resources
后被copy到在*.app
的包里
因而去查看了一下编译后生成的Product,全部组件库的资源文件 都!不!在!
怀疑是这个指令没有执行,而后clear从新编译,盯着编译过程。果真,只执行了Check Pods Manifest.lock
和Embed Pods Frameworks
。
看了下CocoaPods的issues里没有人提到这些,估计新版是好的,赶忙装了CocoaPods-1.5.3再把Pods文件夹删了从新install一下,就行了。
确实是须要升级CocoaPods
版本>=1.4.0
以上,可见Github上的一个issues Xcode10 beta can't load bundles from CocoaPods
至此咱们的工程已经能正常经过Xcode 10
编译,并运行在iOS 12 beta
的手机上了。
粗略对一些业务场景进行了使用,没有发现明显须要进行处理的问题😆
后续若是有发现有意义的问题会继续更新~