Cocoapods && Swift 3.0 升级之后遇到的问题

手里有个项目主工程是 OC 写的,项目里的一个读书模块用的是 Swift 的 epub 库 。之前 xcode7 的时候跑的好好的,结果那天手贱升级到了 xcode8,项目就GG了,跑起来各种跑错。最近那个库终于提供的对 Swift3.0 的支持,对项目进行了一下升级,踩了很多的坑,和大家分享一下,避免重蹈覆辙。

这个一般就是大家执行pod更新最常用的方法了

‘pod update’

下面就是我执行完之后遇到的种种问题

生无可恋


Realm的冲突

我项目中用到了OC版本的 Realm 的库,并且混编了 OC 和 Swift。

结果后来发现第三方的 Swift 库中的依赖了Swift版本的Realm 两个不能同时用,会导致头文件冲突,你的OC代码中会提示头文件找不到,当然我那么机智,想到了下面的方法:

加了 UserHeader 的路径 ,去递归的搜索了整个项目路径,结还是不行【这里埋下了一个坑】

生无可恋

这边的解决方案只能是,我项目里的换个本地持久化方案,香菇。


Swift版本升级

因为升级的了Xcode8 准备全切换到Swift3.0 ,原来的默写Swift都是通过2.3或者一下编译的,xcode提供了转换的方法,在edit > convet > to current swift syntax 里面可以使用转换器,但是这里并不推荐用这个东西来转换三方库的代码,本来它原本的逻辑自己就不是很清楚,通过这个一转 error 会更多,建议还是等三方库自己更新,基本常用的库都做了 3.0 的适配了,有些可能不在master分支上,本来我上个月就想切换的,一直在等那些作者更新。

生无可恋

开始更新 Pod ,可是发现CocoaPods 怎么update都不是最新的【这个可以通过CoocaPod官网或者Github去对应】,发现装的版本和 GitHub 上的不一样,可是 pod unpdate 却告诉我已经是最新的了。

然后发现要升级CocoaPods。

这里指令是


gem install cocoapods

升级完之后 最好把原来的pod删了


rm -rf ~/Library/Caches/CocoaPods rm -rf Pods pod install

此处请注意,这段代码乃治玄学Pod问题之本

下一步把项目深度clean一下,在clean的界面按住option键


第三方库的Swift兼容

直接导入的话,会提示你要用上面说的那个工具升级Swift代码,可是代码已经是最新适配的了,这里就要改下下面这个东西。

在Pod 对应的界面 选择第三方模块,然后在building setting 中的 version 选项选择

因为第三方基本都做了3.0的适配了

User Legacy Swift Language Version 选择Yes

像这样:

截图2


Module file was created by an older version

当我以为现在已经可以愉快地编译了

发现了新的问题。。。

有的第三方模块会报 module swift 什么的问题

类似于这样

截图1

在我的swift中import第三方库,会提示swift的二进制文件版本不对,这里clean一下这个叫做 derived 的 data

iphone – How to “Delete derived data” in Xcode6? – Stack Overflow


一个坑

终于可以愉快地编译了

去


umbrella header Realm not found

去Realm的Github的issue里面试了所有方法

讲道理的话。。。他们提供的解决方案。。无非是Clean。。Rebuild 。。Pod update 。。【感觉pod这个东西,是个玄学,就和重启电脑一样】

最后无意中看到一个人po的解决方案,如梦初醒!!

截图

麻利的把之前的删了。


Pod 资源找不到

愉快地解决上面的问题之后,终于跑起来了。

结果刚启动就挂了,挂在了SVProgress 找不到Bundle的资源了。

截图

这边CocoaPod 又出现问题了!

一些有Bundles 的第三方库的bundle不会被打包到项目里 怒摔!

其实pod就是帮你建了一个子工程集合了一下,在你的主工程里加了个两个脚本,可以在build标签里看到,一个是framework相关的,一个是resource相关。

查了好久。。。翻了pod的脚本。。发现那个resource的脚本根本啥都没干啊

截图

把pod的脚本基本都熟悉了一遍,分别是两个shell脚本,

framework那个脚本是把库文件考进去,并且用code sign 进行签名

这一步的解决方案目前没找到。。。把有bundle的项目直接考到项目里了。。只能出此下策


最后

终于 愉快地 编译起来了 ! 徜徉在 Object 和 Swift 3.0 的海洋中了~

默默地去找Realm的替换方案了。。。

微笑

如果各位对Swift 和 OC 感兴趣的话 下面可以整个文章~

One thought on “Cocoapods && Swift 3.0 升级之后遇到的问题

发表评论

电子邮件地址不会被公开。