內(nèi)容提要:
* 為什么收到了蘋果的警告郵件?
* 關(guān)于這次事件的個人淺見。
一、為什么這么熱鬧?
在今天這特殊的日子,很多iOS項(xiàng)目中有使用JSPatch的、以及一小部分RN、Weex開發(fā)者都收到了蘋果的警告郵件,內(nèi)容大致如下:

事情經(jīng)過發(fā)酵,在微信、微博、論壇各種平臺就有謠言傳播蘋果開始封殺所有混合開發(fā)模式和/或熱更新。來自公眾號后臺部分留言截圖:


二、事件的緣由
很多事情原本壓根不是那樣,但越傳就會越離譜;這就是消息傳播的魅力。

其大致意思是:像JSPatch這樣的第三方庫,具備通過熱更新的代碼訪問私有API的能力,這對APP的安全有極大的危險性。此次警告和封殺的重點(diǎn)主要是在這里。所以混合開發(fā)和熱更新都不在這次警告和打擊之列,雖然不在這范圍,但也不能踩蘋果的紅線,否則被警告是必然的。
RN、Weex不受影響支撐依據(jù)
蘋果開發(fā)者協(xié)議3.3.2節(jié):一個應(yīng)用程序不應(yīng)該下載或安裝任何可執(zhí)行代碼。如果所有的腳本、代碼、和解釋器都被打包在應(yīng)用內(nèi)而沒有被下載,解釋執(zhí)行的代碼可以在應(yīng)用內(nèi)使用。
一個應(yīng)用程序不應(yīng)該下載或安裝任何可執(zhí)行代碼,其意思是:指二進(jìn)制可執(zhí)行代碼。React Native的架構(gòu)中并沒有諸如此類的操作,所以不會受上述條款的影響。 如果你的應(yīng)用受到警告,請檢查你的庫中使用的第三方插件是否使用了對應(yīng)的動態(tài)訪問私有API,尤其是涉及統(tǒng)計(jì)分析、crash收集、以及性能分析的插件,暫時避免進(jìn)行功能變更的熱更新操作。
還有種說法是蘋果此舉是懟微軟剛發(fā)布的VS2017, 因?yàn)檫@個版本集成了iOS模擬器,用戶以后就可以在windows系統(tǒng)下開發(fā)Android和iOS應(yīng)用。(蘋果內(nèi)心是脆弱的,哈哈)
三、順勢而為

就像PC端的應(yīng)用經(jīng)歷了由 所有應(yīng)用完全基于C/S架構(gòu) ---> 小部分應(yīng)用基于B/S架構(gòu),大部分應(yīng)用基于C/S架構(gòu) ---> 大部分應(yīng)用基于B/S架構(gòu),小部分應(yīng)用基于C/S架構(gòu)。兩種開發(fā)模式都沒有完全被互相取代,只有說哪種方式對于公司、開發(fā)者而言更適合。
那么接下來,在移動設(shè)備上應(yīng)用的開發(fā)方式會經(jīng)歷的歷程和PC端大致也是相同的,最終兩種開發(fā)方式都會存在,只不過是市場份額的多與少而已。
就拿React Native開發(fā)移動端應(yīng)用來說,一個事實(shí)已經(jīng)被認(rèn)證:JS Native不能完全完成Native下的所有功能。最簡單的比如:1)動畫,RN體系下必然要用Native的,不然丟幀、掉幀會非常嚴(yán)重; 2)一些第三方的SDK,可能只有Native的,這時候必要要封裝調(diào)用。......
所以,在大前端領(lǐng)域,一個合格的開發(fā)者的技能包必然是:JS + iOS 或 JS + Android,我們可以慢慢過渡,而且不過渡關(guān)系也不是那么那么大;畢竟T型人才和Y型人才都會有市場需求。 當(dāng)然,上面說的也不是絕對的,畢竟JS離統(tǒng)一世界還差500年。