IOS在線更新方案
簡介:
引用于:價值100W的經(jīng)驗分享: 基于JSPatch的iOS應(yīng)用線上Bug的即時修復(fù)方案,附源碼
幾種在線更新方案的對比: 為什么是JSPatch?
方案一: 申請”加急審核”
- 方法: 提交應(yīng)用時,選擇”加急審核”.
- 優(yōu)點: 操作簡單,只需要重新上傳應(yīng)用即可;
- 缺點:”加急審核”,肯定是不能經(jīng)常使用的.
- 簡評: 我想,這可能是大多數(shù)公司遇到緊急問題時,最常使用的方案.一個應(yīng)用,每年是有若干次機會申請”加急審核”,來縮短應(yīng)用新版本的審核周期.通常審核周期是7天左右;”加急審核”,通常只需要3天左右.
6-8日后 AppStore審核加速 正常審核時間平均在4天左右
方案二: 使用 webview + Html5 頁面
- 方法: 特定的可能需要經(jīng)常換的頁面使用WebView來顯示,內(nèi)部使用Html5的內(nèi)容來填充.當(dāng)需要改變頁面時,只需要改變下服務(wù)器接口返回的內(nèi)容即可.
- 優(yōu)點: 對于內(nèi)容的更新,足夠靈活和迅速.
- 缺點: 無法修復(fù)非HTML5頁面的Bug;Html5 交互和UI通常遜色于原生頁面.
- 簡評: 混合應(yīng)用常用的方式,如PhoneGap等;對于大多數(shù)原生應(yīng)用來說,此方案基本無適用性.
方案三: 編寫基于ReactNative的應(yīng)用
- 方法: 使用 ReactNative 來編寫應(yīng)用或應(yīng)用的部分頁面,更多介紹參見: React Native 官方文檔中文版
- 優(yōu)點: 原生UI,原生交互,支持服務(wù)器方式在線更新應(yīng)用.
- 缺點: 對于非ReactNative編寫的頁面無能為力.
- 簡評: 個人主觀是很看好 ReactNative的,也在慢慢踩坑;但現(xiàn)實是大部分公司的已有項目是基于Objetive-C的,所以基于ReactNative的在線更新策略,目前對于大多說公司來說也并不具有可行性.
方案四: 基于JSPatch實現(xiàn)在線補丁式更新
- 方法: 在自己的項目中引入JSPatch庫,然后參見下文繼續(xù)討論的方案細節(jié)實施即可.JSPatch的入門使用,參見: http://www.ios122.com/2015/11/jspatch/
- 優(yōu)點: 支持操作所有工程中引入的CocoaTouch庫與各種第三方庫.可完全自由定義與重寫已有代碼的邏輯.
- 缺點: JS語法操作API,語法轉(zhuǎn)換有一定成本.
- 簡評: 大多數(shù)時候,我們需要的只是重寫下某個方法,甚至某個判斷,某個默認值,就可以很好地修復(fù)某個線上的Bug.所以,JSPatch,已經(jīng)夠用了.當(dāng)然,如果是對于復(fù)雜的新功能的添加的話,建議還是提交審核吧.另外,不得不說一句,JSPatch + ReactNatvie 將來或許會成為一個很強力的組合,前者側(cè)重于Bug的修復(fù),后者側(cè)重于復(fù)雜新需求的添加.本文接下來的篇幅將注重討論基于JSPatch的線上Bug的即時修復(fù)方案.
JSPATH是什么?
引用來自:JSPatch庫, 一個Apple官方支持的實現(xiàn)在線更新iOS應(yīng)用的庫
簡介
JSPatch 可以讓你用 JavaScript 書寫原生 iOS APP。只需在項目引入極小的引擎,就可以使用 JavaScript 調(diào)用任何 Objective-C 的原生接口,獲得腳本語言的優(yōu)勢:為項目動態(tài)添加模塊,或替換項目原生代碼動態(tài)修復(fù) bug。
優(yōu)勢
- 在項目中引入JSPatch,就可以在發(fā)現(xiàn)bug時下發(fā)JS腳本替換原生方法,可以做到無需更新整個APP即時修復(fù)bug!
- JSPatch用iOS內(nèi)置的 JavaScriptCore.framework作為引擎;JSPatch也符合蘋果的規(guī)則。蘋果不允許動態(tài)下發(fā)可執(zhí)行代碼,但通過蘋果 JavaScriptCore.framework 或 WebKit 執(zhí)行的代碼除外,JS 正是通過 JavaScriptCore.framework 執(zhí)行的。
- JSPatch非常小巧