JSPatch 三分鐘快速集成

JSPatch 可以讓你用 JavaScript 書寫原生 iOS APP删铃。只需在項(xiàng)目引入極小的引擎诫隅,就可以使用 JavaScript 調(diào)用任何 Objective-C 的原生接口削樊,替換項(xiàng)目原生代碼動(dòng)態(tài)修復(fù) bug甸箱。

1.接入流程

JSPatch github地址:https://github.com/bang590/JSPatch

  1. 拷貝 JSPatch/ 目錄下的三個(gè)文件 JSEngine.m / JSEngine.h / JSPatch.js 到項(xiàng)目。// JSpatch 核心類
  2. 拷貝 Loader 文件夾到項(xiàng)目肯适。// JSpatch 安全管理類
  3. 拷貝 Extensions/ 目錄下的 JPCleaner.h / JPCleaner.m 文件到項(xiàng)目框舔。// JSpatch 擴(kuò)展的清除js的類
  4. GeneralLinkFrameworks and Libraries里面 添加javascriptcore.framework //這個(gè)庫里主要用于js與oc語言的橋接停士,比如一些數(shù)據(jù)類型間的相互轉(zhuǎn)化。

2.本地測試

編寫main.js文件

  1. 用原生代碼編寫修復(fù)bug的代碼薄辅,之后可以使用 JSPatch Convertor 自動(dòng)把 Objective-C 代碼轉(zhuǎn)為 JavaScript 代碼要拂,然后把生成代碼寫入main.js文件中,根據(jù)作者給的js語法進(jìn)行一行行review长搀。
  2. 導(dǎo)入 JSPactch X 插件手寫js代碼宇弛。

測試main.js文件

  1. main.js文件導(dǎo)入項(xiàng)目Resource/目錄下。
  2. didFinishLaunchingWithOptions:方法中調(diào)用[JPLoader runTestScriptInBundle];方法源请。
  3. 如果bug未修復(fù)需要在main.js中進(jìn)行斷點(diǎn)調(diào)試或者使用console.log("xxx");進(jìn)行調(diào)試直到bug修復(fù)完成枪芒。

斷點(diǎn)調(diào)試說明

  1. 首先需要開啟 Safari 調(diào)試菜單:Safari -> 偏好設(shè)置 -> 高級 -> 勾選在菜單欄中顯示“開發(fā)”菜單
  2. 接著啟動(dòng)APP -> Safari -> 開發(fā) -> 選擇你的機(jī)器 -> JSContext 即可開始調(diào)試。
  3. 連接真機(jī)調(diào)試時(shí)谁尸,需要打開真機(jī)的web檢查器:設(shè)置 -> Safari -> 高級 -> Web檢查器舅踪。

3.生成RSA密鑰

命令行依次寫入

  1. openssl genrsa -out rsatest_private_key.pem 1024
  2. pkcs8 -topk8 -inform PEM -in rsatest_private_key.pem -outform PEM –nocrypt
  3. rsa -in rsatest_private_key.pem -pubout -out rsatest_public_key.pem

會(huì)在本地當(dāng)前用戶的目錄下生成連個(gè)文件如下:

配置

  1. 文本形式打開rsatest_public_key.pem替換 JPLoader.h 里的 publicKey
  2. 打開rsatest_private_key.pem替換tools/pack.php 里的privateKey良蛮。
  3. 設(shè) JPLoader.hrootUrl 為你的服務(wù)器地址抽碌。

腳本打包

  1. 取出tools內(nèi)含pack.php的文件夾放在桌面(其他地方也行)。
  2. 把測試成功的main.js文件放入tools文件夾决瞳。
  3. 通過命令行 cd 命令到此文件夾货徙。
  4. 敲入命令 packer.php main.js,文件夾下會(huì)生成一個(gè)v1.zip的包皮胡。
  5. 腳本打包后的文件存放在服務(wù)器的路徑:${rootUrl}/${appVersion}/${patchFile}痴颊。

4.后臺(tái)請求測試

  1. didFinishLaunchingWithOptions:方法中調(diào)用[JPLoader run];方法。
  2. applicationDidBecomeActive:方法中調(diào)用[JPLoader updateToVersion:1 callback:nil];方法屡贺。

5.添加容錯(cuò)

崩潰x次 清除本地js文件 取消加載

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    
    NSInteger crashInteger = [[NSUserDefaults standardUserDefaults] integerForKey:@"loadPatchCrash"];

    if (crashInteger < 2) { // 加載patch 崩潰2次 取消加載
        
        crashInteger++;
        [[NSUserDefaults standardUserDefaults] setInteger:crashInteger forKey:@"loadPatchCrash"];
        [[NSUserDefaults standardUserDefaults] synchronize];
        [JPLoader run];
        crashInteger--;
        [[NSUserDefaults standardUserDefaults] setInteger:crashInteger forKey:@"loadPatchCrash"];
        [[NSUserDefaults standardUserDefaults] synchronize];
    }else {
        // 2次 刪除本地 patch 文件
        [JPCleaner cleanAll];
        [[NSUserDefaults standardUserDefaults] setInteger:0 forKey:@"loadPatchCrash"];
        [[NSUserDefaults standardUserDefaults] synchronize];
    }
}

間隔xxx秒去請求腳步(或者后臺(tái)返回腳本的版本號判斷緩存)

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    // JSPatch請求時(shí)間間隔的判斷
    NSDate *lastRequestTime = [[NSUserDefaults standardUserDefaults] objectForKey:@"jp_request_time"];
    
    //下載補(bǔ)丁包得請求
    void(^timeInterval)() = ^ {
        [JPLoader updateToVersion:1 callback:nil];
        // 將當(dāng)前時(shí)間寫入沙盒
        [[NSUserDefaults standardUserDefaults] setObject:[NSDate date] forKey:@"jp_request_time"];
        [[NSUserDefaults standardUserDefaults] synchronize];
    };
    // 判斷
    if (lastRequestTime) {
        NSTimeInterval between = [lastRequestTime timeIntervalSinceNow];
        
        if (between > 3600) {
            timeInterval();
        }else return;
        
    }else {
        timeInterval();
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蠢棱,一起剝皮案震驚了整個(gè)濱河市锌杀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌泻仙,老刑警劉巖糕再,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異玉转,居然都是意外死亡突想,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進(jìn)店門冤吨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蒿柳,“玉大人饶套,你說我怎么就攤上這事漩蟆。” “怎么了妓蛮?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵怠李,是天一觀的道長。 經(jīng)常有香客問我蛤克,道長捺癞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任构挤,我火速辦了婚禮髓介,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘筋现。我一直安慰自己唐础,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布矾飞。 她就那樣靜靜地躺著一膨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪洒沦。 梳的紋絲不亂的頭發(fā)上豹绪,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天,我揣著相機(jī)與錄音申眼,去河邊找鬼瞒津。 笑死,一個(gè)胖子當(dāng)著我的面吹牛括尸,可吹牛的內(nèi)容都是我干的巷蚪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼姻氨,長吁一口氣:“原來是場噩夢啊……” “哼钓辆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤前联,失蹤者是張志新(化名)和其女友劉穎功戚,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體似嗤,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡啸臀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了烁落。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乘粒。...
    茶點(diǎn)故事閱讀 39,731評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖伤塌,靈堂內(nèi)的尸體忽然破棺而出灯萍,到底是詐尸還是另有隱情,我是刑警寧澤每聪,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布旦棉,位于F島的核電站,受9級特大地震影響药薯,放射性物質(zhì)發(fā)生泄漏绑洛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一童本、第九天 我趴在偏房一處隱蔽的房頂上張望真屯。 院中可真熱鬧,春花似錦穷娱、人聲如沸绑蔫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽晾匠。三九已至,卻和暖如春梯刚,著一層夾襖步出監(jiān)牢的瞬間凉馆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工亡资, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留澜共,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓锥腻,卻偏偏與公主長得像嗦董,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子瘦黑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評論 2 354

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理京革,服務(wù)發(fā)現(xiàn)奇唤,斷路器,智...
    卡卡羅2017閱讀 134,652評論 18 139
  • 背景介紹 IOS平臺(tái)提交審核的周期太長匹摇,快則45天咬扇,慢則半個(gè)月或者20天,如果碰到圣誕節(jié)等假日廊勃,可能一個(gè)月都有可能...
    恒源賓館閱讀 2,247評論 10 27
  • 口味真是越來越重啦懈贺。這種褻瀆神佛的東西也看得津津有味。 其實(shí)坡垫,也說不定呢梭灿。如果要成佛,要苦冰悠,身苦堡妒,心苦。 唉屿脐,又看...
    葉開開閱讀 551評論 0 0
  • 編譯標(biāo)識符-flags 1涕蚤,DOTALL,S使 .(點(diǎn)號)匹配包括換行符在內(nèi)的所有字符宪卿。 2的诵,IGNORECASE...
    挖地瓜閱讀 598評論 0 1
  • 在外漂泊多年,對故鄉(xiāng)的思念也愈加濃烈佑钾。16年12月31日晚在日本看紅白歌會(huì)(類似中國的春晚)西疤,第一次聽到這首歌,瞬...
    Raku44閱讀 356評論 0 0