iOS

iOS Injection极速编译

2019-08-28  本文已影响0人  某非著名程序员

Injection可以做到不用重新编译代码就可以看到结果。对于调试细节能节省很多时间。


效果展示

Injection使用步骤、Xcode版本10.2.1
1.AppStore下载Injectionlll
2.在didFinishLaunchingWithOptions添加下面代码

#if DEBUG
    BOOL loadSuccess = [[NSBundle bundleWithPath:@"/Applications/InjectionIII.app/Contents/Resources/iOSInjection.bundle"] load];
    NSLog(@"loadSuccess");
#endif

3.在需要变更的类中添加injected

- (void)injected{
    [self viewDidLoad];
}

4.变更后直接Ctrl+S.非常方便。

实现原理
Injection会监听源代码文件的变化,如果文件被改动了,Injection Server就会执行rebuildClass重新进行编译、打包成动态库,也就是.dylib。
dlopen会把tmpfile动态库文件载入运行的App里,返回指针dl。接下来,dlsym会得到tmpfile动态库的符号地址,然后就可以处理类的替换工作。
当类的方法都被替换后,我们就可以开始重新绘制界面了。整个过程无需重新编译和重启App,至此使用动态库方式极速调试的目的就达成了。

Injection缺点
1.对于简单的变更效率是非常高的,如果是复杂的操作,还是要重新编译的。
2.对于新增文件、或xib拖入的变量,可能会产生崩溃。感觉不是很稳定。
3.对于OC与Swift混编的,支持的也不如人意。

总结:
1.对于电脑配置不是很高,而项目又比较大的同学,真是省时省力。同样对于调试细节的同学也有极大的帮助。
2.希望工具越来越完善,有任何问题欢迎留言评论

参考文章:《戴铭 高手课》第6章App如何通过注入动态库的方式实现极速编译调试。

上一篇 下一篇

猜你喜欢

热点阅读