JSPatch(热修复)的使用

作者: uniapp | 来源:发表于2016-10-11 20:32 被阅读209次

当App上线后,难免不会出现bug.由于AppStore需要审核的原因,出现的bug就无法及时修复.而JSPatch可以实现在App启动时,自动发送网络请求补丁,替换自身的方法或属性,因此可以用来在线上紧急修复bug.
下面是官方地址:

http://www.jspatch.com/

按照官方文档,使用流程很简单.测试时,在工程内新建main.js文件.下面是我写的Demo的源码.
在ViewController类的.m文件中的代码如下:

#import "ViewController.h"
#import "TestCell.h"
#import "ViewController+CategoryTest.h"

@interface ViewController ()
@property (nonatomic,assign) NSInteger count;
@property (nonatomic,strong) NSString *name;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self.tableView registerClass:[TestCell class] forCellReuseIdentifier:@"TestCell"];
    self.tableView.estimatedRowHeight = 100;
    self.tableView.rowHeight = UITableViewAutomaticDimension;
    [ViewController testLogOne];
    [ViewController testLogTwo];
    
    NSLog(@"*******count%zd**********", _count);
    
    [self blockTest:^(NSString *str) {
        NSLog(@"*******%@******",str);
    }];
}

- (void)blockTest: (void (^)(NSString *))block{
    block(@"blockTest");
}
+ (void)testLogOne{
    NSLog(@"*******classTestLogOne*******");
}

+ (void)testLogTwo{
    NSLog(@"*******classTestLogTwo*******");
}

- (void)testLog{
    NSLog(@"*******testLog*******");
    [self categoryTest];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return 10;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    TestCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"TestCell"];
    if (!cell) {
        cell = [[TestCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"TestCell"];
    }
    return cell;
}
@end

下面是main.js中的代码:

//defineClass("类名", [属性],{实例方法},{类方法})
defineClass("ViewController",[],{
            
            tableView_numberOfRowsInSection: function(tableView, indexPath){
            //            console.log('***********');
            return 1;
            },
            },{})
//调用未覆盖前的实例方法
defineClass("ViewController", {
            viewDidLoad: function() {
            self.ORIGviewDidLoad();
            self.testLog();
            },
            })
//覆盖类方法
defineClass("ViewController", {}, {
            testLogOne: function(){
            console.log('*****ModifyClassFunctionOne******');
            },
            testLogTwo: function(){
            console.log('*****ModifyClassFunctionTwo******');
            }
            })
//覆盖分类方法
defineClass("ViewController",{
            categoryTest: function(){
            console.log('*****ModifycategoryTest******');
            },
            })
//修改属性
defineClass("ViewController", {
            viewDidLoad: function() {
            self.ORIGviewDidLoad();
            self.setValue_forKey(10,"_count");
            var num = 10;
            console.log('%d ******',self.count());
            },
            })
//修改block
defineClass("ViewController", {
            blockTest: function(){
            
            },
            });

在mian.js文件中,通过defineClass方法分别覆盖了原ViewController类中的实例方法,类方法,分类方法,属性和block.
使用过程中需要注意一些细节问题:
1 JSPatch实现走的是http网络请求,需要在info.plist中进行ATS注入.

 <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>

2 如果按步骤操作后,效果无法实现,需要将XCode退出后尝试.
下面是Demo的github链接:

https://github.com/zhudong10/JSPatchDemo.git

相关文章

  • JsPatch学习(1)【使用篇】

    JsPatch的使用很多,简单介绍热修复功能。JsPatch【使用篇】 最简单的使用: 1、注册App 到JSPa...

  • JSPatch(热修复)的使用

    当App上线后,难免不会出现bug.由于AppStore需要审核的原因,出现的bug就无法及时修复.而JSPatc...

  • 神经病院Objective-C Runtime住院第二天——消息

    前言 现在越来越多的app都使用了JSPatch实现app热修复,而JSPatch 能做到通过 JS 调用和改写 ...

  • 使用JSPatch热修复指南

    JSPatch 是腾讯微信团队牛人bang开源的一种通过JavaScript调用iOS原生代码来实现热修复或者动态...

  • JSPatch热修复

    今天写了一个jspatch的小demo,每一步都做了截图,如果不了解JSPatch,大家可自行百度。JSPatch...

  • JSPatch热修复

    首先,简单说一下,为什么要用JSPatch,做iOS开发的人都知道,一旦程序出现了紧急BUG,各种申请苹果的...

  • JSPatch热修复

    iOS如果线下出现bug, 这个好解决, 但如果线上出bug, 由于APP Store提交审核有时间限制, 修改完...

  • iOS热更新/热修复JSPatch的使用

    一、目的: 随着APP迭代更新,项目越写越庞大,每个功能间的关联性越来越多。再加上测试人员人手不足等情况,不可避免...

  • iOS热更新/热修复JSPatch的使用

    一、目的: 随着APP迭代更新,项目越写越庞大,每个功能间的关联性越来越多。再加上测试人员人手不足等情况,不可避免...

  • 使用JSPatch热修复IOS App

    IOS App常常会遇到这种情况,线上发现一个严重bug,可能是某一个地方Crash,也可能是一个功能无法使用,这...

网友评论

  • 马爷:我想问一下的是 JSpatch 热修复的原理是什么?可以讲一讲吗?你现在有用到这个吗?
    马爷:@小白马10 用到的地方多吗?比如说 block
    uniapp:@马爷 项目用到了~

本文标题:JSPatch(热修复)的使用

本文链接:https://www.haomeiwen.com/subject/yembyttx.html