zoukankan      html  css  js  c++  java
  • iOS第三方类库JSPatch(热更新)

    ----------------------------------------------------------------------------------------------------------------------------

    更新记录

    2016年3月4日

    JSPatch官方网址:http://jspatch.com/

    OC转JS代码工具:http://bang590.github.io/JSPatchConvertor/

    ----------------------------------------------------------------------------------------------------------------------------

    一、前言

      场景一:我们在做iOS开发的过程中,难免会由于自己的不细心导致一些小问题。如果产品没上线之前发现还好,如果上线了才发现问题,那么问题就大了,可能直接影响KPI,更严重的甚至直接面临着fire。

      场景二、一旦上线的产品,如果临时遇到需求变动,那么久必须重新修改代码。一旦修改了项目代码的话,我们就必须重新发版。这样岂不是很麻烦?

      现在就来让我们看一下JSPatch,它的出现可以在不发版的情况下动态的自行修复或者添加新的需求。

    二、JSPatch简介  

      JSPatch:它是一个第三方类库,地址如下:

        https://github.com/bang590/JSPatch

      它是JavaScript和OC之间的桥梁,你可以在js文件中去调用任何OC类和方法,然后在js文件中去动态修改OC类。达到不重新发版就更新的效果。它主要是使用的OC runtime实现的。我们可以使用它热更新自己的iOS app。

    三、JSPatch使用

      首先,我们去这里下载,然后导入项目工程里面。(个人比较推荐使用cocoapods导入)然后我们在AppDelegate中导入:

    #import "JPEngine.h"

    然后添加如下代码在

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    {

    添加如下:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        [JPEngine startEngine];
        NSString *sourcePath = [[NSBundle mainBundle] pathForResource:@"demo" ofType:@"js"];
        NSString *script = [NSString stringWithContentsOfFile:sourcePath encoding:NSUTF8StringEncoding error:nil];
        [JPEngine evaluateScript:script];
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        self.window.rootViewController = [ViewController new];
        [self.window makeKeyAndVisible];
        return YES;
    }

    其中的demo.js就是我们需要手动去写的一个js代码:

    require('UIView,UIColor');

    defineClass('ViewController',{

    changeBGColor:function() {

    var view = self.view();

    view.setBackgroundColor(UIColor.yellowColor());

    return view;

    }

    });

    我们可以简单看一下demo.js的内容。其中的ViewController就是我们需要更改的类的类名,changeBGColor就是类ViewController中的一个方法,我们可以通过该js去重写该方法,达到不更新OC代码就可以修改程序的效果。

    四、项目中的使用

      这里就只是简单的说一下使用,我们可以让后台写一个接口,通过该接口去拿到服务器上的js文件,然后动态修改服务器上js文件,就可以达到热更新的效果。

    五、更多

      更多使用可以查看其github主页。

    六、附

      源码地址:http://pan.baidu.com/s/1qXvGNGK

    转载请标注原文地址:http://www.cnblogs.com/zhanggui/p/5157177.html

  • 相关阅读:
    es5中的类 继承 (原型链继承,寄生继承,组合继承)
    typeScript类型
    javaScript 不可思议问题
    javaScript 运算符(操作符)
    window.a 与 window[a]区别
    Event Loop事件循环
    生产环境vue-router模式为history导致页面404
    Axios请求添加token
    vue页面利用keep-alive实现页面快速缓存
    js原型链原理
  • 原文地址:https://www.cnblogs.com/zhanggui/p/5157177.html
Copyright © 2011-2022 走看看