目前已經有一些方案能夠實現動態打補丁,例如WaxPatch,能夠用Lua調用OC方法,相對於WaxPatch,JSPatch的優點是:前端
1.JS語言
JS比Lua在應用開發領域有更普遍的應用,目前前端開發和終端開發有融合的趨勢,做爲擴展的腳本語言,JS是不二之選。react
2.符合Apple規則
JSPatch更符合Apple的規則。iOS Developer Program License Agreement裏3.3.2提到不可動態下發可執行代碼,但經過蘋果JavaScriptCore.framework或WebKit執行的代碼除外,JS正是經過JavaScriptCore.framework執行的。ios
3.小巧
使用系統內置的JavaScriptCore.framework,無需內嵌腳本引擎,體積小巧。git
4.支持block
wax在幾年前就中止了開發和維護,不支持Objective-C裏block跟Lua程序的互傳,雖然一些第三方已經實現block,但使用時參數上也有比較多的限制。github
相對於WaxPatch,JSPatch劣勢在於不支持iOS6,由於須要引入JavaScriptCore.framework。另外目前內存的使用上會高於wax,持續改進中。web
JSPatch讓腳本語言得到調用全部原生OC方法的能力,不像web前端把能力侷限在瀏覽器,使用上會有一些安全風險:react-native
1.若在網絡傳輸過程當中下發明文JS,可能會被中間人篡改JS腳本,執行任意方法,盜取APP裏的相關信息。能夠對傳輸過程進行加密,或用直接使用https解決。瀏覽器
2.若下載完後的JS保存在本地沒有加密,在未越獄的機器上用戶也能夠手動替換或篡改腳本。這點危害沒有第一點大,由於操做者是手機擁有者,不存在APP內相關信息被盜用的風險。若要避免用戶修改代碼影響APP運行,能夠選擇簡單的加密存儲。安全
JSPatch能夠動態打補丁,自由修改APP裏的代碼,理論上還能夠徹底用JSPatch實現一個業務模塊,甚至整個APP,跟wax同樣,但不推薦這麼作,由於:網絡
若想動態爲APP添加模塊,目前React Native給出了很好的方案,解決了上述三個問題:
因此動態添加業務模塊目前仍是推薦嘗試React Native,但React Native並不會提供原生OC接口的反射調用和方法替換,沒法作到修改原生代碼,JSPatch以小巧的引擎補足這個缺口,配合React Native用統一的JS語言讓一個原生APP時刻處於可擴展可修改的狀態。
目前JSPatch處於開發階段,穩定性和功能還存在一些問題,歡迎你們提建議/bug/PR,一塊兒來作這個項目。
Copy from JSPatch – 動態更新iOS APP