iOS个人修养iOS 开发 IOS

iOS之JSPatch 热补丁实时修复bug

2016-08-20  本文已影响513人  CGPointZero

背景

在iOS开发中,存在bug修复周期长的问题。若程序出了bug,往往需要走一下步骤:
修改代码--打包--提交审核(--审核被拒--修改代码--再次提交审核)--用户更新。
需要很长一个周期才能解决问题。而JSPatch的出现,有效的解决了这一尴尬的局面。

热修复

一种即时修复bug的技术,也叫hotfix。

什么是JSPatch?

JSPatch是一个一个动态更新的开源的框架,可以实时的修复bug(热修复)、添加新功能。从服务器下发补丁js补丁代码,客户端接收到补丁后,进行安全校验,然后用JS调用或替换原来crash的OC方法,从而达到实时修复bug的目的,过程如下图:

示例

假如,在LeftViewControlertableView:didSelectRowAtIndexPath:方法中存在一个数组越界的crash:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

    //---------------crash----------------
    NSArray *array=@[@"1",@"2",@"3"];
    for(int i=0;i<4;i++){
        NSLog(@"%@",array[i]); //程序中出现的crash(数组越界)
    }
    //---------------crash---------------
}

我们可以在服务端用js下发一段这样的代码,达到实时修复bug的目的:

defineClass('LeftViewController', {
    tableView_didSelectRowAtIndexPath: function(tableView, indexPath) {

        var array = ["1", "2", "3"];
        for (var i = 0; i < array.count(); i++) {
            NSLog("%", array[i]); 
        }
    },
});

我们可以在项目中引入JSPatch,然后在在自己搭建下发补丁的服务器,也可以直接用JSPatch平台集成的带代码下发功能的SDK,我们只需要写好补丁,直接就可以在这个平台下发了。

步骤如下:

defineClass('LeftViewController', {

    tableView_didSelectRowAtIndexPath: function(tableView, indexPath) {

        var array = ["1", "2", "3"];
        for (var i = 0; i < array.count(); i++) {
            NSLog("%", array[i]);
        }
    },
});

你可以用JSPatchConverter直接将写好的OC转成Patch,大部分可以直接转,但私有变量/静态变量/宏这些还不支持,所以转换后需要<b>手动修改</b>。可以借助这个工具,省去原本要先写好OC代码,在翻译成Patch的时间成本。

上一篇 下一篇

猜你喜欢

热点阅读