找回密码
 立即注册
查看: 1461|回复: 20

Apple 为什么不封杀 Flutter 呢?

[复制链接]
发表于 2020-11-27 16:17 | 显示全部楼层 |阅读模式
Apple 为什么不封杀 Flutter 呢?
发表于 2020-11-27 16:19 | 显示全部楼层
对于 Flutter、RN、Weex、小程序这些跨平台解决方案的审核风险,曾与相关团队专门沟通过这块。
RN、Weex、小程序:
    首先 RN 和 Weex 本身是类似的解决方案,都是期望团队开发业务的同学可以开发一套代码供多端使用,更多追求的是跨平台能力,在做这个方案的同时正好也具备了动态化能力,关于动态性方面本身具有一定的审核风险,这里明确表示是不合规的,参考审核规则 2.5.2 苹果动态性审核条款,只不过 RN 和 Weex 的风险不如当年的 JSPatch 那么大;JSPatch 等热修复解决方案通过底层操作使得开发者可以用 js 等语言调用任意原生代码,这直接导致了用户 App 在苹果审核之后,依然可能做大范围的改动,这会使得苹果的审核机制形同虚设,想象下你一个明面上说是新闻类的 App,审核通过后摇身一变变成了博彩 App,你说合不合规,既影响 App Store 整体的体验,更会给苹果带来系统性的合规问题,这是一大封杀 JSPatch 的原因,至于官方说的安全性问题,确实可能存在下发脚本被黑客控制导致 App 出现重大安全隐患,但是都这么多年了,为什么苹果自己没有提供这样一个安全通道呢,答案显而易见审核才是其命脉和维护 App Store 生态的根本;RN、Weex 苹果的建议是不提倡、不承诺不封杀,从我的理解是苹果对于这类相对低风险的方案,秉持的态度是观望,比如某天发现影响了他们的审核,就会毫不犹豫的封杀;如果在审核期间,通过这类技术动态改变页面,很有可能会被直接拒审。
至于小程序,其实本身是当年 H5 离线包的一个开发语法标准化的衍伸,本身确实也具备了跨平台和动态化能力,从苹果目前的态度来看,只要不做的特别过分,目前是可以的,尤其是目前各大平台都出了自己的小程序解决方案与开放平台的情况下,总不能把这些 App 都干了。
Flutter:
    Flutter 与前面说的 RN、Weex、小程序最大的不同就是 Flutter 是一个跨平台解决方案,而非一个动态化解决方案,Google 的野心很大,想把 Flutter 打造成为新一代的移动端开发标准,在做任何事情时都会考虑合规问题,所以才会在考虑了 iOS 上动态化能力时,依然不考虑支持这个特性,因为一旦 Flutter 在 iOS 上具备了这个能力,也就存在了审核风险,这个审核风险是系统性的;这点要说到国内外开发模式的不同,国外主张加强 CodeReview,国内主张小步快跑,快速迭代,有问题动态更新和热修复顶上,而苹果的审核速度即便一再加快,也难满足国内各大 App 的快速发版需求,正因为如此一再试探苹果的审核边界,最终在审核方面造成的问题和风险会逐步抵消掉动态更新和热修复带来的好处,当然不同 App 有不同的大环境,未来 App 也一定是朝着更合规的方向去发展; Flutter 目前没有合规上的风险,因为本身就不是一个动态化解决方案,但一样秉持不提倡、不承诺不封杀,因为 Flutter 的崛起会吃掉苹果 App 原生开发人员的份额,苹果不建议使用官方以外提供的 Native 开发方案,苹果是绝不能容忍开发人员的大面积消失,一旦这种情况发生,苹果的生态就会遭人掣肘,这是苹果爸爸就会出来保护苹果 App 原生开发人员,这个时候也就是 Flutter 份额降低影响力降低的时刻,苹果也在不断推行 Swift 和 SwiftUI 等对原生开发人员更友好的解决方案,力图抵挡住各跨平台解决方案对苹果 App 原生开发人员的蚕食。
转载请标明作者与正确出处~
发表于 2020-11-27 16:24 | 显示全部楼层
1更:
很多人认为,Flutter会蚕食原本的iOS原生开发者数量,导致iOS原生开发者减少,苹果的软件生态环境遭到破坏。
其实你们是被Flutter的原生级别的性能所误导了……
换句话说,现在有一辆箱货,号称有轿车般的体验,你会选择买一辆箱货当轿车开么?
Flutter终归是一个快速开发快速迭代特性的框架,应用场景与H5和RN之类的重合,略高于H5,远低于原生。
如果一个软件,只是个项目,那么那个快用哪个,RN坑也不少,依然有很多开发者,但是你认为RN会蚕食iOS原生开发的份额么?
但是一个软件,定位是产品以后,很多以前不注意不需要的,都会变得至关重要。比如你可以用Flutter/RN/H5给某个售楼处写一个宣传展示用的APP,腾讯会用这些技术写一个QQ么?
不要把不同的东西放在一起比较,关公战秦琼只是你想象的,关公再厉害,也抢不了秦琼的饭碗。
通用代码,永远不会比原生代码的效果好!

苹果巴不得有这样的东西
苹果根本不关注你用什么技术实现的,苹果关注的只有2点
1、你是否遵循了苹果开发者协议
2、你的APP体验是否过关,换句话说就是会不会砸苹果的招牌


先说第一点,苹果现在限制了H5应用,明年3月苹果将会把主要功能都用H5实现的APP清理掉,实际上是因为这种应用程序并没有把主要内容提交苹果商店审核,所以苹果无法控制应用内容。举个例子,假如有人发布了色情APP,但是审核的时候并不是,这样苹果需要负责任,但是也没法管理,索性直接毙了,同样道理的还有热更新
第二点,苹果对于App Store里面应用质量是有要求的,不好玩的游戏不给过,闪退的APP也不给过,闪退一次就过不了


反观Flutter,聪明的很
Flutter不支持热更新,官方考虑过,后来放弃了,你觉得是技术问题么?我觉得未必。
Flutter性能足够,至少比RN和WEEX之类的强很多,所以苹果也没必要反对


但是Flutter这类东西出现,会丰富App Store的内容。内容丰富,一方面促进iPhone的销量,一方面带来App Store的营收,为什么要反对和封杀呢?相当于别人主动帮你赚钱,你去封杀才有鬼呢
发表于 2020-11-27 16:25 | 显示全部楼层
封杀与否取决于flutter是否触犯了apple store的政策,Apple是一个封闭的系统,它有能力阻止其他框架构建的应用程序运行在它的平台上,只要Flutter能遵守App Store政策,苹果禁止Flutter应用程序的可能性极低。
举个例子:苹果曾经禁止采用热更新技术的应用,受到影响最大的是JSPatch,从技术层面上来说,JSPatch采用JavaScript代码,利用苹果内置的 JavaScriptCore.Framework执行,以实现热更新功能。这一点看似符合标准,但技术上存在重大安全隐患,JSPatch对所有 Objective-C API进行了映射,允许开发者在JS端调用任意原生代码,这显然是极其危险的。假设这段代码是通过热更新技术下载执行的,如果在中间存在黑客,把这段代码动态替换掉,比如修改为获取用户通讯录并上传到黑客的服务器,就会造成重大的安全问题。苹果认为热更新技术容易被黑客利用,造成重大安全问题。
JSPatch被封杀,主要还是从安全的角度破坏了苹果生态的安全性,不管是技术上实现的缺陷和热更新,其实都是绕过苹果的安全审核机制会造成安全隐患。
所以苹果不封杀flutter,完全是因为flutter在ios的成长只有遵守苹果平台政策,才能在苹果的生态下生存,如果不遵守苹果的规则,而导致被封杀,flutter也就失去了美好未来,因为失去ios的支持,仅支持android,所谓的跨平台特性就不存在了,也就是失去了成长的机会。
发表于 2020-11-27 16:27 | 显示全部楼层
我先讨论一下和 Flutter 无关的。首先苹果为什么要封杀这个封杀那个?腾讯式思维在作祟?
苹果必须封杀 Flutter 就因为它是竞争对手 Google 的产品?仅仅因为这个理由就要封杀?
现在“封杀”已经合情合理了吗?不封杀还需要特别提问讨论这种反常规的现象?
很多人看到微信把 TX 的竞争对手和可能存在威胁的同类产品链接封杀光了,觉得是理所应当的。他们几乎从不站在道德层面去谴责,却一味的站在微信角度去给予“理解”。
这是很奇怪的现象。要知道只有腾讯自身才能承担这种决定的对或错的结果,无论如何作为用户的你我都是被损害的一方。不要盲目的崇拜庞然大物。
你表示理解,潜移默化的赞同了微信各种封杀。这是怎样一种奇特心态?等你哪天被店大欺客了,千万也要表示理解。
在数据上,Google Play 的可用应用数量是 Apple Store 的 1.4 倍。再加上 Android 平台存在大量的野鸡市场和压根不上架商店的应用程序,真实数量要远大于 iOS 平台。
苹果商店的免费应用相比 Android 平台更是少得多得多,平均每一个 iOS 应用价格达到了 1.02 美元。
从用户角度出发,推动 Flutter 可以让原本许多不以苹果设备为目标的应用开发者将他们的程序般到 iOS 上。用户可以使用到更多的具有 Android 平台的特殊文化的免费应用。
从苹果的角度,Flutter 并没有违反 Apple Store 的规定,在质量上也有保证。跨平台意味着开发技术不再是独占的,iOS 开发者不会流失成为 Android 开发者。
从开发者的角度,在意的是怎么用更低的成本产出高质量快速迭代的产品,当然会选择用更先进的框架和工具。不存在我被 Google 利用了,我的 iOS 程序都是 Google 给未来铺路的载体的想法。


讲完了。最后来个笑话,微信为什么不封杀苹果?
发表于 2020-11-27 16:30 | 显示全部楼层
没那么好封杀,因为flutter本质上根Xcode走的一套流程,只不过相当于多封装了一层dart虚机。连签名都要走Xcode,打包也是依赖于Xcode。
但是这并不妨碍我喷flutter。纯属为资本服务的一个产物。对用户实际上并不友好。一个空包就很大。而且很多原生功能又依赖于原生。
发表于 2020-11-27 16:33 | 显示全部楼层
Flutter相当于游戏引擎做界面而已,都是正常调用系统给的API,该给苹果交钱还得交钱。
如果是新OS,巴不得有Flutter这样的库支持呢。
发表于 2020-11-27 16:35 | 显示全部楼层
从一个非常浅的层面回答这个问题的话,可能很多人关注点在于Flutter是否可以绕过苹果AppStore的审核机制来回答。
Flutter和RN这样的动态化技术,常用目的有两个:
    动态改变UI展示布局让传统意义上的前端开发人员可以快速入手移动端开发
苹果AppStore的政策是要营造一个百花齐放,并且平均质量较高的应用商店。对于JSPatch的封杀,主要的原因是JSPatch的滥用程度非常高,其动态改变Native运行模式的能力已经比较强大,所以才封杀。而目前的Flutter和RN显然还不具备相同的能力。
作为一项UI渲染技术,苹果会封杀Flutter吗?有可能,当Fusion真的能对iOS产生强大威胁的时候,不排除这个可能。但是这一天何时到来,回到来吗?难说。
问题还有这样一段: "这样以后人们不都用 Flutter 开发了?iOS 不就彻底沦为一个 Flutter 应用的载体了?"
可能很多对于移动端开发了解较少的新人程序员会有这样的错觉。移动端应用有非常多的品类,非常多独特的功能,涉及到非常多的技术,Flutter或RN仅仅提供了一套UI方案,还有很多的功能是没覆盖的。无论是采用Flutter或RN,都需要有相对独立的迎难而上的精神。换句话说,就是吃饱了撑的。
发表于 2020-11-27 16:38 | 显示全部楼层
你们不会真没用过flutter或者没拆过flutter的包吧...
虽然我不做ios开发,但是我对flutter在android上的表现还是熟悉的
flutter打包为apk时,代码是直接通过ndk编译成本地库的(libflutter.so),也就是说,flutter执行是AOT执行,而不是JIT,性能上完全没问题,在实际表现中也优于android原生下JIT状态时的效率(当然,android自己还有dex2oat,这时候效率优于flutter),本地库的特性也导致flutter自身不具备热更新能力(但是热更新是可以做的,最后讲)
而JSPatch这东西,就和android这边的tinker之类的一样,是影响效率的,尤其对启动速度影响比较大,出于用户体验本来就该禁掉,这方面谷歌play也是一样不允许上架的






最后聊聊flutter的热更新实现吧.虽然谷歌play肯定是不给热更新的(都上play了用play的增量更新它不香吗),但是自己小范围使用的项目还是能用的.
flutter在加载时会执行loadLibrary,加载libflutter.so.android内加载本地库有两种方法,一种就是loadLibrary,传入库名,例如这里传入flutter就行了,前面的lib和后面的.so不用管.第二种就是直接load,传入路径,很多加固方案就喜欢这么做.
那么我们为了热更新,用第二种方案.先通过差分更新,拼接一个新的libflutter.so在data目录下,并设置好权限,然后在加载库时,送入这个新so的路径,而不是默认路径,就能实现flutter的热更新了.但是这个办法不支持对资源的热更新,资源热更新还是需要自己hook自己的assetsManager
发表于 2020-11-27 16:40 | 显示全部楼层
刚好前阵子撸完了一个项目,客户端,用的Flutter,半个月多点吧,安卓跟iOS完成。期间主要是一些涉及到native甚至安卓上ndk的部分还是得实际处理,还要等审核这些比较耗时,然后Flutter本身跟插件都还是有坑。
但整体来说开发体验还是十分不错的,坦白说如果要我分开手撸的话,两个端我估计加起来至少得搞两三个月。甚至为了省事我很有可能会用cordova或uniapp撸,连RN都懒得用,中间需要的地方才鼓捣native。而且很有可能iOS会延后上。
用Android Studio直接开发跟调试iOS APP有多爽只有体验过的人才知道,我真的觉得Xcode用起来格外别扭不舒服。不过遇到一些Native的部分还是得视情况用Xcode调试,这就很烦了…
总之,Flutter至少有助于提高上架app的数量(无论安卓还是iOS)跟开发者的积极性,而且跟为了跨端选择H5 hybrid比起来整体的效果好很多,使用者体验真的就是不一样。加上并没有热更新支持,就这一点来说,Apple没什么理由禁Flutter,要不连Unity、Unreal、RN什么的都也得一起禁了。
开发上除了一些坑(例如一些音频跟图像的控制处理,还有app生命周期与中断的处理),以及flutter自身及插件上的bug必须自己先处理,加上一部分功能必须靠自己实现(尤其是很多既有的服务的sdk基本都还没提供flutter的插件,得自己撸dart接口)以外,都还是比较友好。目前就是整个生态还比较稚嫩,随着加入者越来越多,肯定会很快被改善。
Flutter整体的体验基本跟原生没什么实际差异,对iOS用户来说,大概是这些app的用户体验会多带一些Android味儿吧。尤其目前感觉鼓捣Flutter的开发者,还是比较多是原来以安卓为主的开发者。其实iOS的开发者不搞安卓的比例更高一些,所以我是更期待iOS阵营能有更多人加入Flutter的行列。就这一点来说,长远来看倒有可能会打破一部分iOS的独占平台优势,但在现阶段来说都还是对iOS的利好。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-22 01:14 , Processed in 0.098765 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表