iOS線上修復(fù)bug

以前對于iOS來說,線上出現(xiàn)bug,都很苦惱,因為iOS上線審核周期太長,至少需要一周時間,還是在審核成功的情況下。很多公司都沒有專業(yè)的測試員,都是程序員做測試,給程序員很大壓力。如果出現(xiàn)bug,不能及時修復(fù),所以很苦惱。我無意在查資料時,看到一篇文章,利用JSPatchPlatform框架可以線上修復(fù)bug,當(dāng)時好激動啊。我們的福利啊。下面是JSPatchPlatform框架的介紹

作用

是iOSApp獲取腳本語言能力:動態(tài)更新App,替換項目原生代碼修復(fù)bug。? 當(dāng)時聽到JSPatch有這個動態(tài)修復(fù)bug的功能,感覺有點不可思議,同時覺得這個JSPatch簡直太厲害了。用了它就可以及時修改App出現(xiàn)的bug,節(jié)約了上線先版本修復(fù)bug的時間。

根本原理

利用OC的動態(tài)語言特性去動態(tài)修改類的方法實現(xiàn),利用了OC的消息轉(zhuǎn)發(fā)機制.

使用

1.?JSPatch Platform就是一個第三方的JSPatch平臺,幫助客戶端開發(fā)者下發(fā)和管理腳本,處理傳輸安全等部署工作。 有了JSPatch平臺就不用我們自己的后臺去操作了,當(dāng)然如果我們自己的后臺愿意做能做也可以交給我們自己的后臺去做。

2.首先需要登錄官網(wǎng)注冊(http://jspatch.com),成為它的一個用戶* 添加自己要使用JSPatch的App,

3.添加App完成后會相應(yīng)地有一個AppKey作為App的唯一標(biāo)識* App添加完成后我們還需要為App添加App版本,這樣這個平臺才能知道我們的哪個版

4.需要修復(fù)的代碼的時候需要寫一個js腳本本的App需要使用JSPatch進行代碼動態(tài)修復(fù)

5.在 AppDelegate.m 里載入文件,并調(diào)用 +startWithAppKey: 方法,參數(shù)為第一步獲得的 AppKey。接著調(diào)用 +sync 方法檢查更新

#import@implementation AppDelegate

1- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

[JSPatch startWithAppKey:@"你的AppKey"];

[JSPatch sync];

}

@end

假設(shè)已接入 JSPatch SDK 的某線上 APP 發(fā)現(xiàn)一處代碼有 bug 導(dǎo)致 crash

@implementation XRTableViewController

. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

{

NSString *content = self.dataSource[[indexPath row]]; //可能會超出數(shù)組范圍導(dǎo)致crash

XRViewController *controller = [[JPViewController alloc] initWithContent:content];

[self.navigationController pushViewController:controller];

}

@end

對此我們寫了如下 JS 腳本準(zhǔn)備替換上述方法修復(fù)這個 bug

//main.js

defineClass("XRTableViewController", {

tableView_didSelectRowAtIndexPath: function(tableView, indexPath) {

var row = indexPath.row()

if (self.dataSource().length > row) {? //加上判斷越界的邏輯

var content = self.dataArr()[row];

var controller = XRViewController.alloc().initWithContent(content);

self.navigationController().pushViewController(controller);

}

}

})

如果我們不會寫JS的話,平臺還為我們提供腳本編輯器可以進行編輯這時我們需要在Xcode中創(chuàng)建一個main.js文件,創(chuàng)建一個空文件即可,JS腳本的文件名必須是**main.js**.

注意

?若使用 XCode8 接入,需要在項目 Capabilities 打開 Keychain Sharing 開關(guān),否則在模擬器下載腳本后會出現(xiàn) decompress error, md5 didn't match 錯誤(真機無論是否打開都沒問題)

修改/刪除JS腳本

若后續(xù)需要對這個腳本進行修改,可以重新上傳新的腳本,APP 客戶端會在請求時發(fā)現(xiàn)腳本已更新,下載最新腳本覆蓋原來的,下次啟動時執(zhí)行。?

?若想直接取消某個 APP 版本的 JS 腳本補丁,可以直接在 APP 版本界面刪除此 APP 版本,APP 客戶端會在請求時發(fā)現(xiàn)腳本已被刪除,即刻刪除本地 JS 腳本文件,下次啟動時不再加載。

這門技術(shù)的確挺叼的,騰訊、阿里都在用,我已經(jīng)用到項目中了,感覺確實挺神奇。不錯,我喜歡。

最后編輯于
?著作權(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)容

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