Files
knowledge-kit/Chapter1 - iOS/1.58.md
2020-04-06 22:35:27 +08:00

40 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Swift 版本迁移问题总结
> 工程中存在一部分代码逻辑是 Swift 实现的,每次 Swift 版本升级、Xcode 版本升级或许意味着你需要对 Swfit 实现的这部分代码进行升级改动,此篇文章就记录 Swift 每次升级时踩过的坑
## Swift 5 && Xcode 10.2 的踩坑
1. 一部分改动是由于系统通知的名称改变造成的
| 改动前 | 改动后 |
|:--:|:--:|
| .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 |
2. 当你修改完语法问题的时候,编译工程,发现还是存在一些问题。大体意思是说 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 )。