iOS開發(fā) MangoFix結(jié)合碼云儲(chǔ)存補(bǔ)丁文件實(shí)現(xiàn)熱更新

選擇技術(shù)實(shí)現(xiàn)方案

近段時(shí)間,由于公司要求需要增加熱更新或熱修復(fù)功能复局,這個(gè)開發(fā)需求讓我有點(diǎn)頭疼马篮。記憶中蘋果公司已于2017年3月禁止了JSPatch那種方式的熱更新,我只好放棄JSPatch這種方案。網(wǎng)上找了一圈蜡坊,只有TTPatch和MangoFix這兩個(gè)框架可行杠输,但這兩個(gè)框架目前都不支持swift語言開發(fā)的項(xiàng)目。由于我手上的公司項(xiàng)目代碼還是OC開發(fā)的項(xiàng)目秕衙,不影響使用這兩個(gè)框架蠢甲。TTPatch是JSPatch的簡化版,原理與JSPatch相似据忘。MangoFix是DSL(即領(lǐng)域?qū)S谜Z言)開發(fā)的鹦牛,性能比TTPatch高出好幾倍。對(duì)比這兩個(gè)框架后勇吊,我選擇了MangoFix曼追,其實(shí)最主要的原因是MangoFix可以無感進(jìn)行修復(fù)代碼,用戶不用下載補(bǔ)丁文件操作汉规,只需要配置更新文件的遠(yuǎn)程地址將更新文件保存在本地即可礼殊。另外,據(jù)MangoFix的作者說鲫忍,MangoFix2.0版本將支持swift語言膏燕,我們一起期待吧!

更新于12月1日

目前已經(jīng)從MangoFix升級(jí)到OCRunner悟民,OCRunner可以支持方法以dynamic @objc開頭的Swift文件熱修復(fù)坝辫。相比MangoFix支持的方法更多了。參考以下鏈接文檔

https://github.com/SilverFruity/OCRunner/blob/master/README-CN.md

碼云儲(chǔ)存補(bǔ)丁配置遠(yuǎn)程地址

首先射亏,新建一個(gè)碼云倉庫的公開開源項(xiàng)目近忙,記得不要建私有項(xiàng)目,這樣會(huì)導(dǎo)致訪問不了文件的問題出現(xiàn)智润。
然后及舍,將mg后綴的補(bǔ)丁文件上傳上去即可。
最后窟绷,我們需要知道補(bǔ)丁文件的遠(yuǎn)程地址锯玛。怎么從碼云那里獲取到遠(yuǎn)程地址呢?可以從以下截圖獲得


info.png

MangoFix使用方法

MangoFix的具體使用請(qǐng)參照GitHub上的說明兼蜈,請(qǐng)點(diǎn)擊查看(Mango/README-CN.md at master · YPLiang19/Mango (github.com)
)攘残。
其實(shí)最重要的是將MangoFix打包下載下來,打開MangoFixDemo文件夾里面的Demo为狸。想使用遠(yuǎn)程地址替換本地的更新需要將下面代碼進(jìn)行設(shè)置:

#pragma mark - 熱修復(fù)
- (BOOL)encryptPlainScirptToDocument{
    NSError *outErr = nil;
    BOOL writeResult = NO;

    //本地
//    NSURL *scriptUrl = [[NSBundle mainBundle] URLForResource:@"xxxPatch" withExtension:@"mg"];
    
    //遠(yuǎn)程
   NSDictionary *info= [[NSBundle mainBundle] infoDictionary];
   NSString *BundleVersion = info[@"CFBundleShortVersionString"];
   NSString *pathStr = [NSString stringWithFormat:@"https://gitee.com/xxx/xx-patch/raw/master/xxxPatch%@.mg",BundleVersion];
#ifdef DEBUG
    pathStr = @"https://gitee.com/xxx/xx-patch/raw/master/xxxPatchTest.mg";
#else

#endif

    NSURL *scriptUrl = [NSURL URLWithString:pathStr];
    NSString *plainScriptString = [NSString stringWithContentsOfURL:scriptUrl encoding:NSUTF8StringEncoding error:&outErr];
    if (outErr) goto err;

    {
        NSURL *publicKeyUrl = [[NSBundle mainBundle] URLForResource:@"public_key.txt" withExtension:nil];
        NSString *publicKey = [NSString stringWithContentsOfURL:publicKeyUrl encoding:NSUTF8StringEncoding error:&outErr];
        if (outErr) goto err;
        NSString *encryptedScriptString = [MFRSA encryptString:plainScriptString publicKey:publicKey];

        NSString * encryptedPath= [(NSString *)[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject] stringByAppendingPathComponent:@"encrypted_xxxPatch.mg"];
        NSFileManager *fileManager = [NSFileManager defaultManager];
        if (![fileManager fileExistsAtPath:encryptedPath]) {
            [fileManager createFileAtPath:encryptedPath contents:nil attributes:nil];
        }
        writeResult = [encryptedScriptString writeToFile:encryptedPath atomically:YES encoding:NSUTF8StringEncoding error:&outErr];
    }
err:
    if (outErr) NSLog(@"%@",outErr);
    return writeResult;
}

總結(jié)

OK歼郭,以上幾步完成基本就可以實(shí)現(xiàn)熱更新了,具體的測試案例可以參照MangoFixDemo里面的案例辐棒。

參考資料如下:

[MangoFix中文資料](Mango/README-CN.md at master · YPLiang19/Mango (github.com)

[iOS熱更新方案](iOS 現(xiàn)在的 “熱修復(fù)/熱更新” - 簡書 (jianshu.com)
)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末病曾,一起剝皮案震驚了整個(gè)濱河市牍蜂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌泰涂,老刑警劉巖鲫竞,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異负敏,居然都是意外死亡贡茅,警方通過查閱死者的電腦和手機(jī)秘蛇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門其做,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人赁还,你說我怎么就攤上這事妖泄。” “怎么了艘策?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵蹈胡,是天一觀的道長。 經(jīng)常有香客問我朋蔫,道長罚渐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任驯妄,我火速辦了婚禮荷并,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘青扔。我一直安慰自己源织,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布微猖。 她就那樣靜靜地躺著谈息,像睡著了一般。 火紅的嫁衣襯著肌膚如雪凛剥。 梳的紋絲不亂的頭發(fā)上侠仇,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音犁珠,去河邊找鬼逻炊。 笑死,一個(gè)胖子當(dāng)著我的面吹牛盲憎,可吹牛的內(nèi)容都是我干的嗅骄。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼饼疙,長吁一口氣:“原來是場噩夢啊……” “哼溺森!你這毒婦竟也來了慕爬?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤屏积,失蹤者是張志新(化名)和其女友劉穎医窿,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體炊林,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡姥卢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了渣聚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片独榴。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖奕枝,靈堂內(nèi)的尸體忽然破棺而出棺榔,到底是詐尸還是另有隱情,我是刑警寧澤隘道,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布症歇,位于F島的核電站,受9級(jí)特大地震影響谭梗,放射性物質(zhì)發(fā)生泄漏忘晤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一激捏、第九天 我趴在偏房一處隱蔽的房頂上張望设塔。 院中可真熱鬧,春花似錦缩幸、人聲如沸壹置。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钞护。三九已至,卻和暖如春爆办,著一層夾襖步出監(jiān)牢的瞬間难咕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國打工距辆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留余佃,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓跨算,卻偏偏與公主長得像爆土,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子诸蚕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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

  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月步势,有人笑有人哭氧猬,有人歡樂有人憂愁,有人驚喜有人失落坏瘩,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,523評(píng)論 28 53
  • 信任包括信任自己和信任他人 很多時(shí)候盅抚,很多事情,失敗倔矾、遺憾妄均、錯(cuò)過,源于不自信哪自,不信任他人 覺得自己做不成丰包,別人做不...
    吳氵晃閱讀 6,181評(píng)論 4 8
  • 步驟:發(fā)微博01-導(dǎo)航欄內(nèi)容 -> 發(fā)微博02-自定義TextView -> 發(fā)微博03-完善TextView和...
    dibadalu閱讀 3,127評(píng)論 1 3
  • 回這一趟老家,心里多了兩個(gè)疙瘩提陶。第一是堂姐現(xiàn)在談了一個(gè)有婦之夫烫沙,在她的語言中感覺,她不打算跟他有太長遠(yuǎn)的計(jì)劃隙笆,這讓...
    安九閱讀 3,501評(píng)論 2 4