Apple为什么不封杀 Flutter,以后会封杀吗

31,157 阅读5分钟

概述

Flutter是什么?Flutter是Google推出的一套开源跨平台UI框架,可以快速地在Android、iOS和Web平台上构建高质量的原生用户界面。在过去的两年时间里,Flutter的更新频率是相当的快,也有很多的公司开始使用它来进行跨平台应用开发,可以说,将Flutter称为2019年最流行的跨平台技术也不为过。

作为一个移动互联网的老兵,我先后研究过Hybrid APP、React Native和Weex等跨平台技术,并且有幸出版过相关的书籍。对于Flutter,给我的感觉是,不管是从社群和社区的活跃来看,还是从技术的水准上来看,Flutter无疑都是目前最优秀的跨平台开发方案。

在国内,除了阿里、腾讯、美团等大厂外,国内很多的中小团队也开始使用Flutter来作为移动应用开发的首选,并且很多公司在移动招聘方面也要求具有Flutter开发的背景。那么对于Flutter这个新生事物,Apple的态度是怎样的呢?以后会不会封杀呢,就像之前的JSPatch等。

RN、Weex、小程序

首先,让我们先来认识下RN和Weex。RN 和 Weex 其实使用的是类似的技术方案,即它们都使用JavaScript作为编程语言,然后通过中间层转换为原生平台的组件后再使用原生平台的渲染引擎执行渲染操作。并且它们都是期望团队开发业务的同学可以开发一套代码供多端使用,更多追求的是跨平台能力,在做这个方案的同时正好也具备了动态化能力。

关于动态性方面本身具有一定的审核风险,这里明确表示是不合规的,参考审核规则 2.5.2 苹果动态性审核条款,只不过 RN 和 Weex 的风险不如当年的 JSPatch 那么大,所以Apple方面也是睁一只眼闭一只眼。

而当年的JSPatch 等热修复解决方案则是通过底层操作使得开发者可以用 JS 语言调用任意原生代码,这直接导致了用户 App 在苹果审核之后,依然可能做大范围的改动,这会使得苹果的审核机制形同虚设。想象一下,你一个明面上说是新闻类的App,审核通过后摇身一变变成了其他类型的App,你说合不合规,既影响 App Store 整体的体验,更会给苹果带来系统性的合规问题,这是一大封杀 JSPatch 的原因。

RN和Weex 苹果的建议是不提倡、不承诺不封杀,从我的理解是苹果对于这类相对低风险的方案,秉持的态度是观望,比如某天发现影响了他们的审核,就会毫不犹豫的封杀;如果在审核期间,通过这类技术动态改变页面,很有可能会被直接拒审。

至于小程序,其实本身是当年 H5 离线包的一个开发语法标准化的衍伸,本身确实也具备了跨平台和动态化能力,从苹果目前的态度来看,只要不做的特别过分,目前是可以的,尤其是目前各大平台都出了自己的小程序解决方案与开放平台的情况下,总不能把这些 App 都干掉吧。

Flutter

Flutter 与 RN、Weex、小程序最大的不同就是,Flutter是一个跨平台解决方案,而非一个动态化解决方案。如果你阅读Flutter相关的介绍,会发现Flutter直接使用skia引擎来渲染视图,并且Flutter的Widget使用现代响应式框架进行构建,和平台没有直接的关系。

而从技术实现上来说,Flutter直接通过NDK编译成本地库的(libflutter.so),也就是说,Flutter执行是AOT(静态编译)执行,而不是JIT(即时编译),性能上完全没问题。而在实际表现中,也优于Android原生下JIT状态时的效率,本地库的特性也导致Flutter自身不具备热更新能力。而JSPatch这类东西,就和Android原生的热修复框架Tinker之类的类似,是影响编译效率的,尤其对启动速度影响比较大。出于用户体验方面的考虑,肯定是会被封杀的,这方面Google Play也是一样做法。

目前,从Flutter的发展趋势来说,Google 是想把 Flutter 打造成为新一代的移动端开发标准,在做任何事情时都会考虑合规问题,所以才会在考虑了 iOS 上动态化能力时,依然不考虑支持这个特性,因为一旦 Flutter 在 iOS 上具备了这个能力,也就存在了审核风险,这个审核风险是系统性的。

苹果已经明确表示 Flutter 目前没有合规上的风险,因为它本身就不是一个动态化解决方案,但一样秉持不提倡、不承诺不封杀,因为 Flutter 的崛起会吃掉苹果 App 原生开发人员的份额,苹果不建议使用官方以外提供的 Native 开发方案,苹果是绝不能容忍开发人员的大面积消失。一旦这种情况发生,苹果的生态就会遭人掣肘,这是苹果爸爸就会出来保护苹果 App 原生开发人员,这个时候也就是 Flutter 份额降低影响力降低的时刻,苹果也在不断推行 Swift 和 SwiftUI 等对原生开发人员更友好的解决方案,力图抵挡住各跨平台解决方案对苹果 App 原生开发人员的蚕食。

参考:移动跨平台方案对比:WEEX、React Native、Flutter和PWA