Swift4 的迁移
对于 apple 发布的 Swift4, 相对于 Swift3, 做了很多稳定性的工作, 但是也提供了很多很方便的特性, 增强了原来 Swift3 上不那么方便使用的东西, 诸如 Codable
, Smart Keypaths
还有对于 Swift 类型的KVO
&KVC
之前 Swift3 的
KVO
只能是继承自NSObject
的类, 而且还要做@dynamic
的声明, 这次的扩展, 是的所有的Swift
的类都能KVO
了, 而且不用做过多的声明, 本篇就不展开了, 绝对值得升级到 Swift4的! 不得不说这是一个很好很方便的东西.! 斯巴拉西!
原材料
一个 Swift3 项目, 正常的, 能编译能运行的那种~
建议: 如果你已有的项目很大很多的话, 在能跑起来的基础上, 选取 code 有代表性的一个模块, 作为一个小项目进行迁移, 这样应该能小成本进行试水, 然后把一些注意点能尽快的定位到, 在运用到原来的项目时就不会这么痛苦和困难
步奏
因为没有使用 CocoaPod
项目已经很少了, 我们迁移不能不考虑到对CocoaPod
在这环境的迁移, 有时候我们对这种事情很吃力, 一个是其他 lib 的不可控, 一个是整合的方式, 如果在深层一点的地方出问题, 无疑会付出更大的成本迁移
我们先 迁移项目本身, 再迁移CocoaPods
依赖的库, 这样能先保证自己的没问题
第一步:
添加下列代码到Podfile
, 执行pod install
1 | post_install do |installer| |
这里可以宝成 pod
使用 Swift3.2
来变异依赖的库, 和之前一样
第二步
在项目中切换语言环境, Xcode 提供了自动转换方法, 让项目中的 Swift3代码转换到 Swift4
Click on Edit
-> Convert
-> Convert to current swift syntax
然后会弹出一个确认框, 其中包括了 pods
库在内的target
!注意!: 只勾选你项目本身, UITest
, Unit Test
的target
, 其他的都不勾选
然后点击convert
等待项目编译并生成一个预览(告诉你有哪些改变), 然后运用这些改变apply the chnages
修复所有由 Swift4 引起的错误和警告, 有什么疑问的, 可以看迁移指导 (或者自行搜索~)
第三步
更新 pods
这大概是最复杂的一步了, 你必须检查哪个库已经适配了 Swift4, 那些库还只能是 Swift3
在做这步之前, 先提交一次, 以免出了什么问题, 还能回到没问题的状态
然后移除在第一步在podfile
添加的代码段, 运行 pod update
, 幸运的话全部依赖的库都支持了 Swift4, 整个项目能编译通过.
不然…如果某个 pod 库编译失败了, 去看看这个类库的 github 主页看看是否升级了 Swift4, 如果支持了, 就去看看 pod 的 project, 选中失败的target
, 到build setting
看看, 确认Swift 语言版本已经设置到 Swift4.
重复这个检查, 知道项目能成功 build.
最后, 你可能会有些库是用 Swift4编译, 有些是用 Swift3, 为了避免没次运行 pod
命令时重复去 setting 设置这些, 我们可以再Podfile
最后添加以下代码段
1 | post_install do |installer| |
这里你可以指定哪些库需要 Swift3 编译
最后
最后你应该可以正常了, 但是还是可能会因为某些 Pod 库存在一些问题