lua动态修复线上bug实践(iOS篇)
来源:互联网 发布:unity3d实现场景漫游 编辑:程序博客网 时间:2024/06/06 07:04
lua动态修复线上bug实践(iOS篇)
利用wax框架,wax可以把Lua脚本语言和原生Objective-C应用编程接口(API)结合起来。这意味着,你可以从Lua里面,使用任何和全部的Objective-C类及框架.
1.wax.framework的问题
https://github.com/probablycorey/wax
这个框架已经4年没更新了,而且不支持64位.
用它来替换原来ViewController中函数不生效.
所以替换为
https://github.com/maxfong/WaxPatch_X64
2.把wax框架拉进去还是运行不了,报错
可以看出,错误的意思是 TCPServerErrorDomain这个标志在wax和wax_server中重复定义,
解决:
把在wax_server中的TCPServerErrorDomain注释了.
3.试验动态修复bug.
以改变一个页面的颜色为例,原来显示为白色,现在版本发出去了,我想改变颜色为红色
(1)每次启动app时建立动态加载lua文件的入口(下面写)
然后启动lua文件: wax_start("change.lua", nil);
(2)页面原来有一个方法:
- (void)setBackgroundColor{
NSLog(@"test");
}
如果没有这个方法可以hook其他的方法,然后用lua写一样的实现再加一个改变背景色的方法.
(3)写change.lua改变颜色的方法:
waxClass{"ViewController",UIViewController}
functionsetBackgroundColor(self)
self:view():setBackgroundColor(UIColor:redColor())
end
(4)ok了,运行的时候 setBackgroundColor的方法已经替换成lua修改后的这个方法了
4.建立动态加载lua文件的入口
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {
[selfdownloadLuaFile];
return YES;
}
[selfdownloadLuaFile];
return YES;
}
- (void)downloadLuaFile {
dispatch_async(dispatch_get_main_queue(), ^{
dispatch_async(dispatch_get_main_queue(), ^{
NSString*doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)objectAtIndex:0];
NSString*directory = [doc stringByAppendingPathComponent:@“change.lua"];
NSURL *url=[NSURLURLWithString:@"http://localhost/change.lua"];
NSURLRequest *request=[NSURLRequestrequestWithURL:url];
NSError *error=nil;
NSData *data = [NSURLConnectionsendSynchronousRequest:requestreturningResponse:nilerror:&error];
if([data length]>0)
{
NSLog(@"下载成功");
if([data writeToFile:directoryatomically:YES]){
NSURLRequest *request=[NSURLRequestrequestWithURL:url];
NSError *error=nil;
NSData *data = [NSURLConnectionsendSynchronousRequest:requestreturningResponse:nilerror:&error];
if([data length]>0)
{
NSLog(@"下载成功");
if([data writeToFile:directoryatomically:YES]){
NSLog(@"保存成功");
NSString *luaFilePath = [[NSStringalloc ] initWithFormat:@"%@/?.lua;%@/?/init.lua;%@/?.dat;",doc, doc,doc];
setenv(LUA_PATH, [luaFilePathUTF8String], 1); //差点漏了设置路径
wax_start("change.lua", nil);
}else {
NSLog(@"保存失败");
}
} else {
NSLog(@"下载失败,失败原因:%@",error);
}
});
}else {
NSLog(@"保存失败");
}
} else {
NSLog(@"下载失败,失败原因:%@",error);
}
});
}
5.然后线上版本出现了bug就可以在下发的change.lua文件里修复了.
6.如果是出现了比较复杂的bug怎么办?深入学习lua,理论上什么bug都是可以修复的.
1 0
- lua动态修复线上bug实践(iOS篇)
- iOS线上修复bug
- iOS动态修复App线上Bug 之 JSPatch
- iOS 通过 JSPatch 实时修复线上 bug!
- iOS 通过 JSPatch 实时修复线上 bug!
- beanshell 线上修复BUG
- 使用 Wax 修复 iOS 应用的线上 Bug
- iOS ,不提交审核,修复某些线上bug以及线上更新
- ios 定位线上bug
- Android线上bug热修复分析
- Android线上Bug热修复分析
- Android线上Bug热修复分析
- 基于JSPatch的iOS应用线上Bug的即时修复方案,附源码.
- iOS 动态更新 修复bug jspatch wax总结。
- 价值100W的经验分享: 基于JSPatch的iOS应用线上Bug的即时修复方案,附源码.
- 修复线上问题,引起新的bug-总结
- iOS 使用JSPatch实现APP线上修复的热更新
- iOS 动态改变线上app JSPatch技术
- pdf文件怎么修改图片
- viewWillLayoutSubviews
- ARM与X86架构对比区别
- 调用系统照相机录像和拍照(类微信,QQ)
- Android虚拟机,控制台Console报错几例及解决办法
- lua动态修复线上bug实践(iOS篇)
- IDE、ACHI
- css3 制作动态饼图
- Mac OS X下使用Homebrew安装PNG支持——重新编译PHP
- Android签名详解(debug和release)
- Hbase1.0.0实战(2)连接hbase数据库
- char与byte的区别,java中的Integer的toBinaryString()方法
- JavaScript使用原型创建对象
- 191 Number of 1 Bits