2018年 iOS 技术发展有点跌宕起伏。在苹果官方进入慢车道的同时,谷歌却强势推出了新的跨平台移动架构 Flutter;同一时间,与 Flutter 类似的跨平台解决方案 React Native 却被 Airbnb 放弃,一时之间蒙受阴影。
Swift vs. Objective-C
原生开发一直是最正统的 iOS 开发解决方案。经历了10多年的发展,苹果已经构建起了相当完善的开发框架和体系,社区也开发出了丰富多彩的第三方框架,其数量和质量都是其他任何解决方案望尘莫及的。
今年 WWDC 的主旋律可以说是“修修补补”——明星框架依然是 AI (ML & Siri Kit) 和 AR (ARKit) 这两个;对于 Xcode 和 iOS 系统及其各种框架的性能优化如 Auto Layout 算法改进、UITableView 滑动效率增强则是本次大会的重点。
Swift 的更新可以说是乏善可陈。万众期待的 Swift ABI 稳定被官宣推迟到2019年,4.2 版本小修小补中继续向着更易用的方向进行努力;在谷歌大脑的 Swift 之父 Chris 依然在努力的将 Tensorflow Swift 化,虽然取得了一定进步,但 Google 对其显然支持力度不够(只有 Richard Wei 一人在进行相关工作);Server 端方面,IBM 依然不遗余力地更新着自家的 Swift 全家桶,然而其8%的云市场份额作用有限。除此之外,一年一度的 Swift Summit 今年居然停办,不知是因为资金不足还是开发者热情消减。
基于 Swift 整体方面不够给力,Swift 的三大排名更新如下:
- TIOBE 语言排名从第10名下降到第14名
- StackOverflow 最受欢迎语言维持在第14名
- Github 综合语言排名为第14名
反观 Objective-C 则在不被看好的情况下逆势而上。其在 TIOBE 和 Github 的排名稳居第10名;而在公司方面,LinkedIn 决定从 Swift 迁移回 Objective-C,与 Snap、Facebook、Twitter 一道成为 Objective-C的卫道者。
而完全拥抱 Swift 的依然只有 Uber,Lyft,Coursera 这三家早在 Swift 3 就入坑的公司 。硅谷的绝大多数公司,如 Google、Amazon、Microsoft、Netflix、Airbnb、Slack、Pinterest、Quora都对 Swift 持观望态度,其产品中也大多是以 Objective-C 为主的混编。好消息是,它们中的绝大多数代码库都在往更多 Swift 的方向去迁移;Amazon 则是在11月发布了轻量级的 smoke 服务器框架,完全是由 Swift 编写。
总结:Objective-C 瘦死的骆驼比马大,Swift 发展陷入低迷。
Flutter
Flutter 应该算是今年 iOS 开发的年度关键词了。从2015年首次出现在安卓的操作系统中,到2017年 Alpha 版本的发布,再到两个 Beta 版本分别在今年2月和3月发布,随后在9月上海的谷歌开发者大会上宣布稳定版,最后在2018年的尾巴12月4日,我们终于见到了1.0版本。这款以 Dart 为开发语言、承载了谷歌未来系统级战略的框架,注定要展现出巨大的影响力。
对于开发 Flutter 的动机,原 Swift 团队的二号人物 Kate Stone 认为,开发 Flutter 的目的在于为其 IOT 战略铺路和试错。在 AI First 大背景下的 Google,其基本的布局是以人工智能为核心构建一整套软硬结合的生态圈。其中硬件就是以 Google Home 为中心的 IOT 产品线(包括自家的 Clips、Wifi、Nest 一套),这些硬件需要一套更高效和统一的软件平台——以 Java 为主的 Android 当然不错,但将其适配新的 IOT产品线成本较高,且每年要付给 Oracle 大量的专利费显然并不划算;Chrome OS 因为理念太先进,完全基于云端而导致现在的基础设施和第三方厂商难以适应,目前只是小众产品。整合 Android 和 Chrome OS 两大平台的资源,配合未来 5G 的高速通信,使 Google 做出了统一系统、高效开发的决策。这正是开发 Fuchsia 的原因,而 Flutter 也是其配套的重要一环。
Flutter 与 Fuchsia 操作系统一样,采用 Dart 作为底层编程语言。Dart 由于其预编译和高兼容等特色,使得其可以在 iOS 设备上无缝高速运转。而 Flutter 作为其架构,完美得绕过了 JSCore 这个桥接,可以直接在机器上渲染图形,这比 React Native 要前进了一大步,与原生相比效率上几乎无差别;在兼具热加载和跨平台等优点的基础上,Flutter 又拥有丰富成熟的控件,这些噱头已经足够吸引开发者。在实际开发中,Reflectly 的工程团队证明,React Native 在跨平台上造成的小毛病在 Flutter 上完全看不到,其跨平台可靠性、热加载高效性、工具链丰富性、文档的高可读性都给整个开发过程带来了非常愉快的体验。
如此优越的先天条件使得 Flutter 目前在 Github 上已经拥有了48000+的 Star。Google 在优达学城开放了入门课程,同时自己在 Google Ads 上投入使用。国外的大厂有 Capital One、Groupon 已经开始尝试 Flutter,而国内的阿里巴巴、腾讯、京东更是作为 Google 的合作伙伴使用 Flutter。
虽然好评如潮,但是开发者对 Flutter 也有一些忧虑。Reflectly 团队指出,Flutter 对于应用内购买和本地推送这两个功能没有很好的支持;Google Ads 的技术负责人 Mehmet 在 Quora 上则说,Flutter 只是目前阶段的解决方案,当网速足够快时,网站和浏览器就足以取代 App 了 —— 这时候 PWA 才是王道;而闲鱼的宗心同学则是在他的直播中说使用 Flutter 后稳定性稍有下降,而内存占用情况也比较严峻。
总结:Flutter 在2018年异军突起,战略意图明显且优点鲜明,值得一试。
React Native
老牌跨平台框架 React Native 在2018年迭代了5个版本:从0.52到0.57,Facebook 依然在对这个框架进行各种尝试。然而,坏消息却是接踵而来,首先是 Airbnb 弃用 React Native,还连发数篇文章阐明相识相知到累觉不爱的过程。这波有理有据的吐槽的蝴蝶效应则是在开发者中带动了一波 React Native “下车”的大辩论。
可能 Facebook 团队也意识到了桥接等性能问题。在 Airbnb 事件之后数周, React Native 官方就发文宣布重构。主要工作围绕在线程、异步渲染、简化桥接三个方面,整个过程循序渐进,力争不会对已经使用 React Native 的应用和开发者造成重大影响。这之后8月份,全新的 Accessibility API 推出,而这正是 Airbnb 吐槽的大坑。11月初,React Native 发布了2019年的路线图,Facebook 团队决定明年将完成重构并发布稳定的 API,将其推进到1.0正式版。
如果说 Flutter 是 Google 在 IOT 战略中下的一步棋,那么 React Native 便是 Facebook 在 VR/AR 战略中下的类似一步。去年发布的 React VR 在2018年的 Facebook F8 上与 React Native 深度结合展现出了其优秀的可扩展性。然而无论是 VR 产业的成熟,还是 React VR 框架的成熟都尚需数年,所以 React Native 在此方面的优势也就仅此而已。
总结:React Native 步履蹒跚,在面对 Airbnb 的抛弃和 Flutter 的竞争下,展现出了一些求生欲。
总结与展望
2018年是第一台 iPhone 发布的第11个年头。很多人都说移动浪潮已过、iOS 工程师没人要、写 iOS 以后就和写网页一样,唱衰的声音此起彼伏。然而 Flutter 的出现像是回应了这种质疑;2019年 React Native 的重构和 Swift 的 ABI 稳定,这也许意味着 iOS 的第二春即将来临。在 Google,Facebook,Apple 三家大厂争霸布局的同时,我们 iOS 开发者则应该保持信心,在苦修内功的同时又抬头看看最新的技术,毕竟 iOS 作为平台也在不断进化,与 AI 和 VR/AR 的结合也督促着我们不断学习。
Reference
- What Stats and Surveys are saying about Swift in 2018
- Is Flutter likely to replace Java for Android app development?
- What’s Revolutionary about Flutter
- Flutter 1.0: Google’s Portable UI Toolkit
- Reflectly — From React Native to Flutter
- State of React Native 2018
- Open Source Roadmap
- Airbnb: React Native 从选择到放弃
- 基于Flutter的产品应用实践