JSPatch的使用

JSPatch 是一個 iOS 動態(tài)更新框架妇汗,只需在項目中引入極小的引擎帘不,就可以使用 JavaScript 調(diào)用任何 Objective-C 原生接口,獲得腳本語言的優(yōu)勢:為項目動態(tài)添加模塊杨箭,或替換項目原生代碼動態(tài)修復(fù) bug寞焙。


因?yàn)檫€要部署線上的js文件,所以直接用JSPatch SDK,該平臺可以幫助管理補(bǔ)丁文件,加密等
點(diǎn)擊去JSPatch平臺注冊
根據(jù)文檔的提示把SDK集成進(jìn)自己的項目,文檔講的很詳細(xì),此處略


具體代碼

  1. 導(dǎo)入 #import <JSPatch/JSPatch.h>

  2. 在上線之前需要對腳本進(jìn)行本地測試,看看運(yùn)行是否正常互婿。SDK 提供了方法 +testScriptInBundle 用于發(fā)布前的測試:
    注意在 JSPatch 平臺的規(guī)范里捣郊,JS腳本的文件名必須是main.js

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [JSPatch testScriptInBundle];//為了線下測試js文件的可用性,線上代碼是不同的,下面有寫
 }    

調(diào)用這個方法后,JSPatch 會在當(dāng)前項目的 bundle 里尋找 main.js 文件執(zhí)行慈参,效果與最終線上用戶下載腳本執(zhí)行一樣呛牲,測試完后就可以準(zhǔn)備上線這個腳本。

示例圖1

下面是重點(diǎn) -- js文件中寫什么

舉個例子吧,下面是我的某一個控制中的代碼
#import "JPViewController.h"

@interface JPViewController ()
{
 
}
@end

@implementation JPViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
    [self loadButton];
    // Do any additional setup after loading the view.
}

- (void)loadButton {
     UIButton *tipBtn = [[UIButton alloc] initWithFrame:CGRectMake(10, 50, 200, 30)];
    [tipBtn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
    [tipBtn setTitle:@"hello_jspatch" forState:UIControlStateNormal];
    [tipBtn addTarget:self action:@selector(clickedBtn:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:tipBtn];
    
}

- (void)clickedBtn:(UIButton *)sender {
    sender.backgroundColor = [UIColor redColor];
}


@end

頁面上有一個按鈕,文字為"hello_jspatch",點(diǎn)擊事件是讓自己的背景顏色變?yōu)榧t色
假設(shè)這是我線上的版本,但這是有錯誤的,我的文字不應(yīng)該是"hello_jspatch",應(yīng)該是"success_jspatch",點(diǎn)擊事件不該是變紅而是變綠色
(這時我們就可以通過JSPatch熱更新,具體原理不解釋.)
利用運(yùn)行時特性處理這個控制器中的loadButtonclickedBtn:這兩個方法
js文件中的語法不會?不要緊,JSPatch的作者還有一個開源項目,直接把我們需要的oc代碼轉(zhuǎn)為需要的js

這里是鏈接--JSPatchConvertor

示例圖2

把我們需要更改的兩處代碼, 改為"succcess_jspatch"和greenColor()


注意

現(xiàn)在的代碼也不一定是一定能用的,因?yàn)镴SPatch作者對語法做了一些規(guī)定,有好多地方這個轉(zhuǎn)換器并不能幫助完美的轉(zhuǎn)換
這就要去github中看具體的規(guī)定
點(diǎn)此跳轉(zhuǎn)到github--JSPatch-Wiki

下面附上修改完的代碼

require('UIButton,UIColor');
defineClass('JPViewController', {
    loadButton: function() {
        var tipBtn = UIButton.alloc().initWithFrame({x:10, y:50, width:200, height:30});
        tipBtn.setTitleColor_forState(UIColor.redColor(), 0);
        tipBtn.setTitle_forState("success_jspatch", 0);
        tipBtn.addTarget_action_forControlEvents(self, "clickedBtn:", 1<<6);
        self.view().addSubview(tipBtn);

    },
    clickedBtn: function(sender) {
        sender.setBackgroundColor(UIColor.greenColor());
    }
});

** 我修改了1. initWithFrame后面的CGRectMake()的樣式 2. UIControlStateNormal UIControlEventTouchUpInside 這類枚舉改為對應(yīng)枚舉值 這在Wiki中都是有提到的,一定要仔細(xì)看**

現(xiàn)在就可以運(yùn)行了~~~~(但是不要忘了,咱們這是在線下測試呢)

線上的版本appdelegate中是這樣的才對

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {      
    [JSPatch startWithAppKey:@"你自己的appkey"];//JSPatch SDK 平臺上添加應(yīng)用得到的key
    [JSPatch sync];
    //自動去平臺下載補(bǔ)丁包
}

最后,把那個js文件傳到平臺就ok了,注意版本號

示例圖3

注:還有一些安全問題,大家可以根據(jù)SDK文檔研究一下

文中有不對的地方希望可以提出,一起進(jìn)步

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末驮配,一起剝皮案震驚了整個濱河市娘扩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌壮锻,老刑警劉巖琐旁,帶你破解...
    沈念sama閱讀 221,331評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異躯保,居然都是意外死亡旋膳,警方通過查閱死者的電腦和手機(jī)澎语,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,372評論 3 398
  • 文/潘曉璐 我一進(jìn)店門途事,熙熙樓的掌柜王于貴愁眉苦臉地迎上來验懊,“玉大人,你說我怎么就攤上這事尸变∫逋迹” “怎么了?”我有些...
    開封第一講書人閱讀 167,755評論 0 360
  • 文/不壞的土叔 我叫張陵召烂,是天一觀的道長碱工。 經(jīng)常有香客問我,道長奏夫,這世上最難降的妖魔是什么怕篷? 我笑而不...
    開封第一講書人閱讀 59,528評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮酗昼,結(jié)果婚禮上廊谓,老公的妹妹穿的比我還像新娘。我一直安慰自己麻削,他們只是感情好蒸痹,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,526評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著呛哟,像睡著了一般叠荠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上扫责,一...
    開封第一講書人閱讀 52,166評論 1 308
  • 那天榛鼎,我揣著相機(jī)與錄音,去河邊找鬼公给。 笑死借帘,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的淌铐。 我是一名探鬼主播肺然,決...
    沈念sama閱讀 40,768評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼腿准!你這毒婦竟也來了际起?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,664評論 0 276
  • 序言:老撾萬榮一對情侶失蹤吐葱,失蹤者是張志新(化名)和其女友劉穎街望,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體弟跑,經(jīng)...
    沈念sama閱讀 46,205評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡灾前,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,290評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了孟辑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哎甲。...
    茶點(diǎn)故事閱讀 40,435評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡蔫敲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出炭玫,到底是詐尸還是另有隱情奈嘿,我是刑警寧澤,帶...
    沈念sama閱讀 36,126評論 5 349
  • 正文 年R本政府宣布吞加,位于F島的核電站裙犹,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏衔憨。R本人自食惡果不足惜叶圃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,804評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望践图。 院中可真熱鬧选调,春花似錦火诸、人聲如沸罩润。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,276評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽闽瓢。三九已至接癌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間扣讼,已是汗流浹背缺猛。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留椭符,地道東北人荔燎。 一個月前我還...
    沈念sama閱讀 48,818評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像销钝,于是被迫代替她去往敵國和親有咨。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,442評論 2 359

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

  • 1, JSPatch熱更新 眾所周知,AppStore 上發(fā)布需要有個一非常惡心的審核期,而且很可能被拒絕掉,發(fā)布...
    嘹亮的浩哥閱讀 1,080評論 2 3
  • 淺析JSPatch的使用 一. 背景介紹 背景:iOS作為蘋果獨(dú)家開發(fā)和運(yùn)營的生態(tài)圈蒸健,具有非常封閉的運(yùn)作環(huán)境座享,其A...
    BigKrist閱讀 977評論 2 9
  • 一、目的: 隨著APP迭代更新似忧,項目越寫越龐大渣叛,每個功能間的關(guān)聯(lián)性越來越多。再加上測試人員人手不足等情況盯捌,不可避免...
    LQWAWAIOS閱讀 450評論 0 2
  • 一淳衙、目的: 隨著APP迭代更新,項目越寫越龐大,每個功能間的關(guān)聯(lián)性越來越多箫攀。再加上測試人員人手不足等情況筷狼,不可避免...
    lilei5閱讀 1,681評論 7 22
  • 上一篇文章已經(jīng)說了如何在工程中接入熱修復(fù),這篇文章中就不再說明匠童。有需要的傳送門在這里熱修復(fù)——工程接入jsPatc...
    斷風(fēng)刀閱讀 4,396評論 22 33