据悉,近日美国苹果公司响应党的号召,为了实现了社区文明和谐,各项事业全面发展,狠抓精神文明建设。将造成组织领导、按期引导、精准对标、适时检查、总结提升等五项机制,确保建立工做规范化、科学化、常态化。 ---来自老司机的前线报道swift
事情的主要原由在 App Store Review Guide Line 的 2.5.2 这条:weex
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.app
这条是在16年WWDC以后更新上去的。这条规则也很容易理解,全部被执行的代码都应该包含在App里,不能下载代码到本地执行。下发的不管是OC仍是JS或者其余形式的代码,均可以被认为违反了这条规则。可是苹果一直没有严格“执法”,直到今天才开始给大批有相似嫌疑的开发者发了警告邮件,或者纷纷被拒。框架
固然这没有什么可怪的,这种执行力度全靠心情,毕竟爸爸历来不用讲道理。
ide
根据看到的反馈,目前苹果判断的依据主要有两条。
一种是扫描特定的 API ,好比:ui
dlopen(), dlsym(), respondsToSelector:, performSelector:, method_exchangeImplementations()spa
可是这里并非彻底禁止使用这些 API ,只是有个规则会检查这些 API 的参数是否是多是外部引入的。
好比这么写是没问题的:3d
if([self.delegate respondsToSelector: @selector(myDelegateMethod)]) {
[self.delegate performSelector: @selector(myDelegateMethod)];
}复制代码
这么写就可能被打回:code
NSString *remotelyLoadedString = .... (download from your backend)
[self performSelector: NSSelectorFromString(remotelyLoadedString)];复制代码
另外会检查特定的类名,好比你们都知道的JSPatch和Rollout,发现APP里带了这样有潜在威胁的库就可能打回。可是这个方式彷佛经过混淆就能过关。
orm
不懂为何提到JSPatch我就想发个表情,印象中过去某个时间段也有被这样提示被下架,后来又放松了。心里 OS :“皇上!我是被冤枉的!。”
苹果是百分百不肯意代码绕过审核被下发的。不管是修bug,仍是一个小功能,高冷的资本主义企业怎么能让你乱蹭,万一你进去了呢。其实我国国情特殊,真要是什么违法的东西上了苹果也遭不住,搞很差App Store都要下线。
道高一尺魔高一丈,程序执行起来老是要有漏洞。没错,是能够和官方博弈,可是你想一下下发代码这件事是否是真的影响到App运行非作不可?若是代价提升呢?好比被发现一次直接封掉你的Apple ID,以为仍是非作不可?
聪明的人已经在如何提APP稳定性的道路上努力了。忘了HotPatch这件事吧。
从各方的反馈来看,苹果这轮狠抓的是下发代码,而不是针对用 JS 代码编写业务逻辑。若是以为这个有问题,就会把 JSCore 的一些核心 API 改成私有 API 了。只是在这个风口,基于这个技术的框架恰好很容易就提供了下发代码执行逻辑的能力,因此被推到灯光下。
我以前有次也问过Weex的负责人,他明确表示 Weex 不是为了解决热更新的问题存在的。只是恰巧有这个能力。
苹果在 iOS 7中引入新的 JavaScriptCore 框架,必然是认为在 APP 里执行 JS 对于整个 iOS 生态是有益的,不然何须画蛇添足。因此目前只是要解决掉引入这个框架后带来的滥用问题。 因此我认为这一轮的整治里,JS2Native 的框架确定能够全身而退。
有人说有没多是苹果在为 Swift 下一步很大的棋。为了确认此事某好事网友咨询了 Swift 之父CL:
来,让咱们一块儿表态:我方愿与美方一道建设和谐的 App Store 生态。