基于JSPatch的在線更新

前言

限于AppStore的審核機制韵丑,蘋果應(yīng)用審核通常需要一段時間侯谁。這對某些應(yīng)用開發(fā)迭代比較快的公司來說,往往上一版本還在AppStore審核堡称,新一版本已經(jīng)開發(fā)完畢了瞎抛,相對于Android的當天發(fā)布來說,已經(jīng)算是不能再慢了却紧。要是正好遇上線上有bug桐臊,那么又得重新回到AppStore提交-審核-發(fā)布的流程中去,但若是十分緊要的bug啄寡,不修復(fù)會影響應(yīng)用的正常使用豪硅,那么再走這個流程就顯得非常慢了。以前面對這種問題往往是走加急審核挺物,但加急審核也會有3天時間懒浮,那能不能不發(fā)布版本在線上修復(fù)bug呢?答案是有的识藤,這里選擇的方案是JSPatch砚著。

JSPatch簡介

JSPatch是由國人開發(fā)的開源項目(Github鏈接)只需要在項目里引入極小的引擎文件,就可以使用 JavaScript 調(diào)用任何 Objective-C 的原生接口痴昧,替換任意 Objective-C 原生方法稽穆。目前主要用于下發(fā) JS 腳本替換原生 Objective-C 代碼,實時修復(fù)線上 bug赶撰。
關(guān)于JSPatch的實現(xiàn)原理可以參考作者的博客舌镶。

語法

JSPatch使用簡單明了,但需要注意的是JSPatch的語法豪娜,將OC語言轉(zhuǎn)為JSPatch餐胀,例如:

  • OC
@implementation SampleClass
- (void)requestUrl:(NSString *)url param:(NSDictionary *)dict callback:(JPCallback)callback {
    [super requestUrl:url param:dict callback:callback];
    JPRequest *obj = [[JPRequest alloc] initWithUrl:url param:dict];
    obj.successBlock = ^(id data, NSError *err) {
        NSString *content = [JPParser parseData:data];
        if (callback) callback(@{
            @"content": content
        }, err);
        [self.dataSource refresh];
        self.handleRequestSuccess(data);
    };
}
@end
  • JSPatch
require('JPRequest,JPParser');
defineClass('SampleClass', {
    requestUrl_param_callback: function(url, dict, callback) {
        self.super().requestUrl_param_callback(url, dict, callback);
        var obj = JPRequest.alloc().initWithUrl_param(url, dict);
        obj.setSuccessBlock(block('id,NSError*', function(data, err) {
            var content = JPParser.parseData(data);
            if (callback) callback({
                "content": content
            }, err);
            self.dataSource().refresh();
            self.handleRequestSuccess()(data);
        }));
    },
});

作者提供了一個JSPatchConvertor簡單粗暴,能滿足一些簡單的轉(zhuǎn)換瘤载,比較復(fù)雜的就得人工修改了否灾,更多語法上的可以參考JSPatchWiki

安全

使用 JSPatch 有兩個安全問題:

  • 傳輸安全:JS 腳本可以調(diào)用任意 OC 方法鸣奔,權(quán)限非常大墨技,若被中間人攻擊替換代碼惩阶,會造成較大的危害。
  • 執(zhí)行安全:下發(fā)的 JS 腳本靈活度大扣汪,相當于一次小型更新断楷,若未進行充分測試,可能會出現(xiàn) crash 等情況對 APP 穩(wěn)定性造成影響崭别。

作者推薦的一種方案如圖所示:

JSPatchSecurity

1.服務(wù)端計算出腳本文件的 MD5 值脐嫂,作為這個文件的數(shù)字簽名。
2.服務(wù)端通過私鑰加密第 1 步算出的 MD5 值紊遵,得到一個加密后的 MD5 值。
3.把腳本文件和加密后的 MD5 值一起下發(fā)給客戶端侥蒙。
4.客戶端拿到加密后的 MD5 值暗膜,通過保存在客戶端的公鑰解密。
5.客戶端計算腳本文件的 MD5 值鞭衩。
6.對比第 4/5 步的兩個 MD5 值(分別是客戶端和服務(wù)端計算出來的 MD5 值)学搜,若相等則通過校驗。
對于JSPatch若有更多安全上的顧慮可以參考作者的回應(yīng)一下 JSPatch 安全問題论衍。

使用

目前有兩種使用方法瑞佩,一種是使用作者提供的JSPatch Platform平臺,集成JSPatch的SDK坯台,按請求次數(shù)收費炬丸,目前免費額度為 100w次請求/月,超出的部分會另行收費蜒蕾。
還有一種是自己造輪子稠炬,畢竟JSPatch是開源的,從前端邏輯到后臺安全策略咪啡,都可以根據(jù)公司的業(yè)務(wù)需求自由定制首启。

后記

總體來說還是十分好用的,需要注意的是每次版本用JSPatch解決的線上Bug后撤摸,下個版本必須得將代碼寫入項目中毅桃。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市准夷,隨后出現(xiàn)的幾起案子钥飞,更是在濱河造成了極大的恐慌,老刑警劉巖冕象,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件代承,死亡現(xiàn)場離奇詭異,居然都是意外死亡渐扮,警方通過查閱死者的電腦和手機论悴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門掖棉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人膀估,你說我怎么就攤上這事幔亥。” “怎么了察纯?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵帕棉,是天一觀的道長。 經(jīng)常有香客問我饼记,道長香伴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任具则,我火速辦了婚禮即纲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘博肋。我一直安慰自己低斋,他們只是感情好,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布匪凡。 她就那樣靜靜地躺著膊畴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪病游。 梳的紋絲不亂的頭發(fā)上唇跨,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天,我揣著相機與錄音衬衬,去河邊找鬼轻绞。 笑死,一個胖子當著我的面吹牛佣耐,可吹牛的內(nèi)容都是我干的政勃。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼兼砖,長吁一口氣:“原來是場噩夢啊……” “哼奸远!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起讽挟,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤懒叛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后耽梅,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體薛窥,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了诅迷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片佩番。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖罢杉,靈堂內(nèi)的尸體忽然破棺而出趟畏,到底是詐尸還是另有隱情,我是刑警寧澤滩租,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布赋秀,位于F島的核電站,受9級特大地震影響律想,放射性物質(zhì)發(fā)生泄漏猎莲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一技即、第九天 我趴在偏房一處隱蔽的房頂上張望益眉。 院中可真熱鬧,春花似錦姥份、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至屿衅,卻和暖如春埃难,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背涤久。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工涡尘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人响迂。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓考抄,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蔗彤。 傳聞我的和親對象是個殘疾皇子川梅,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容