使用JSPatch实现iOS APP动态更新
2016-10-15 14:34
615 查看
经常碰到APP刚发布,由于一些bug或者界面的改动又要重新发布APP,并提醒用户进行更新(大多用户不愿更新);这样不但需要付出巨大人力和时间成本,关键用户体验也不好;
使用JSPatch可以解决这样的问题,首先需要在项目中引入JSPatch,等需要更新时只要下发JS脚本补丁,在这个.js文件里实现相应的方法来替换原生方法就可以实现用户不用更新APP来修改bug或一些界面的微调。
实现方法:
1.导入JSPatch:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202010/15/f2c0c61c72c3b3cc41e955b573a83125)
2.在APPDelegate.m中初始化配置文件:
@implementation AppDelegate
- (BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions
{
//JSPatch动态更新APP(设备详情界面)
[self updateInverterViewController];
….
return YES;
}
[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
使用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 使用JSPatch实现APP线上修复的热更新
- iOS通过 JSPatch实现 app的热更新
- JSPatch – 动态更新iOS APP
- IOS-使用framework实现功能模块动态更新
- JSPatch – 动态更新iOS APP
- JSPatch – 动态更新iOS APP
- LUA实现iOS APP动态更新
- JSPatch – 动态更新iOS APP
- IOS-使用framework实现功能模块动态更新
- iOS使用lua语言的使用步骤与实现插件的动态更新
- JSPatch – 动态更新iOS APP
- JSPatch - 动态更新iOS APP
- JSPatch: iOS App 动态更新服务平台
- JSPatch – 动态更新iOS APP
- JSPatch – 动态更新iOS APP
- IOS-使用framework实现功能模块动态更新
- JSPatch – 动态更新iOS APP
- 提交至APP STORE的APP和APP更新必须使用Xcode5.1.1(或更高级版本)及ios 7 sdk进行构建
- 利用ios的hook机制实现adobe air ios ane下appdelegate的动态替换