32.jpg
JSPatch以小巧的體積做到了讓JS調(diào)用/替換任意OC方法,讓iOS APP具備熱更新的能力情妖,在實(shí)現(xiàn) JSPatch 過程中遇到過很多困難也踩過很多坑蹄衷,有些還是挺值得分享的正歼。廢話不多說,直接搞起...
- 1.首先把文件
JSPatch
放到你的項(xiàng)目,這就不細(xì)說了,我用的網(wǎng)絡(luò)請(qǐng)求框架是ASI ,代碼就以ASI為例了:
導(dǎo)入所需的框架,如果項(xiàng)目中已經(jīng)有了就省事了
B14BDE34-4D29-4069-A6D4-EDFF85F91FB0.png
-
2.這時(shí)還會(huì)報(bào)一個(gè)錯(cuò)誤,就是找不到#import <libxml/HTMLparser.h>這個(gè)文件,在Build Settings --> 輸入 "header search" 就行了,找到對(duì)應(yīng)的Header Search Paths 添加目錄"${SDK_DIR}/usr/include/libxml2"
BD941803-9D6A-4FA6-8E37-E5F49FF36558.png 3.現(xiàn)在就算導(dǎo)入文件OK了,下面開始真正的集成,其實(shí)也非常的簡(jiǎn)單,在Appdelegate 的程序啟動(dòng)的方法添加如下代碼
-
(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//1.創(chuàng)建請(qǐng)求對(duì)象 NSURL *url=[NSURL URLWithString:@"文件存放在服務(wù)器上的路徑/demo.js"]; ASIHTTPRequest *request=[ASIHTTPRequest requestWithURL:url]; //2.設(shè)置下載文件保存的路徑 NSString *cachepath= [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject]; NSString *filename=[cachepath stringByAppendingPathComponent:@"demo.js"]; request.downloadDestinationPath=filename; NSLog(@"%@",filename); //3.設(shè)置下載進(jìn)度的代理 request.downloadProgressDelegate=self; //4.發(fā)送網(wǎng)絡(luò)請(qǐng)求(異步) [request startAsynchronous]; //5.設(shè)置支持?jǐn)帱c(diǎn)下載 request.allowResumeForFileDownloads=YES; //6.下載完畢后通知 [request setCompletionBlock:^{ NSLog(@"文件已經(jīng)下載完畢"); [JPEngine startEngine]; NSString *filename=[cachepath stringByAppendingPathComponent:@"demo.js"]; NSString *script = [NSString stringWithContentsOfFile:filename encoding:NSUTF8StringEncoding error:nil]; [JPEngine evaluateScript:script]; }]; return YES; }
4.這是在正常的控制器里的代碼
C08EBB37-1B85-441C-86D5-5B0804BAF4CD.png
- 5.這是上傳到服務(wù)器上的代碼(這是js代碼,有興趣的同學(xué)可以學(xué)習(xí)一下)
B865BA32-666D-4CB6-A443-F93894146279.png