JSPatch熱修復(fù)

  1. iOS如果線下出現(xiàn)bug, 這個好解決, 但如果線上出bug, 由于APP Store提交審核有時間限制, 修改完再提交怎么也得要3-4天, 于是就有了熱修復(fù). 如今熱修復(fù)主要有幾個相對成熟的框架, 一個Bang大神的JSPatch, 一個已停止維護幾年的WaxPatch, 還有一個阿里出品的Ali-Wax. 今天就來學(xué)習(xí)下JSPatch, 學(xué)習(xí)成本較低, 只需簡單的JS語法即可, 而且對oc比較友好, 缺點就是沒有對js友好的編輯器, 當(dāng)然官方出了個xcode的插件, 叫jspatchx, 有興趣的可以試用一下.下面就來學(xué)習(xí)下

  2. JSPatch接入比較簡單, 拖一個framework,添加libz還有JavaScriptCore框架就完成了集成, 相當(dāng)輕量級, 具體教程可以看官方接入文檔

  3. 為了熟悉JSPatch的基本用法, 個人思路就是通過JS來寫OC的基本控件學(xué)習(xí)基礎(chǔ). 本人用的sublime text下載地址來編輯JS, 對JS相對友好一些, xcode就有點雞肋的感覺. 在sublime text編輯完之后, 然后cmd + s 保存再運行項目. 開始的時候建議用sublime text新建一個main.js, 然后拖到你的項目里邊, 如圖一, 調(diào)用[JSPatch testScriptInBundle] , 這樣就可以直接在項目中測試JS代碼, JS編輯測試沒問題之后, 就把下面注釋的打開, 如圖一

圖一

四. 定義類, 然后引用原來方法, 然后添加新的方法進(jìn)去

defineClass("ViewController",{
    viewDidLoad:function(){
        self.ORIGviewDidLoad();//引用原來的方法
})

五. 寫一個簡單的Label

defineClass("ViewController",{
    viewDidLoad:function(){
        self.ORIGviewDidLoad();//引用原來的方法

        var label = require('UILabel').alloc().initWithFrame({x:0,y:0,width:100,height:50});
        label.setText("Jspatch");
        label.setTextAlignment(2);//0:left 1:center 2:right
        label.setBackgroundColor(require('UIColor').redColor());
        self.view().addSubview(label);
})

六. 再寫一個簡單的Button

            var button = require('UIButton').buttonWithType(0);
            button.setFrame({x:50,y:50,width:100,height:50});
            button.setBackgroundColor(require('UIColor').redColor());
            button.setTitle_forState('clickMe',0);
            button.setTitleColor_forState(require('UIColor').blueColor(),0);
            self.view().addSubview(button);
            button.addTarget_action_forControlEvents(self,'handleBtn',1 <<  6);

七.寫一個view, 使用Masonry進(jìn)行約束. 需要注意的是, Masonry里面的方法都會帶前綴mas_, 需要轉(zhuǎn)換成mas__, 改成兩個下劃線. 這里還用到了block寫法, 具體看以下代碼:

            var view = UIView.alloc().init();
            view.setBackgroundColor(UIColor.blueColor());
            self.view().addSubview(view);
            
            var weakSelf = __weak(self);
            view.mas__makeConstraints(block("MASConstraintMaker*", function(make) {
                                            
                   make.left().equalTo()(weakSelf.view().mas__left()).with().offset()(34);
                   make.top().equalTo()(weakSelf.view().mas__top()).with().offset()(100);
                   make.height().with().offset()(100);
                   make.width().with().offset()(50);
                   console.log('block is coming');
           }));

寫在最后, JSPatch其實有一個轉(zhuǎn)換工具, 直接將OC代碼轉(zhuǎn)成JS代碼, 知道的小伙伴不要太激動, convertor還有bug, 記得盡量避開工具的bug, 暫時知道的就是寫block的話會有bug. 可以預(yù)先把oc代碼轉(zhuǎn)一遍, 然后再手動改一遍, 即便不是很熟練這套語法, 也可以快速進(jìn)行修復(fù).

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 最近接觸到熱修復(fù), 確實能解燃眉之急, 非常好用, 故分享給大家. 這里只講 JSPatch, 這個是現(xiàn)在最熱門最...
    Cean16閱讀 1,560評論 2 4
  • 背景 是否有過這樣的經(jīng)歷:新版本上線后發(fā)現(xiàn)有個嚴(yán)重的bug,可能會導(dǎo)致crash率激增,可能會使網(wǎng)絡(luò)請求無法發(fā)出,...
    wu大維閱讀 1,782評論 12 24
  • 前言 一說到熱修復(fù),可能很多人會覺得應(yīng)該很復(fù)雜,很難用(我以前是這么覺得的。。。),然后最近入職的公司的項目,剛上...
    翻炒吧蛋滾飯閱讀 2,757評論 24 42
  • JSPatch 是騰訊微信團隊牛人bang開源的一種通過JavaScript調(diào)用iOS原生代碼來實現(xiàn)熱修復(fù)或者動態(tài)...
    杭研融合通信iOS閱讀 951評論 2 23
  • 首先,簡單說一下,為什么要用JSPatch,做iOS開發(fā)的人都知道,一旦程序出現(xiàn)了緊急BUG,各種申請?zhí)O果的...
    JessWang閱讀 405評論 0 2

友情鏈接更多精彩內(nèi)容