mirror of
https://github.com/NohamR/knowledge-kit.git
synced 2026-05-24 20:00:37 +00:00
2.9 KiB
2.9 KiB
Swift 版本迁移问题总结
工程中存在一部分代码逻辑是 Swift 实现的,每次 Swift 版本升级、Xcode 版本升级或许意味着你需要对 Swfit 实现的这部分代码进行升级改动,此篇文章就记录 Swift 每次升级时踩过的坑
Swift 5 && Xcode 10.2 的踩坑
- 一部分改动是由于系统通知的名称改变造成的
| 改动前 | 改动后 |
|---|---|
| .UIKeyboardWillShow | UIResponder.keyboardWillShowNotification |
| UIAlertControllerStyle.alert | UIAlertController.Style.alert |
| UIAlertActionStyle.cancel | UIAlertAction.Style.alert |
| UIControlState.normal | UIControl.State.normal |
| UIEdgeInsetsMake(0, 20, 0, 20) | UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 20) |
| XQNetworkingManager.jsonManager | XQNetworkingManager.useJSONSerializer |
| NSNotification.Name.UITextFieldTextDidChange | UITextField.textDidChangeNotification |
- 当你修改完语法问题的时候,编译工程,发现还是存在一些问题。大体意思是说 Swift 的编译版本不再支持。所以我们需要选中 targets ,切换到 「Build Settings」 下面,搜索 「Swift Language Version」,在后面勾选合适的 Swift 版本。在这里我选择了 Swift 5
手淘 App 落地 Swift,推进生态
经过技术调研、基础设施建设、工具链升级、里程碑业务上线和社区培训,得出“拥有一把锤子可以敲一个钉子,拥有一个工具箱可以造一艘航母”。
首先是业务视角:
- 在业务需要快速迭代的时候,现有的 iOS 工程师主要以 Objective-C 为主,转战 Swift 需要一定的学习曲线,而且采用 Swift 效率是否一定有提高也有待考证;
- Swift 只能解决 iOS 侧 Native 研发问题,对于高迭代效率的跨平台技术,收益不足。
其次是技术视角:
- Swift 早期由于 ABI 不稳定,只能将 Runtime 内置在 IPA 包里面,占用约 3M 的下载空间,苹果还有 150M 的蜂窝网络下载大小的限制,且对启动性能有 150ms 的影响,在各家公司拼体验的时代,这些都会对公司的业务造成负担和损耗;
- 由于语法不固定,每次升级都会造成源码级别的 Break Change,对开发者也会造成负担。淘宝、美团等巨型 App 都采用了二进制组建化研发模块,Swift 只能固定开发工具版本,对大型团队是一种负担和制约,反而极大的降低了研发效率。
未来一两年内国内 Swift 生态还是会有巨大改善的,主要有以下几个方面:
- iOS 12.2 以上内置 Swift Runtime, 包大小随着存量旧版本操作系统升级后得到缓解;
- iOS 12.2 以上也没有启动性能的影响;
- Swift 语法不再大变,不会对开发者造成负担;
- 苹果继续强势推进,Swift 社区热度持续提升。 相信生产力大幅提高后,没有人会放任好用的工具不用而去用一把快要锈掉的锤子(Objective-C )。