SwiftiOS开发新发现利器集合

Injection for Xcode:成吨的提高开发效率

2016-03-11  本文已影响15630人  没故事的卓同学

今天强烈推荐一个Xcode高端必备插件: Injection Plugin for Xcode
直接放demo演示动图:

Injection Plugin for Xcode
我很久以前就希望有这么一种功能,直接修改某行代码,F5一下就能刷新这个实例,而不用重写build整个项目。靠夭,我不是在说前端!
没想居然有一天,梦想照入现实!!!是的,就是它,不用重新启动应用就可以让修改的代码生效。

使用

超级简单:修改源码,按下刷新的快捷键<code>ctrl</code>+<code>=</code>。会有一个快速的进度条闪过,修改的代码就生效了。

安装

检验安装成功

在某个类里添加下面的方法:
<pre><code>

}
</code></pre>
或者swift下:
<pre><code>
func injected() {

print("I've been injected: (self)")

}
</code></pre>
打一个断点在这行代码上,按下快捷键ctrl+=后,代码执行到这个类时,如果断点进入这个方法说明你已经安装成功了。

支持Swift

Swift中的大部分类都可以正常使用。不过以下一些情况使用会有问题:

工作原理

Injection是一个Xcode的扩展插件,可以让你修改一个类的代码实现而不用重启整个应用。

它通过解析应用的build日志来判断源代码文件上次是怎么被编译的。然后会把这些重新编译一遍包在一个已经通过动态加载器(dynamic loader)注入到应用的bundle里。这个时候其实有两个版本的类在app里,一个原始的和一个修改过的版本。修改过的版本通过和原始类"swizzled"来产生效果。

swizzling利用了OC的runtime。这个也可以在Swift中没有标记为final或者private的方法(可以被override的方法)。对结构体无效。

这个插件还可以做点什么

我安装时遇到的一个错误

第一次使用,提示我项目里使用的一个第三方framework找不到。这个时候打开它自动生成的iOSInjectionProject,编译一下可以看到错误的具体原因。我看到issue里也好多人遇到。解决方式就是将自己项目framework search paths中的这个第三方框架的路径拷贝到iOSInjectionProject里。

欢迎关注我的微博:@没故事的卓同学

上一篇下一篇

猜你喜欢

热点阅读