使用JSPatch实现iOS APP动态更新

来源:互联网 发布:dota狐狸妈黑历史 知乎 编辑:程序博客网 时间:2024/05/16 10:58

经常碰到APP刚发布,由于一些bug或者界面的改动又要重新发布APP,并提醒用户进行更新(大多用户不愿更新);这样不但需要付出巨大人力和时间成本,关键用户体验也不好;
使用JSPatch可以解决这样的问题,首先需要在项目中引入JSPatch,等需要更新时只要下发JS脚本补丁,在这个.js文件里实现相应的方法来替换原生方法就可以实现用户不用更新APP来修改bug或一些界面的微调。
实现方法:
1.导入JSPatch:
这里写图片描述

2.在APPDelegate.m中初始化配置文件:

@implementation AppDelegate
- (BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions
{
//JSPatch动态更新APP(设备详情界面)
[self updateInverterViewController];
….
return YES;
}

pragma mark 动态更新APP(设备详情界面)

-(void)updateInverterViewController{
[JPEngine startEngine];
//把.js文件放在远程服务器上
// [NSURLConnection sendAsynchronousRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@”文件地址”]] queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
// NSString *script = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
// if (script) {
// [JPEngine evaluateScript:script];
// }
// }];
//.js文件放在本地
NSString *sourcePath = [[NSBundle mainBundle] pathForResource:@”JSPatchForInverterViewController” ofType:@”js”];
NSString *script = [NSString stringWithContentsOfFile:sourcePath encoding:NSUTF8StringEncoding error:nil];
[JPEngine evaluateScript:script];
}
3.在.js文件里写要修改的内容
defineClass(‘DeviceMainViewController’, {//DeviceMainViewController为要修改的类名
didArrayOfBtnClick:function(BtnTag){//didArrayOfBtnClick:为要修改的方法,BtnTag为方法的参数(没有类型之分)
if(self.sensor()==9987){//当该类的一个属性满足某个条件后对另一个属性的值进行修改
if (BtnTag==101) {
self.setMenuArray([
[[“直流输入电流PV1”,”DCPV1”],[“直流输入电流PV1”,”DCPV1”],[“直流输入电流PV1”,”DCPV1”],[“直流输入电流PV1”,”DCPV1”]],
[[“直流输入电流PV2”,”DCPV2”],[“直流输入电流PV2”,”DCPV2”],[“直流输入电流PV2”,”DCPV2”],[“直流输入电流PV2”,”DCPV2”]],
[[“直流输入电流PV3”,”DCPV3”],[“直流输入电流PV3”,”DCPV3”],[“直流输入电流PV3”,”DCPV3”],[“直流输入电流PV3”,”DCPV3”]]])
}
}
},

具体demo请参考:https://github.com/bang590/JSPatch

0 0
原创粉丝点击