以下是iOS app熱更新的幾種方案。
一、動態庫
可以做demo用,真實使用的時候會被蘋果禁止。
因為 打包發到AppStore的ipa安裝包 里的每個動態庫 都有唯一的編碼,iOS系統會進行驗證,所以動態通過網絡獲取 新的動態庫 也用不了。
WWDC2014:允許使用動態庫、允許第三方鍵盤、App Extension。
從目前來看,iOS仍然不允許進程間共享動態庫,即iOS上的動態庫只能是私有的,因為我們仍然不能將動態庫文件放置在除了自身沙盒以外的其它任何地方。
iOS8上開放了App Extension功能,可以為一個應用創建插件,這樣主app和插件之間共享動態庫還是可行的。
二、lua腳本
比如: wax。
熱更新時,從服務器拉去lua腳本。游戲開發經常用到。
三、Weex
跨平臺,一套代碼,iOS、Android都可以運行。用前端語法實現原生效果。比React Native更好用。
weex基于vue.js,ReactNative使用React。
ReactNative安裝配置麻煩。 weex安裝cli之后就可以使用。
react模板JSX有一定的學習成本,vue和常用的web開發類似,模板是普通的html,數據綁定用mustache風格,樣式直接使用css。
四、React Native
不像Weex能一套代碼多端運行,需要自己分別做修改。
React Native 可以動態添加業務模塊,但無法做到修改原生OC代碼。
JSPatch、lua 配合React Native可以讓一個原生APP時刻處于可擴展可修改的狀態。
五、Hybrid
像PhoneGap之類的框架, 基本概念和web差不多, 通過更新js/html來實現動態化,沒有原生的效果流暢。
六、JSPatch
熱更新時,從服務器拉去js腳本。理論上可以修改和新建所有的模塊,但是不建議這樣做。
建議 用來做緊急的小需求和 修復嚴重的線上bug。
七、rollout.io
Rollout緊急修復線上bug。后端有相關的管理頁面。因為是國外的網站,然后呢,要翻墻才能使用。
八、DynamicCocoa
滴滴iOS的一個框架,準備在2017年初開源,與JSPatch比更加智能化,用OC在XCode中寫完代碼,用工具可以自動生成可以更新的js文件。
九、手機QQ虛擬機方案
手機QQ的一方案,將OC代碼編譯成自定義的二進制格式,下發到APP,然后在虛擬機里面運行。