iOS-runtime-運用之JSPatch

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

1、使用JSPatch干什么?

上線后實時修復(fù)線上 bug

2、怎么使用JSPatch?

Github 開源的是 JSPatch 核心代碼,使用完全免費自由,若打算自己搭建后臺下發(fā) JSPatch 腳本,可以直接使用 github 上的核心代碼,與 JSPatch 平臺上的 SDK 無關(guān)。JSPatch 平臺的 SDK 在核心代碼的基礎(chǔ)上增加了向平臺請求腳本/傳輸解密/版本管理等功能,只用于這個平臺。
如果自己想用免費的功能,則應(yīng)該使用開源代碼,配合自己的服務(wù)器來實現(xiàn),有條件的直接用JSPatch 平臺封裝好的sdk,下面配合實例來實現(xiàn)

3、導(dǎo)入框架

通過 cocoa pods 集成pod 'JSPatchPlatform',然后再執(zhí)行 pod install 即可。

或者手動導(dǎo)入,若沒有使用 cocoapods,也可以手動集成。在本頁左側(cè)下載 SDK 后解壓,將 JSPatchPlatform.framework 拖入項目中,勾選 "Copy items if needed",并確保 "Add to target" 勾選了相應(yīng)的 target。

添加依賴框架:TARGETS -> Build Phases -> Link Binary With Libraries -> + 添加libz.dylibJavaScriptCore.framework。

注意:手動集成無法斷點調(diào)試 JSPatch 核心源碼,推薦使用 cocoapods 方式集成。

4、主要步驟 在平臺創(chuàng)建自己的應(yīng)用,獲取appid 和其他的平臺一樣,就不截圖了

5BF36747-0759-434D-84D7-517781DB3B9A.png

需要上傳main.js補丁文件,那我們要創(chuàng)建一個這種補丁文件,


CEEBC09A-39AD-4EA3-94EA-4E01A4795E1F.png

Empty文件,自己命名main.js文件,接下來就是在里面寫上js補丁代碼,接下來問題就來了,我特么不會寫js,腫么辦,表怕,項目開發(fā)者有辦法,首先https://github.com/bang590/JSPatch/wiki/JSPatch-%E5%9F%BA%E7%A1%80%E7%94%A8%E6%B3%95 里的內(nèi)容搞清楚,大概大部分問題應(yīng)該是沒問題了,然而最簡單的方法,就是寫上oc的代碼,用http://bang590.github.io/JSPatchConvertor/ 工具來轉(zhuǎn)吧,還要怎么樣。。

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    NSArray *arr=@"sss";
    arr[1];
}

點擊后就爆炸,我們來修復(fù)這個問題

// 要用到的OC類需要require引用下
require('UIAlertView')

// 重寫ViewController類中的touchesBegan_withEvent方法,具體寫法看文檔吧
defineClass("ViewController", {
            touchesBegan_withEvent: function(touches, event) {
            // 方法的實現(xiàn)
            var av = UIAlertView.alloc().initWithTitle_message_delegate_cancelButtonTitle_otherButtonTitles("bug修復(fù)了", "是不是很神奇", null, "取消", "確定", null);
            av.show();
            }
        })

補丁里面就是這個類容,就是復(fù)寫替換的有bug的那個方法

關(guān)鍵部分

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [JSPatch startWithAppKey:@"0b4d015f6d0b0b7e"];
    [JSPatch sync];
    // Override point for customization after application launch.
    return YES;
}

把剛剛獲得的appID寫在上面位置,即在每次啟動的時候,會更新讀取這個補丁文件,用來修復(fù)bug。

當(dāng)然在發(fā)布這個補丁前,一般要測試下是不是沒問題吧,so

//    [JSPatch startWithAppKey:@"asdasdasdasdasadasd"];
//    [JSPatch sync];
    [JSPatch testScriptInBundle];     // 用于測試,會在bundle下自動尋找main.js來執(zhí)行
最后編輯于
?著作權(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)容