蘋果為什么要全面禁止熱更新(2)
蘋果是不是完全禁止了熱更新技術(shù)
并不是,目前為止收到警告郵件的開發(fā)者絕大部分使用了 JS-Patch 或 Rollout 類庫,剩下未直接使用這些類庫的開發(fā)者,目前初步估計很可能是在集成的第三方 SDK 中使用了上述框架。而未采用上述框架的熱更新技術(shù),目前為止并未收到影響。而絕大部分游戲引擎由于并沒有調(diào)用這些類庫,也自然沒有受到影響。
當(dāng)然,后續(xù)事態(tài)會不會進一步擴大,還需要看蘋果接下來的策略。但是筆者認(rèn)為,游戲中的熱更新技術(shù)并不會受到蘋果的禁止,作為一名技術(shù)人員,我們不討論產(chǎn)品、商業(yè)等問題,只從技術(shù)角度來看,為什么 JSPatch 蘋果認(rèn)為是不允許的,而游戲引擎的熱更新技術(shù),蘋果目前認(rèn)為是可以的。
蘋果為什么要禁止 JSPatch 等熱更新技術(shù)
JSPatch 的原理是,開發(fā)者編寫 JavaScript 代碼,利用蘋果內(nèi)置的 JavaScriptCore.Framework 執(zhí)行,以實現(xiàn)熱更新功能。這一點看似也符合標(biāo)準(zhǔn),但是在技術(shù)上,存在著重大安全隱患,參考 JSPatch 的業(yè)務(wù)邏輯:
簡單理解,JSPatch 可以理解為所有的 Objective-C 的 API 進行了映射,允許開發(fā)者在 JS 端調(diào)用任意原生代碼,這顯然是極其危險的。假設(shè)這段代碼是通過熱更新技術(shù)下載執(zhí)行的,如果在中間存在黑客,把這段代碼動態(tài)替換掉,比如修改為獲取用戶通訊錄并上傳到黑客的服務(wù)器,就會造成重大的安全問題。
為什么游戲熱更新技術(shù)可以被理解為是安全的
與 JSPatch 不同的是,游戲熱更新技術(shù)主要的實現(xiàn)方式是把動態(tài)腳本下載之后,讓動態(tài)腳本調(diào)用游戲引擎提供的接口實現(xiàn)缺陷修復(fù)。與 JSPatch 不同的是,動態(tài)腳本并不能任意調(diào)用全部原生代碼,而是只能根據(jù)游戲引擎提供的接口調(diào)用相關(guān)功能。在這個過程中,游戲引擎的原生端作為一個安全沙箱,提供了一個安全的保護層,只要游戲引擎不要對外提供獲取通訊錄的接口,黑客就無法通過替換動態(tài)腳本的方式獲取用戶的隱私資料。進而可以被認(rèn)為是安全的,自然不在蘋果的禁止范圍內(nèi)。
小結(jié)
蘋果認(rèn)為熱更新技術(shù)容易被黑客利用,造成重大安全問題。在官方警告郵件中,也是在進行如此描述。
JSPatch 這種基于反射,允許獲取全部系統(tǒng)接口的方式,確實存在著一定的安全風(fēng)險。雖然可以通過安全策略去防范,但是蘋果決定一刀切,嚴(yán)格禁止。
游戲引擎由于不是利用反射機制實現(xiàn)的熱更新,不能獲取全部系統(tǒng)接口,所以目前蘋果認(rèn)為是安全的,無需警告。
未來,蘋果還要在中國市場掀起多大的風(fēng)浪,我們無從得知。不過可以預(yù)料的是,在6月12日前后,App Store 的 App 下架數(shù)量很可能會出現(xiàn)一次高峰。App Store的很多APP將消失在我們眼前。這里還是要提醒大家,關(guān)注自家 iTC 后臺有沒有收到相關(guān)通知(很多同學(xué)的賬號可不止一兩個),如果收到就要盡快對產(chǎn)品進行調(diào)整了,刪除相關(guān)代碼并提交更新。
看過蘋果為什么要全面禁止熱更新的人還看了: