App Store 狠抓精神文明建設(shè),JSPatch要亡了?

據(jù)悉,近日美國蘋果公司響應(yīng)黨的號召,為了實現(xiàn)了社區(qū)文明和諧,各項事業(yè)全面發(fā)展,狠抓精神文明建設(shè)。將形成組織領(lǐng)導(dǎo)、定期引導(dǎo)、精準對標、適時檢查、總結(jié)提高等五項機制,確保創(chuàng)建工作規(guī)范化、科學(xué)化、常態(tài)化。 ---來自老司機的前線報道

事情的主要起因在 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之后更新上去的。這條規(guī)則也很容易理解,所有被執(zhí)行的代碼都應(yīng)該包含在App里,不能下載代碼到本地執(zhí)行。下發(fā)的無論是OC還是JS或者其他形式的代碼,都可以被認為違反了這條規(guī)則。但是蘋果一直沒有嚴格“執(zhí)法”,直到今天才開始給大批有類似嫌疑的開發(fā)者發(fā)了警告郵件,或者紛紛被拒。

當然這沒有什么可怪的,這種執(zhí)行力度全靠心情,畢竟爸爸從來不用講道理。不時也會父愛如山。

父愛如山

根據(jù)看到的反饋,目前蘋果判斷的依據(jù)主要有兩條。
一種是掃描特定的 API ,比如:

dlopen(), dlsym(), respondsToSelector:, performSelector:, method_exchangeImplementations()

但是這里并不是完全禁止使用這些 API ,只是有個規(guī)則會檢查這些 API 的參數(shù)是不是可能是外部引入的。
比如這么寫是沒問題的:

if([self.delegate respondsToSelector: @selector(myDelegateMethod)]) {
   [self.delegate performSelector: @selector(myDelegateMethod)];
}

這么寫就可能被打回:

NSString *remotelyLoadedString = .... (download from your backend)
[self performSelector: NSSelectorFromString(remotelyLoadedString)];

另外會檢查特定的類名,比如大家都知道的JSPatch和Rollout,發(fā)現(xiàn)APP里帶了這樣有潛在威脅的庫就可能打回。但是這個方式似乎通過混淆就能過關(guān)。


不懂為什么提到JSPatch我就想發(fā)個表情,印象中過去某個時間段也有被這樣提示被下架,后來又放松了。內(nèi)心 OS :“皇上!我是被冤枉的!。”


紫薇,快救我

對未來的判斷

蘋果是百分百不愿意代碼繞過審核被下發(fā)的。無論是修bug,還是一個小功能,高冷的資本主義企業(yè)怎么能讓你亂蹭,萬一你進去了呢。其實我國國情特殊,真要是什么違法的東西上了蘋果也遭不住,搞不好App Store都要下線。

道高一尺魔高一丈,程序執(zhí)行起來總是要有漏洞。沒錯,是可以和官方博弈,但是你想一下下發(fā)代碼這件事是不是真的影響到App運行非做不可?如果代價提高呢?比如被發(fā)現(xiàn)一次直接封掉你的Apple ID,覺得還是非做不可?

聰明的人已經(jīng)在如何提APP穩(wěn)定性的道路上努力了。忘了HotPatch這件事吧。


RN&Weex 還能續(xù)一輪命

從各方的反饋來看,蘋果這輪狠抓的是下發(fā)代碼,而不是針對用 JS 代碼編寫業(yè)務(wù)邏輯。如果覺得這個有問題,就會把 JSCore 的一些核心 API 改為私有 API 了。只是在這個風(fēng)口,基于這個技術(shù)的框架剛好很容易就提供了下發(fā)代碼執(zhí)行邏輯的能力,所以被推到燈光下。
我之前有次也問過Weex的負責(zé)人,他明確表示 Weex 不是為了解決熱更新的問題存在的。只是恰巧有這個能力。
蘋果在 iOS 7中引入新的 JavaScriptCore 框架,必然是認為在 APP 里執(zhí)行 JS 對于整個 iOS 生態(tài)是有益的,否則何必多此一舉。所以目前只是要解決掉引入這個框架后帶來的濫用問題。 所以我認為這一輪的整治里,JS2Native 的框架肯定可以全身而退。

Swift ?

有人說有沒可能是蘋果在為 Swift 下一步很大的棋。為了確認此事某好事網(wǎng)友咨詢了 Swift 之父CL:



爸爸口風(fēng)很緊表示:


共建和諧社會

來,讓我們一起表態(tài):我志愿與美方一道建設(shè)和諧的 App Store 生態(tài)。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容