首页 > 其他分享 >苹果爸爸发飙,封杀 React Native?

苹果爸爸发飙,封杀 React Native?

时间:2023-05-21 14:32:14浏览次数:44  
标签:发飙 App iOS JSPatch React 苹果 RN Native


今天早上一上班,就收到了苹果发来的一封警告邮件,一看内容,就知道这是个大事啊,还赶紧发了个微博,然后,今天一整天,iOS 界都被这个消息炸裂了!

这封警告邮件大概意思就是说,苹果将不再允许使用动态下发代码的机制,如果 App 内部使用了动态下发代码的框架,将有被拒的风险。

所谓的动态下发代码,就是我们常说的热修复、热更新,就是在我们无需发布的版本的情况下,就可以修复 bug ,发布功能,因为 iOS 审核的机制,这项能力在 iOS 界非常重要。

在 iOS 界拥有动态下发能力的有以下几个框架:JSPatch、Rollout、React Native、Weex。

其中 JSPatch 跟 Rollout 是专门的热更新框架,JSPatch 国内应用使用很广泛,包括我们家的也是,Rollout 则是国外使用的较多,是这次针对的主要对象,之前苹果针对这种热更新是睁只眼闭只眼,而这次则是下定了决心要整改,毕竟绕过了苹果爸爸的审核机制,如果以后不加管理,岂不逃出了爸爸的法眼。

这个倒还好,大不了不用热更新罢了,但是一些 App 中使用 React Native 和 Weex 的开发者,同样有人收到了苹果的警告邮件,这可就炸开了锅,要知道 RN、Weex 这种是大厂推出的跨平台框架,这要是被封杀了,一些大厂的 App 要重写就夸张了,这可是致命的打击。

但是在还没确定结论的情况下,之前学很长时间 RN 的同学简直要懵逼了,还有一些没学的同学甚至幸灾乐祸,暗自庆幸,幸亏没学啊,甚至有谣言传有公司把整个 RN 部门都砍了,真是有点看不下去了,所以我觉得应该弄清楚原因,写篇文章。

了解到,这次事情的主要起因在 App Store Review Guide Line 的 2.5.2 这条:

2.5.2 Apps should be self-contained in their bundles, and may not read or write data outside the designated container area, nor may they download, install, or execute code, including other iOS, watchOS, macOS, or tvOS apps.

这是在 16 年 WWDC 之后新更新的一条规则。什么意思呢?意思是说,所有被执行的代码都应该包含在 App 里,不能下载代码到本地执行。下发的无论是 OC 还是 JS 或者其他形式的代码,都可以被认为违反了这条规则,都有被拒的风险。

看到这里,我大概就明白了,苹果本次主要是针对下发代码,而 React Native、Weex 这类框架刚好也具备了下发代码的能力,但是他们的主要职责不是为了解决热更新而存在的,而是一种跨平台的解决方案,所以,虽然苹果官方没说明,但是我认为,只是刚好在这个风口浪尖,躺枪了而已。

所以,有些人听风就是雨,不要这么着急下结论,RN、Weex 这种跨平台解决方案虽然现在还不成熟,使用范围也没那么广,我个人也不推荐现在在商业项目使用,但是暂时不用担心会被苹果封杀,如果真的被苹果封杀了,那么微信小程序就不会同意审核过了,因为本质上微信小程序也是类似 RN 的一套方案,请大家具备点基本的思考能力。

而且 React Native 官方也做了回应,说不会受影响,地址在这里:
https://github.com/facebook/react-native/issues/12778

看似苹果的事跟 Android 开发者无关,但是如果苹果封杀了 React Native,那么 Android 界也会受影响,毕竟采用 RN 主要是为了跨平台,苹果都不支持了,谁还会用 RN 来开发 Android 啊,故此,写篇文章给大家说明下。

顺便说下,针对这次苹果事件的解决方案,你们家的 iOS App 很可能会用到:

  1. 国内 App 如果有在使用 JSPatch 的,那么请移除,目前没有其他更好的方案;
  2. 更新或者移除一些第三方使用 JSPatch 的 SDK,目前已知的有高德地图、BugTags、个推、Bugly。

另外,说个题外话,这次事件一出,JSPatch GitHub 官方库的 Issues 有人寻求证实与解决方案,谁知道引来一群吃瓜群众围观、盖楼,那场景相当壮观,只能说中国人把 GitHub 玩坏了,GitHub 本是一个讨论技术的开源社区,把这种不良的风气带到 GitHub 上真的看不下去,在这里呼吁大家,以后不要在 GitHub 干这种事!

地址在这里:
https://github.com/bang590/JSPatch/issues/751

最后,这事一出,很多 iOS 开发者开骂苹果爸爸太霸道,其实我想说,知足吧,身在福中不知福,如果我谷爹能偶尔霸道一回,Android 开发者们估计要高兴疯了!

公众号 AndroidDeveloper


标签:发飙,App,iOS,JSPatch,React,苹果,RN,Native
From: https://blog.51cto.com/stormzhang/6319363

相关文章

  • React闭包陷阱
    React闭包陷阱ReactHooks是React16.8引入的一个新特性,其出现让React的函数组件也能够拥有状态和生命周期方法,其优势在于可以让我们在不编写类组件的情况下,更细粒度地复用状态逻辑和副作用代码,但是同时也带来了额外的心智负担,闭包陷阱就是其中之一。闭包从React闭包陷阱的名字......
  • react面试题汇总1
    请介绍一下React的生命周期函数及其调用顺序。答:React的生命周期函数分为三个阶段:挂载、更新和卸载。以下是各个生命周期函数的名称及调用顺序:挂载阶段constructor():组件构造函数,在最开始时调用。staticgetDerivedStateFromProps():从props中派生出state,返回新的state值,会在render......
  • React 源码调试 (react版本17.0.2)
    环境准备//create-react-a匹配版本$create-react-app-V5.0.1//node版本$node-Vv16.16.0  1、第一步通过create-react-app快速创建环境,然后运行yarneject释放webpack配置  npxcreate-react-appreact-debugyarneject 2、第二步降级reac......
  • 实现 React 简易版 createElement 和 render 方法
    前言在React中,我们都知道可以写jsx代码会被编译成真正的DOM插入到要显示的页面上。这具体是怎么实现的,今天我们就自己动手做一下。实现createElement方法这个方法平时开发我们并不会用到,因为它是经babel编译后的代码,我们新建一个React项目,index.js最简单的代码结构如......
  • 1. react项目【前端】+C#【后端】从0到1
    1、创建前端基础框架 1.1前端创建软件: 1.1.1npxcreate-react-apppcps:pc是文件名; 1.1.2npmstart启动项目 2、创建后端基础框架软件: 2.1创建webapi项目  Program.cs是启动文件;  ......
  • 社招前端二面必会react面试题及答案
    高阶组件的应用场景权限控制利用高阶组件的条件渲染特性可以对页面进行权限控制,权限控制一般分为两个维度:页面级别和页面元素级别//HOC.jsfunctionwithAdminAuth(WrappedComponent){returnclassextendsReact.Component{state={......
  • 面试官:React怎么做性能优化
    前言最近一直在学习关于React方面的知识,并有幸正好得到一个机会将其用在了实际的项目中。所以我打算以博客的形式,将我在学习和开发(React)过程中遇到的问题记录下来。这两天遇到了关于组件不必要的重复渲染问题,看了很多遍官方文档以及网上各位大大们的介绍,下面我会通过一些demo结......
  • 面试官让你说说react状态管理?
    开发者普遍认为状态是组件的一部分,但是同时却又在剥离状态上不停的造轮子,这不是很矛盾么?对于一个最简单的文本组件而言functionText(){const[text,setText]=useState('载入')return(){<p>{text}</p>}}你觉得应该把text从Text组件中剥离么?如果......
  • 高级前端常考react面试题指南
    pureComponent和FunctionComponent区别PureComponent和Component完全相同,但是在shouldComponentUpdate实现中,PureComponent使用了props和state的浅比较。主要作用是用来提高某些特定场景的性能为什么虚拟DOM会提高性能虚拟DOM相当于在js和真实DOM中间加了一个缓存,利用DOM......
  • react-query-builder查询构建器中文文档
    简介react-query-builder是一个React组件库,用于构建可配置的查询构建器。使用react-query-builder,您可以轻松地构建复杂的查询表单,使用户能够以直观的方式构建和执行查询。以下是一些常见的用例:构建高级搜索表单,允许用户根据不同的条件搜索数据。在数据可视化应用程序中使用......