[iOS] App熱修復(fù)平臺(tái)JSPatch應(yīng)用簡(jiǎn)介(附demo)

關(guān)于熱修復(fù)和JSPatch

熱修復(fù)(hot patch)是指不升級(jí)app的情況下蝎困,通過(guò)加載網(wǎng)絡(luò)腳本來(lái)為已上線的App替換或新增功能庵朝。

JSPatch是一個(gè)基于Javascript腳本實(shí)現(xiàn)熱修復(fù)的開源項(xiàng)目鳞尔,JSPatch平臺(tái)打包了一整套腳本上傳垃它、版本管理雅任、腳本請(qǐng)求更新等一系列熱修復(fù)策略笙蒙,提供JSPatch.framework供簡(jiǎn)單使用罕扎。
檢查腳本請(qǐng)求次數(shù)低于50萬(wàn)次每月時(shí)不收取費(fèi)用聚唐。

JSPatch官方網(wǎng)站
開源項(xiàng)目Github-Wiki
實(shí)現(xiàn)原理詳解

基本原理和流程

通過(guò)iOS的JavascriptCore.framework將請(qǐng)求下載的腳本執(zhí)行,以運(yùn)行時(shí)的方式替換舊代碼實(shí)現(xiàn)或者新增功能腔召。
作用的主要流程如下:

  1. 集成JSPatch.framework
  2. 檢查當(dāng)前App版本是否有腳本更新
  3. 下載更新的腳本保存到本地
  4. 執(zhí)行腳本進(jìn)行熱修復(fù)

JSPatch的集成

  1. 下載最新的SDK杆查,JSPatch.framework,目前最新版本為v1.5

  2. 將SDK導(dǎo)入工程后臀蛛,需要依賴libz亲桦、JavaScriptCore兩個(gè)庫(kù)

  3. 調(diào)試模式可以分為兩種,本地導(dǎo)入腳本調(diào)試和線上修復(fù)(兩者不能同時(shí)執(zhí)行)

    • 本地調(diào)試:手動(dòng)導(dǎo)入main.js腳本浊仆,
        在application:didFinishLaunchWithOptions:方法中執(zhí)行:
        [JSPatch testScriptInBundle];
        則加載本地腳本執(zhí)行調(diào)試性的熱修復(fù)
- 線上修復(fù):將對(duì)應(yīng)版本的腳本(命名為main.js)上傳到JSPatch平臺(tái)客峭,
        在application:didFinishLaunchWithOptions:方法中執(zhí)行:
[JSPatch startWithAppKey:kJSPatchAppKey];
[JSPatch sync];
則會(huì)在啟動(dòng)時(shí)檢查當(dāng)前版本app是否有補(bǔ)丁更新。
  1. 手動(dòng)調(diào)用檢查補(bǔ)丁更新:
    如果對(duì)補(bǔ)丁更新檢查有實(shí)時(shí)性高的要求抡柿,可以手動(dòng)在必要時(shí)調(diào)用[JSPatch sync];方法進(jìn)行補(bǔ)丁更新檢查舔琅,調(diào)用次數(shù)計(jì)入JSPatch的平臺(tái)訪問(wèn)次數(shù),比如在aplicationWillBecomeActive:中進(jìn)行檢查洲劣。

開發(fā)預(yù)覽模式

線上修復(fù)支持開發(fā)預(yù)覽模式备蚓,在app中啟動(dòng)開發(fā)者預(yù)覽模式時(shí)课蔬,只會(huì)檢查和應(yīng)用線上的預(yù)覽模式下的補(bǔ)丁,而不用正式的補(bǔ)丁郊尝,當(dāng)測(cè)試預(yù)覽模式補(bǔ)丁通過(guò)后购笆,可以選擇進(jìn)行全量的正式發(fā)布。

開發(fā)預(yù)覽模式下不會(huì)加載非開發(fā)預(yù)覽模式下補(bǔ)丁虚循,非開發(fā)預(yù)覽模式只會(huì)加載正式補(bǔ)丁同欠。

灰度和條件發(fā)布:

根據(jù)實(shí)際的需要可以進(jìn)行特別的補(bǔ)丁發(fā)布范圍

灰度:隨機(jī)選擇一定比例的用戶進(jìn)行發(fā)布,可不斷提高灰度直至全量發(fā)布

條件發(fā)布:針對(duì)滿足條件的用戶(如設(shè)備類型横缔,系統(tǒng)版本铺遂,或者自定義的用戶參數(shù))進(jìn)行補(bǔ)丁更新,條件發(fā)布命中后不可取消茎刚。(通過(guò)[JSPatch setupUserData:userData]決定當(dāng)前用戶參數(shù))

補(bǔ)丁的管理

在JSPatch平臺(tái)注冊(cè)的app襟锐,按不同的app版本進(jìn)行補(bǔ)丁管理扯旷,支持新增塌忽、更新和刪除補(bǔ)丁蟹瘾,
新增:創(chuàng)建app的某一個(gè)版本堰汉,上傳腳本(命名必須為main.js)

基本用法

編寫main.js文件,定義要修復(fù)的類密浑,導(dǎo)入代碼需要使用的類抵赢,以Javascript的邏輯實(shí)現(xiàn)相關(guān)功能挎挖。

defineClass("ViewController", { // 要修復(fù)的類
                badMethod: function() { // 要修復(fù)的方法
                    console.log("fixed badMethod 1 * 16 release”); // 打印
                    require(‘UIView') // 導(dǎo)入U(xiǎn)IView
                    require(‘UIColor')  // 導(dǎo)入U(xiǎn)IColor
                    self.view().setBackgroundColor(UIColor.redColor()); // 修改背景顏色
            }
        })

更多實(shí)現(xiàn)參考官方文檔

額外功能之在線參數(shù)

在線參數(shù)是獨(dú)立于JSPatch熱修復(fù)之外的在線參數(shù)功能奢入,通過(guò)在JSPatch平臺(tái)設(shè)置好多個(gè)key-value后筝闹,可以在app內(nèi)隨時(shí)提取相關(guān)在線參數(shù)。

關(guān)于JSPatch的安全

demo

demo地址

加我微信溝通武福。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末议双,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子捉片,更是在濱河造成了極大的恐慌平痰,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件界睁,死亡現(xiàn)場(chǎng)離奇詭異觉增,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)翻斟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)说铃,“玉大人访惜,你說(shuō)我怎么就攤上這事嘹履。” “怎么了债热?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵砾嫉,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我窒篱,道長(zhǎng)焕刮,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任墙杯,我火速辦了婚禮配并,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘高镐。我一直安慰自己溉旋,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布嫉髓。 她就那樣靜靜地躺著观腊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪算行。 梳的紋絲不亂的頭發(fā)上梧油,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音州邢,去河邊找鬼婶溯。 笑死,一個(gè)胖子當(dāng)著我的面吹牛偷霉,可吹牛的內(nèi)容都是我干的迄委。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼类少,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼叙身!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起硫狞,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤信轿,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后残吩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體财忽,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年泣侮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了即彪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡活尊,死狀恐怖隶校,靈堂內(nèi)的尸體忽然破棺而出漏益,到底是詐尸還是另有隱情,我是刑警寧澤深胳,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布绰疤,位于F島的核電站,受9級(jí)特大地震影響舞终,放射性物質(zhì)發(fā)生泄漏轻庆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一敛劝、第九天 我趴在偏房一處隱蔽的房頂上張望余爆。 院中可真熱鬧,春花似錦攘蔽、人聲如沸龙屉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)转捕。三九已至,卻和暖如春唆垃,著一層夾襖步出監(jiān)牢的瞬間五芝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工辕万, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留枢步,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓渐尿,卻偏偏與公主長(zhǎng)得像醉途,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子砖茸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

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