JSPatch熱修復(fù)iOSApp

IOS產(chǎn)品開發(fā)中常常會(huì)遇到這種情況谎砾,線上發(fā)現(xiàn)一個(gè)嚴(yán)重bug,可能是一個(gè)crash,可能是一個(gè)功能無法使用逢倍,這時(shí)能做的只是趕緊修復(fù)Bug然后提交等待漫長的審核,即使申請(qǐng)加急也不會(huì)快到那里去景图,即使審核完了之后较雕,還要盼望著用戶快點(diǎn)升級(jí),用戶不升級(jí)還是在存在同樣的漏洞挚币,這樣的情況讓開發(fā)者付出了很大的成本才能完成Bug的修復(fù)亮蒋。
JSPath就是為了解決這樣的問題而出現(xiàn)的,只需要在項(xiàng)目中引入極小的JSPatch引擎妆毕,就可以還用JavaScript語言調(diào)用Objective-C的原生API慎玖,動(dòng)態(tài)更新APP,修復(fù)BUG笛粘。
JSPaht本身是開源項(xiàng)目,項(xiàng)目地址:http://jspatch.com/,github地址:https://github.com/bang590/JSPatch
在他的官網(wǎng)上面給出了一個(gè)例子:

@implementationJPTableViewController
...
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
4
NSString *content = self.dataSource[[indexPath row]];//可能會(huì)超出數(shù)組范圍導(dǎo)致crash
JPViewController *ctrl =[[JPViewController alloc] initWithContent:content];
[self.navigationController pushViewController:ctrl];
}
...
@end

可以通過下發(fā)下面的JavaScript代碼修復(fù)這個(gè)bug:

//JS
defineClass("JPTableViewController", {
//instance method definitions
tableView_didSelectRowAtIndexPath: function(tableView, indexPath) {
var row =indexPath.row()
if(self.dataSource().length > row) {//加上判斷越界的邏輯
var content =self.dataArr()[row];
var ctrl =JPViewController.alloc().initWithContent(content);
self.navigationController().pushViewController(ctrl);
}
}
}, {})

JSPtch需要一個(gè)后臺(tái)服務(wù)用來下發(fā)和管理腳本趁怔,并需要處理傳輸安全等。
注冊(cè)獲取AppKey
在平臺(tái)上面注冊(cè)一個(gè)賬戶薪前,新建一個(gè)App可以拿到對(duì)應(yīng)的AppKey润努。
導(dǎo)入SDK到項(xiàng)目中
SDK地址:http://jspatch.com/Index/sdk
當(dāng)前下載下來的SDK版本名稱是:JSPatch 2.framework,需要去掉中間的空格,不然導(dǎo)入項(xiàng)目的時(shí)候會(huì)報(bào)錯(cuò)示括。
導(dǎo)入項(xiàng)目的時(shí)候要選擇Copy items if needed铺浇。
還需要添加對(duì)于的依賴框架JavaScriptCore.framework和libz.tbd.
添加JSPatch代碼
在AppDelegate.m中添加代碼:

#import"AppDelegate.h"
#import
@implementationAppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[JSPatch startWithAppKey:@"f78378d77e5783e8"];
[JSPatch sync];
returnYES;
}
@end

在平臺(tái)中上傳js修復(fù)文件
為了簡單我們只上傳一個(gè)簡單的UIAlertView,彈出一個(gè)提示框:

ar alertView = require('UIAlertView').alloc().init();
alertView.setTitle('Alert');
alertView.setMessage('AlertView from js');
![Uploading 2855997-8dd6771dfca9a2fe_173960.png . . .]

alertView.addButtonWithTitle('OK');
alertView.show();

用JavaScript實(shí)例化了UIAlertView,文件名需要命名為main.js垛膝。
從服務(wù)器下發(fā)到客戶端
把main.js上傳到服務(wù)器上鳍侣,下發(fā)到版本為1.0的客戶端上面。
在請(qǐng)求服務(wù)加載腳本的時(shí)候出現(xiàn)了一個(gè)錯(cuò)誤:The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.
這個(gè)錯(cuò)誤出現(xiàn)的原因是ios9引入了新特性App Transport Security(ATS),簡單來說就是APP內(nèi)部的請(qǐng)求必須使用HTTPS協(xié)議吼拥。
很明顯這里的url并沒有使用https倚聚,我們可以通過設(shè)置先規(guī)避掉這個(gè)問題:
1.在info.plist中添加NSAppTransportSecurity類型為Dictionary.2.在NSAppTransportSecurity中添加NSAllowsArbitraryLoads類型為Boolean,值為YES
運(yùn)行效果:

2855997-8dd6771dfca9a2fe.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末扔罪,一起剝皮案震驚了整個(gè)濱河市秉沼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖唬复,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件矗积,死亡現(xiàn)場離奇詭異,居然都是意外死亡敞咧,警方通過查閱死者的電腦和手機(jī)棘捣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來休建,“玉大人乍恐,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵丈牢,是天一觀的道長玉锌。 經(jīng)常有香客問我吊输,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮仑荐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘纵东。我一直安慰自己粘招,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布偎球。 她就那樣靜靜地躺著洒扎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪甜橱。 梳的紋絲不亂的頭發(fā)上逊笆,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天栈戳,我揣著相機(jī)與錄音岂傲,去河邊找鬼。 笑死子檀,一個(gè)胖子當(dāng)著我的面吹牛镊掖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播褂痰,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼亩进,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了缩歪?” 一聲冷哼從身側(cè)響起归薛,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后主籍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體习贫,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年千元,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了苫昌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡幸海,死狀恐怖祟身,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情物独,我是刑警寧澤袜硫,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站挡篓,受9級(jí)特大地震影響父款,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜瞻凤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一憨攒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧阀参,春花似錦肝集、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至衙荐,卻和暖如春捞挥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背忧吟。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來泰國打工砌函, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人溜族。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓讹俊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親煌抒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子仍劈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

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

  • 一、目的: 隨著APP迭代更新寡壮,項(xiàng)目越寫越龐大贩疙,每個(gè)功能間的關(guān)聯(lián)性越來越多讹弯。再加上測試人員人手不足等情況,不可避免...
    LQWAWAIOS閱讀 439評(píng)論 0 2
  • IOS產(chǎn)品開發(fā)中常常會(huì)遇到這種情況这溅,線上發(fā)現(xiàn)一個(gè)嚴(yán)重bug,可能是一個(gè)crash,可能是一個(gè)功能無法使用闸婴,這時(shí)能做...
    深藍(lán)_S閱讀 295評(píng)論 0 1
  • IOS App常常會(huì)遇到這種情況,線上發(fā)現(xiàn)一個(gè)嚴(yán)重bug,可能是某一個(gè)地方Crash,也可能是一個(gè)功能無法使用芍躏,這...
    姜家志閱讀 1,298評(píng)論 3 35
  • JSPatch 是騰訊微信團(tuán)隊(duì)牛人bang開源的一種通過JavaScript調(diào)用iOS原生代碼來實(shí)現(xiàn)熱修復(fù)或者動(dòng)態(tài)...
    杭研融合通信iOS閱讀 843評(píng)論 2 23
  • 首次使用熱修復(fù)邪乍,成功修改了App中的一個(gè)小bug,感覺還是很神奇的对竣。心情也是超好庇楞,記錄一下作為一個(gè)iOS初級(jí)開發(fā)者...
    cocoaAhda閱讀 667評(píng)論 0 0