JSPatch以小巧的体积做到了让JS调用/替换任意OC方法,让iOS APP具备热更新的能力,在实现 JSPatch 过程中遇到过很多困难也踩过很多坑,有些还是挺值得分享的。废话不多说,直接搞起...
- 1.首先把文件
JSPatch
放到你的项目,这就不细说了,我用的网络请求框架是ASI ,代码就以ASI为例了:
导入所需的框架,如果项目中已经有了就省事了
-
2.这时还会报一个错误,就是找不到#import <libxml/HTMLparser.h>这个文件,在Build Settings --> 输入 "header search" 就行了,找到对应的Header Search Paths 添加目录"${SDK_DIR}/usr/include/libxml2"
BD941803-9D6A-4FA6-8E37-E5F49FF36558.png -
3.现在就算导入文件OK了,下面开始真正的集成,其实也非常的简单,在Appdelegate 的程序启动的方法添加如下代码
-
(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//1.创建请求对象 NSURL *url=[NSURL URLWithString:@"文件存放在服务器上的路径/demo.js"]; ASIHTTPRequest *request=[ASIHTTPRequest requestWithURL:url]; //2.设置下载文件保存的路径 NSString *cachepath= [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject]; NSString *filename=[cachepath stringByAppendingPathComponent:@"demo.js"]; request.downloadDestinationPath=filename; NSLog(@"%@",filename); //3.设置下载进度的代理 request.downloadProgressDelegate=self; //4.发送网络请求(异步) [request startAsynchronous]; //5.设置支持断点下载 request.allowResumeForFileDownloads=YES; //6.下载完毕后通知 [request setCompletionBlock:^{ NSLog(@"文件已经下载完毕"); [JPEngine startEngine]; NSString *filename=[cachepath stringByAppendingPathComponent:@"demo.js"]; NSString *script = [NSString stringWithContentsOfFile:filename encoding:NSUTF8StringEncoding error:nil]; [JPEngine evaluateScript:script]; }]; return YES; }
-
4.这是在正常的控制器里的代码
- 5.这是上传到服务器上的代码(这是js代码,有兴趣的同学可以学习一下)
网友评论