您的位置:首页 > 移动开发 > IOS开发

使用JSPatch实现iOS APP动态更新

2016-10-15 14:34 615 查看
经常碰到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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios app JSPatch