最近JSPatch挺火的,于是抽時(shí)間學(xué)習(xí)一下留著備用
在網(wǎng)上查詢了不少關(guān)于JSPatch的文章,總結(jié)下來有兩種不同的用法
方法一:
1、拷貝 JSPatch/目錄下的三個(gè)文件 JSEngine.m/ JSEngine.h/ JSPatch.js到項(xiàng)目里即可。demo下載地址:https://github.com/a130785/JSPatchDemo
2、在AppDelegate里的代碼如下:(需要事先寫好js腳本)
#import “JPEngine.m"
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[JPEngine startEngine];
[NSURLConnection sendAsynchronousRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://test.net/bugfix.JS"]] queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
NSString *script = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
if (script) {
[JPEngine evaluateScript:script];
}
}];
return YES;
}
@end
這樣的話有個(gè)麻煩的問題,就是需要每個(gè)app自己搭建一個(gè)服務(wù)器,用于js腳本文件的管理。幸好, JSPatch 平臺(tái)已經(jīng)幫我們做了這個(gè)!
方法二:
什么是 JSPatch 平臺(tái)?
JSPatch 需要使用者有一個(gè)后臺(tái)可以下發(fā)和管理腳本,并且需要處理傳輸安全等部署工作,JSPatch 平臺(tái)幫你做了這些事,提供了腳本后臺(tái)托管,版本管理,保證傳輸安全等功能,讓你無需搭建一個(gè)后臺(tái),無需關(guān)心部署操作,只需引入一個(gè) SDK 即可立即使用 JSPatch。
不過,JSPatch是收費(fèi)的,收費(fèi)標(biāo)準(zhǔn)如下:
具體步驟:
1、去JSPatch官網(wǎng) http://www.jspatch.com 注冊(cè)appkey
2、下載SDK,下載后將.framework文件拖到項(xiàng)目中,在link binary中導(dǎo)入兩個(gè)庫libz和JavaScriptCore兩個(gè)框架:
3、添加依賴庫
4、在appdelegate中加入以下代碼:
#import <JSPatch/JSPatch.h>
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[JSPatch startWithAppKey:@"你的AppKey"];
[JSPatch sync];
}
@end
5、使用xcode新建一個(gè)main.js的空文件,至于為什么叫main.js,這個(gè)我們就不要深究了,這是別人要求的規(guī)范寫法
為了方便代碼自動(dòng)補(bǔ)全,建議添加JSPatchX插件:https://github.com/bang590/JSPatchX
6、下面做個(gè)測(cè)試,修改某個(gè)頁面的title標(biāo)題和背景顏色。首先打開 testScriptInBundle,這個(gè)用戶本地測(cè)試,同時(shí)注釋掉startwithappkey。
7、下面開始在main.js里面寫入js代碼,對(duì)于簡(jiǎn)單的修改可以直接通過http://bang590.github.io/JSPatchConvertor/ 將OC代碼轉(zhuǎn)換成JS代碼,但是,這個(gè)轉(zhuǎn)換不是萬能的,稍微復(fù)雜的就會(huì)出錯(cuò),所以要謹(jǐn)慎使用!!!
具體使用方法請(qǐng)參考:https://github.com/bang590/JSPatch/wiki/JSPatch-基礎(chǔ)用法
轉(zhuǎn)換后的效果:
JSPatch的安全策略
JSPatch腳本的執(zhí)行權(quán)限很高,若在傳輸過程中被中間人篡改,會(huì)帶來很大的安全問題,為了防止這種情況出現(xiàn),需要在傳輸過程中對(duì)JS文件進(jìn)行了RSA簽名加密,流程如下:
服務(wù)端:
計(jì)算 JS 文件 MD5 值。
用 RSA 私鑰對(duì) MD5 值進(jìn)行加密,與JS文件一起下發(fā)給客戶端。
客戶端:
拿到加密數(shù)據(jù),用 RSA 公鑰解密出 MD5 值。
本地計(jì)算返回的 JS 文件 MD5 值。
對(duì)比上述的兩個(gè) MD5 值,若相等則校驗(yàn)通過,取 JS 文件保存到本地。
由于 RSA 是非對(duì)稱加密,在沒有私鑰的情況下第三方無法加密對(duì)應(yīng)的 MD5 值,也就無法偽造 JS 文件,杜絕了 JS 文件在傳輸過程被篡改的可能。
1、關(guān)于加密傳輸?shù)脑敿?xì)介紹請(qǐng)看JSPatch作者bang的博客
http://blog.cnbang.net/tech/2879/
2、加密使用的是非對(duì)稱RSA 校驗(yàn)的方式,會(huì)涉及到公鑰和私鑰,可參考下面的博客
http://www.cnblogs.com/hxwj/p/5163635.html
3、具體的加密步驟可參看下面的博客內(nèi)容
http://www.cnblogs.com/hxwj/archive/2016/01/28/5165436.html