很早就知道有热修复这个东西,但是一直没有去研究过,最近稍微闲那么一点,特意去尝试了一下如何使用JSPatch进行热修复,首先说说JSPatch是干什么的吧,我估计还有很多小伙伴不知道这是干啥的~~~:
简单的说吧,JSPatch就是当你发布完成一个版本之后,突然发现线上的版本有个很严重的bug导致崩溃,这时年轻的我们肯定是想到马上发布一个新版本来弥补自己犯下的错,但是你们有没有想过,不发布版本能不能修复这个bug呢?答案是肯定的,这也是我今天要讲的主题了,JSPatch就是干这个事的,当线上的版本出现bug时 我们可以通过JSPatch来修复,下面就来说说怎么使用吧:
- 首先新建一个项目吧,这个就不用我说了吧,好吧 你说你懒得新建,那么到最后下载我的demo也行(...),先贴上我的代码:
//
// ViewController.m
// JSPatchTestDemo
//
// Created by 遇见远洋 on 16/8/15.
// Copyright © 2016年 遇见远洋. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()
@property (strong,nonatomic)UIView *ORIGgenView;/**<HEH*/
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (UIView *)genView
{
return [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 320)];
}
- (UIView *)ORIGgenView {
if (!_ORIGgenView) {
_ORIGgenView = [[UIView alloc]initWithFrame:self.view.frame];
_ORIGgenView.backgroundColor = [UIColor orangeColor];
[self.view addSubview:_ORIGgenView];
}
return _ORIGgenView;
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
NSArray * array = [NSArray array];
array[0];
}
@end
总共我们的代码就这么多,运行之后,点击屏幕,不出意外肯定是会崩溃的,那么我们假设这个demo已经上线了,那么此时该怎么办呢?如果没有JSPatch这个牛逼的家伙 ,那么咱们就只能苦巴巴的重新提交appstore了 ,下面说到咱们的重点了:
2.如何集成JSpatch?
说实话,简直不要太简单(~~~),去JSPatch官网下载SDK http://www.jspatch.com/ 下载后将framework文件拖到项目中在link binary中导入两个库libz和JavaScriptCore两个框架:
3.好了 ,将这个库拖到项目里,然后再写上以下代码.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 通过appKey启动(注意替换成自己的appkey)
[JSPatch startWithAppKey:@"注册之后你的appkey"];
// 同步JSPatch官网控制台中的js补丁
[JSPatch sync];
return YES;
}
好了,你已经集成完了,是不是so easy!别着急,很多人说这个东西很难弄,难的不是集成,难的是怎么打补丁!!对,你没听错,就是打补丁,终于来到最重要的一步了,怎么打补丁:
4.集成完了之后,它是怎么修复线上bug的呢,其实就是通过我们往JSPatch那里传的补丁来修复的,咱们就以上面咱们的demo出现的bug来说吧,咱们要修复这个bug,该怎么写这个补丁呢?
4.1.1 使用xcode新建一个main.js的空文件,
至于为什么叫main.js,这个我们就不要深究了,这是别人要求的规范写法,
4.1.2然后就是打补丁的时间了,很多人肯定都不会js,至少我不会,那我们该怎么办?有两种办法:
1.去看下JSPatch官网的文档介绍
2.在下面我给出的网址里面 直接OC代码转JS,正常人是不是都会用第二种方法,哈哈 ,我也是 ,那就贴上网址吧:http://bang590.github.io/JSPatchConvertor/,好了,现在补丁你也会打了吧,下面贴出我的补丁代码:
require('UIView, UIColor, UILabel')
defineClass('ViewController', {
genView: function() {
var view = self.ORIGgenView();
view.setBackgroundColor(UIColor.greenColor())
var label = UILabel.alloc().initWithFrame(view.frame());
label.setText("JSPatch");
label.setTextAlignment(1);
view.addSubview(label);
return view;
},
touchesBegan_withEvent: function(touches, event) {
self.genView();
},
});
那么下面就是将这个打好的补丁上传到JSPatch官网了,前提是你已经注册了,新建一个应用,然后点击发布补丁(具体怎么注册,怎么创建应用我就不说了,这个挺简单的,而且你必须先注册才能拿到这个key):
8F9B9BDF-8E8D-45FA-9A44-FA1DED465FB9.png好了,最后运行项目之后点击屏幕,你会发现下面的界面:
E9627F12-6D80-4EE7-807E-85D75618DEA3.png而且最重要的是,不会崩溃了,我这里的处理是 弹出一个绿色的View出来,上面放了一个Label,你想怎么处理,当然看你打的补丁怎么做了,好了,今天就说到这里了,有啥不懂得可以留言哦,不过我不一定会的(嘿嘿)。
对了,还有个demo地址:
https://github.com/wxh794708907/YJYYJSPatchTestDemo.git
网友评论