本文爲轉載文章ios
故事背景: 安全
這兩天,很多iOS開發羣都炸窩了,緣由是部分iOS開發者收到了蘋果的警告郵件:weex
有開發者質疑多是項目中使用了JSPatch、weex以及ReactNative等熱更新技術。對於修復bug提交審覈的開發者來講,熱更新技術能夠幫開app
發者避免長時間的審覈等待以及屢次被拒形成的成本開銷。但也給黑客留了後門,也就違反了蘋果的安全和隱私政策。框架
不過此次蘋果只是對使用熱更新的應用進行了警告,並無開發者反應產品所以問題被下架。ide
在蘋果開發者論壇上,一位開發人員透露,他們的公司已經接到消息,稱在刪除這些「HotPatch」代碼以前,蘋果將不接受其應用更新。學習
分析說明:優化
從目前各方面反饋來看,蘋果這次狠抓的是下發代碼,因此JSPatch就被拉出來吃槍子了,JS等形式代碼將被禁止。ui
WWDC後App Store Review Guidespa
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.
本條規定全部執行代碼都須要包含在App中,不能下載代碼到本地執行,因此OC或者JS形式的代碼明顯違反了這條規定,但蘋果顯然沒有在
過去一年中對這條規定進行貫徹,直到今天才向相關開發者發出了警告。
對遊戲自己有何影響?
這個問題其實有目共睹,在禁止熱更新以後
一、遊戲沒法頻繁更新功能、修復BUG,廠商在更新版本以前,可得長點心吧!
二、遊戲更新後用戶須要從新下載完整遊戲,帶來了用戶流失和活躍度降低,特別是大包體遊戲更爲嚴重,用戶要是動不動就下載個1G多的遊戲,對遊戲體驗的傷害太大。
三、遊戲更新後總體需從新通過蘋果再次審查,形成審覈週期增長。
是否有規避方法?
根據目前蘋果進行審查的方式主要有兩種:
一種是檢查特定的類名,如JSPatch和Rollout,蘋果會審查APP是否攜帶了這一類的庫。
另外一種是掃描特定的API,有規則將會檢查這些 API 的參數是否可能由外部引入。
經過混淆JSPtach(替換JSPtach內部全部類和方法名),或許是能夠繞過審查矇混過關。雖然蘋果還沒有明確懲罰方式,但在繼續
HotPatch和開發者帳號被封之間,仍是提升點App穩定和Debug上多下功夫,Weex彷佛也還有機會。
蘋果開發者在去年就發現了因爲JSPatch所引發的更新漏洞將被黑客利用,從而引發一系列損失,蘋果對AppStore的優化也從未中止,不管開發者對於這次HotPatch的禁令是否存在各類怨言,按照蘋果的以往原則來看:大家儘管罵,最後還不得管我叫爸爸!
開發者說:
舞小月:
蘋果注重的就是流暢性和用戶體驗,混編作的東西確定沒有native的流暢,這就違背了蘋果原本的意願,被禁也是正常的,並且蘋果本身的蛋糕爲什麼要分給競爭對手?之前沒混編的時候你該怎麼作不仍是作了,如今沒有,不表明之後沒有,就像以前沒有混編,後來有了混編。新的框架蘋果天然也會去完善,蘋果既然作了這個決定,他確定會優化本身的東西。
Gilbertat:
蘋果爸爸會不會在本身的生態中搞死js啊
luohui8891:
咱們也是昨天收到的,目前沒有什麼對策。咱們的APP只是用JSPatch作熱修復,並不修改應用的功能行爲等(但我以爲Apple並不care這個)。
lsllsllsl:
沒用RN沒用JSPatch,一樣收到警告。
luohui8891:
@tcathy 根據郵件裏說是你下次提交前請去掉這樣遠程下載代碼運行的機制。因此應該就是下個版本若是不刪除就reject
Loooren:
早上收到郵件,itunesconnect站內信,電話通知....用到了weex
xiaofuyesnew:
昨天晚上微軟發佈了Visual Studio 2017,自帶基於React Native的iOS開發功能。鑑於微軟這兩年來開源的力度,發佈這一功能彷佛是在搶佔開發者的市場,基於vs2017,在非蘋果上開發ios應用更容易了。因此,蘋果在這個節骨眼發出這個警告郵件,就有點威脅現有開發者的意思。暗地裏想跟微軟互懟。
對於那些已經在學習RN、weex、JSPatch的同窗來講,這是個悲慘的故事
從蘋果的角度看,禁止應用使用熱更新技術更可能是爲了保護用戶隱私、數據安全以及其全力打造的生態圈。對於用戶來講,出於安全起見,應謹慎授予應用權限;對於開發者來講,爲了審覈以及長遠的用戶體驗考慮,不要輕易觸碰蘋果拉的那條紅線。