项目需要后台来控制某个控制器下的某个方法,上架前可能显示的内容不符合产品需求又不想重新上传一个二进制文件重新审核。利用后台传过来的js字符串,来修改OC某个控制器中的某个特定方法。此类做法类似于热更新,但是并没有下载更新文件只是获取js字符串。主要原理是利用oc和JavaScript交互,oc的rutime机制来实现替换某个方法。(本人也是刚接触Aspects,如有其他问题请在评论指出)
1.首先这是js文件,打开sublime,保存为js文件格式。
SimpleW_NewsViewController---这个是你想要更改的控制器
setRootVC---这个是你要修改的方法
1---表示方法执行前后顺序
后面的function是替换之后的方法,instance对应的是SimpleW_NewsViewController,invocation对应的是方法setRootVC
var self;
fixMethod('SimpleW_NewsViewController','setRootVC:',1,function(instance,invocation,arg){
runInvocation(invocation);// 执行原来的function
self = instance;
var bottomView = runInstanceMethod(self,'bottomImg');
runInstanceMethod(bottomView,'setHidden:','0');
});
// 0 方法执行之后替换方法 1 是方法正在执行的时候替换方法 2 方法执行之前替换方法
fixMethod('SimpleW_NewsViewController','viewDidLoad',0,function(instance,invocation,arg){
runInvocation(invocation);
self = instance;
var bottomView = runInstanceMethod(self,'bottomImg');
runInstanceMethod(bottomView,'setHidden:','0');
});
2.调用与实现在Appdelegate里,这里需要用到LYFix这个工具。
string---后台写好的js字符串,格式一定要对,否则运行没效果
[LYFix Fix];
[LYFixevalString:string];