前言 ——
Xcode 8 出来也有一段时间了,这两天用了下,也基本是开始使用了,在这里就把自己项目用到的库,分享下这几天使用Xcode 8 踩的一些小坑,和解决办法,其实处理情况觉得都大同小异,明白报错原因就容易了~ 希望能帮助小伙伴,如果有小伙伴用到了什么 Swift 的第三方,遇坑的欢迎留言、分享给更多的小伙伴~ 一起解决。
注意:
1、如果要直接使用项目尝试升级的话,一定要备份!!备份!!备份!!
2、可以保留着Xcode 7.3.1 和 Xcode 8 两个版本,如果迁移不成功的话可以替换为原来的开发工具。
正题 ——
踩坑过程
使用Xcode 8创建一个空项目,用终端编辑 Podfile 文件,导入第一个库 SnapKit ,如下:
然后用 Xcode 8 打开,会有这样的提示 :
大概意思就是问你,是否现在升级 Swift ? Later -> 稍后 , Convert -> 升级。
一开始,根据提示,我们大都会选择 升级,然后在选择 Convert to Swift 3.0 升级到3.0 ,再 Next ,
然后就会出现转换前 和 转换后的语法对比,点击 Save 保存的时候提示如下 :
意思是是否解锁当前的库,然后更改这些? 一般的来说,CocoaPods 导入的第三方库,都是锁定的不允许更改的,到这一步的时候,其实已经觉得可能会迁移失败了,点击了 Unlock ,然后再编译,果然没失望... 确实编译不过了,第一次迁移失败了...
其实到这,就知道,如果有到这一步 询问你是否解锁的过程,那基本会是失败的了。
按照正常的逻辑,像这些第三方的库,升级语法应该都是作者已经更新好了的,我们只需要 update ,或者升级本地库的方式去处理,那么应该这样处理:
SnapKit 处理方式
在询问 Convert to Current Swift Syntax? 先选择 Later,再确认 Later 。
然后编译,出现这样的错误
Use Legacy Swift Language Version” (SWIFT_VERSION) is required to be configured correctly for targets which use Swift. Use the [Edit > Convert > To Current Swift Syntax…] menu to choose a Swift version or use the Build Settings editor to configure the build setting directly.
按错误的字面意思,是需要正确的配置这个库的目标版本。。。那好,选中 Pods -> Targets 下选中 SnapKit ,在选择 Build Settings ,搜索 Swift Compiler - Version, 然后将 Use Legacy Swift Language Version 对应的项 选择 NO 。 意思是 如果你的库是最新的3.0语法,则选择 NO,不使用旧版本语法。 如果还是2.x的语法,则选择 YES 。 再编译项目 ,成功! ^_^ 如下图
DKImagePickerController 处理方式
这个库是一个相册选取库,我们在 Podfile 文件中加入 pod 'DKImagePickerController' , 然后 pod install
然后打开项目,用 SnapKit 的处理方式,但是 Use Legacy Swift Language Version 无论选择 NO 还是 YES ,都不能编译通过,为什么呢? 然后仔细看错误,实际上语法还是旧版本的,那也就是说明实际上还没有更新到最新的? 根据这个点,去这个库的 Github 上看了一下 ,作者确实已经更新了,并且已支持 Xcode 8 and Swift 3
这就奇怪了? 然后再回终端看一下,刚刚 pod install 库的版本 ,再 pod search DKImagePickerController 一下,版本都是显示 3.3.4
然而 Github 上最新的是 3.4.0
所以确实是我们自己本地库的代码不是最新的,所以,,所以,,我们需要这样更新
现在 Github 上,将下载地址 copy 一下,
然后重新编辑 Podfile 文件,pod 'DKImagePickerController' 后面加上指定地址,就是刚刚copy的,如下:
然后我们重新 pod install .
再打开项目, 在询问 Convert to Current Swift Syntax? 先选择 Later,再确认 Later 。
按照 SnapKit 的处理方式,将 SnapKit 和 DKImagePickerController 的 Use Legacy Swift Language Version 对应的项 选择 NO . 再编译,通过。
总结
1、 要先确定你的这个 Swift 库,是否已支持 3.0 ,再设置 Use Legacy Swift Language Version 是否支持旧版。
2、 如果1的方法不行,要再确定本地库的代码是否是最新的,版本和Github上的最新一致。
.
.
.
.
.
.
.
未完待续...