App的熱更新JSPatch的使用

情景假設

眾所周知蘋果的審核機制非常的嚴格碌上,雖然現(xiàn)在審核時間縮短了掀鹅,但是從提交到App Stroe揽碘、審核通過次屠、上線也要數(shù)日。若線上的App出現(xiàn)很嚴重的Bug雳刺,或者臨時改動些小東西(顏色劫灶,字體啊什么的)必須要解決要改的時候。如果下線重新審核掖桦,無形中又會浪費很多的時間本昏。如果App的用戶群很龐大的話,下線重新審核會給公司帶來很大的損失滞详,那可不可以在App不下線的情況下修復些Bug呢凛俱?這個時候我們就需要熱更新
本文demo地址

JSPatch的配置

1.創(chuàng)建App工程(沒什么好說的料饥,注意在plist中開啟網(wǎng)絡)
2.下載JSPatch的SDK蒲犬,解壓后拖拽到工程里面。
注意Copy items if needed 要勾選

8F18ED01-76C7-41AF-8C58-41ED6B4D23F9.png

3.添加依賴框架 libz.tdb 和 JavaScriptCore.framework 岸啡,紅色框里的依賴框架需要手動導入原叮,正常情況下藍色框系統(tǒng)默認添加(若沒有則手動導入)

D0BAB919-E160-45D5-A23D-C41F5009EC46.png

JSPatch的簡單例子

1.初始化控制器中的控件

創(chuàng)建一個UILabel控件,設置文字巡蘸,邊框等奋隶。稍后會通過JSPatch改變lable中的文字,控制器中代碼如下:

//
//  ViewController.m
//  JspathDemo
//
//  Created by guo on 16/8/29.
//  Copyright ? 2016年 guo. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()
@property (nonatomic,strong)UILabel *label;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    
    UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0, 100, [UIScreen mainScreen].bounds.size.width, 100)];
    self.label = label;
    label.layer.borderWidth = 1;
    label.layer.borderColor = [UIColor orangeColor].CGColor;
    label.textAlignment = NSTextAlignmentCenter;
    [self.view addSubview:label];
    [self test];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

-(void)test{
    
    self.label.text = @"我是lable";

}

@end

2.在AppDelegate中啟動JSPatch

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
   
    //傳入在平臺申請的 appKey悦荒。會自動執(zhí)行已下載到本地的 patch 腳本唯欣。
    [JSPatch startWithAppKey:@"fe981ccab3964ba6"];
    
    
    
/*
 事件回調(diào)
       type: 事件類型,詳見 JPCallbackType 定義
       data: 回調(diào)數(shù)據(jù)
       error: 事件錯誤
       在 `+startWithAppKey:` 之前調(diào)用
 */
    [JSPatch setupCallback:^(JPCallbackType type, NSDictionary *data, NSError *error) {
        
        switch (type) {
            case JPCallbackTypeUnknow:
                NSLog(@"*****");
                break;
            case JPCallbackTypeRunScript:
                NSLog(@"執(zhí)行腳本");
                break;
            case JPCallbackTypeUpdate:
                NSLog(@"已拉取新腳本");
                break;
            case JPCallbackTypeCondition:
                NSLog(@"條件下發(fā)");
                break;
            case JPCallbackTypeGray:
                NSLog(@"灰度下發(fā)");
                break;            
            default:
                break;
        }

        

 /*
 進入開發(fā)模式
     平臺下發(fā)補丁時選擇開發(fā)預覽模式搬味,會只對調(diào)用了這個方法的客戶端生效境氢。
     在 `+sync:` 之前調(diào)用,建議在 #ifdef DEBUG 里調(diào)碰纬。
 */
    [JSPatch setupDevelopment];
    
    
    
 /*
 與 JSPatch 平臺后臺同步萍聊,
     發(fā)請求詢問后臺是否有 patch 更新,如果有更新會自動下載并執(zhí)行
     可調(diào)用多次(App啟動時調(diào)用或App喚醒時調(diào))
 */
    [JSPatch sync];
    
    
    return YES;
}

JSPatch服務器腳本

注冊JSPacth

注冊后點擊我的App-》新建App

App名填寫雖然沒有限制但是盡量與應用名一致把這樣規(guī)范些
如不是App沒有上線的話 AppStore AppID可以不用填寫

84B30B93-8533-4A17-9593-603333FD0A7F.png

新建App后得到appKey 在此方法中使用
[JSPatch startWithAppKey:@""];
填寫版本號與App的版本號一致(新建應用默認版本號為1.0)

2AD1812A-D44E-4691-B077-6CC66FFA5E9B.png

點擊版本(App Version)選擇補丁文件悦析。(JSPacth支持多個補丁更新寿桨。不需點擊加號,加號意為添加多個補丁强戴,我們這里只加一個補锻っ)

111.png

這個時候我們還沒有補丁挡鞍,需要自己創(chuàng)建個main.js補丁

defineClass('ViewController',{
    test : function() {
        self.label().setText("label改變了9887");
    },
})

選擇好補丁后,勾選開發(fā)預覽媒佣,并提交匕累,發(fā)布新補丁。(勾選默伍,以及發(fā)布方式?jīng)]有限制欢嘿,看具體需求吧。)

ok也糊,這個時候可以看看例子中UILabel的文字是不是已經(jīng)被JSPatch改變了炼蹦。

補充

關(guān)于iOS的熱更新有

  1. 阿里百川HotFix(8月27開始公測)

    阿里百川HotFix能夠幫助開發(fā)者將修復Bug的補丁,實時發(fā)布到APP內(nèi)狸剃,當用戶啟動APP時掐隐,補丁將自動加載安裝,用戶全程無感知钞馁,而Bug已經(jīng)修復虑省。相比發(fā)版到應用市場,等待通過審核僧凰,再等到用戶下載更新的冗長路徑探颈,有的用戶甚至對頻繁發(fā)版的APP會有抵觸而不更新,HotFix训措,將幫助您在第一時間伪节,修復多平臺的問題

  1. JSPatch
    JSPatch 是一個開源項目(Github鏈接),只需要在項目里引入極小的引擎文件绩鸣,就可以使用 JavaScript 調(diào)用任何 Objective-C 的原生接口怀大,替換任意 Objective-C 原生方法。目前主要用于下發(fā) JS 腳本替換原生 Objective-C 代碼呀闻,實時修復線上 bug化借。

參考文章

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市捡多,隨后出現(xiàn)的幾起案子蓖康,更是在濱河造成了極大的恐慌,老刑警劉巖局服,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钓瞭,死亡現(xiàn)場離奇詭異驳遵,居然都是意外死亡淫奔,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門堤结,熙熙樓的掌柜王于貴愁眉苦臉地迎上來唆迁,“玉大人鸭丛,你說我怎么就攤上這事√圃穑” “怎么了鳞溉?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長鼠哥。 經(jīng)常有香客問我熟菲,道長,這世上最難降的妖魔是什么朴恳? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任抄罕,我火速辦了婚禮,結(jié)果婚禮上于颖,老公的妹妹穿的比我還像新娘呆贿。我一直安慰自己,他們只是感情好森渐,可當我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布做入。 她就那樣靜靜地躺著,像睡著了一般同衣。 火紅的嫁衣襯著肌膚如雪竟块。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天乳怎,我揣著相機與錄音彩郊,去河邊找鬼。 笑死蚪缀,一個胖子當著我的面吹牛秫逝,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播询枚,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼违帆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了金蜀?” 一聲冷哼從身側(cè)響起刷后,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎渊抄,沒想到半個月后尝胆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡护桦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年众弓,在試婚紗的時候發(fā)現(xiàn)自己被綠了宏邮。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片巧婶。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖缓呛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情杭隙,我是刑警寧澤哟绊,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站痰憎,受9級特大地震影響票髓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜铣耘,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一炬称、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧涡拘,春花似錦玲躯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至橱野,卻和暖如春朽缴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背水援。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工密强, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蜗元。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓或渤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親奕扣。 傳聞我的和親對象是個殘疾皇子薪鹦,可洞房花燭夜當晚...
    茶點故事閱讀 43,724評論 2 351

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

  • 一、目的: 隨著APP迭代更新惯豆,項目越寫越龐大池磁,每個功能間的關(guān)聯(lián)性越來越多。再加上測試人員人手不足等情況楷兽,不可避免...
    LQWAWAIOS閱讀 440評論 0 2
  • JSPatch作為熱更新技術(shù)的黑科技地熄,已經(jīng)不是什么前沿的新聞了,像騰訊芯杀、美團等大公司也在使用JSPatch端考。前段時...
    任爾東西南北瘋閱讀 1,490評論 0 3
  • 一银舱、目的: 隨著APP迭代更新,項目越寫越龐大跛梗,每個功能間的關(guān)聯(lián)性越來越多。再加上測試人員人手不足等情況棋弥,不可避免...
    lilei5閱讀 1,674評論 7 22
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,867評論 25 707
  • Poj 1664 題意 中文題核偿。。顽染。略了 思路 沒做出來漾岳,上網(wǎng)查了之后發(fā)現(xiàn)用遞歸的思想。分為兩種情況1.至少一個盤...
    vanadia閱讀 551評論 0 0