JSPatch 使用

JSPatch 使用_第1张图片
32.jpg

JSPatch以小巧的体积做到了让JS调用/替换任意OC方法,让iOS APP具备热更新的能力,在实现 JSPatch 过程中遇到过很多困难也踩过很多坑,有些还是挺值得分享的。废话不多说,直接搞起...

  • 1.首先把文件JSPatch放到你的项目,这就不细说了,我用的网络请求框架是ASI ,代码就以ASI为例了:
    导入所需的框架,如果项目中已经有了就省事了
JSPatch 使用_第2张图片
B14BDE34-4D29-4069-A6D4-EDFF85F91FB0.png
  • 2.这时还会报一个错误,就是找不到#import 这个文件,在Build Settings --> 输入 "header search" 就行了,找到对应的Header Search Paths 添加目录"${SDK_DIR}/usr/include/libxml2"


    JSPatch 使用_第3张图片
    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.这是在正常的控制器里的代码

JSPatch 使用_第4张图片
C08EBB37-1B85-441C-86D5-5B0804BAF4CD.png
  • 5.这是上传到服务器上的代码(这是js代码,有兴趣的同学可以学习一下)
JSPatch 使用_第5张图片
B865BA32-666D-4CB6-A443-F93894146279.png

还有就是安全加密的问题,推荐看看这篇博客
你们最最期待的demo在这里!!!给力吧,别忘记给个star 啊!

你可能感兴趣的:(JSPatch 使用)