其实从接触 iOS 以来一直有个期望,就是可以像 HTML 一样可以快速刷新应用实例,而不用一遍一遍的 Build。

如果你不抓紧,总有些人会实现你的梦想,今天要介绍的 Injection for Xcode 就是为这样的快速刷新而生的。事实上 Injection 是一个 Xcode 插件,它会解析应用的 build 日志,然后将重新编译的内容放入一个 bundle 中,而这个 bundle 已经通过 dynamic loader 载入到应用中。原始版本与修改后的版本其实是共存的,Injection 通过 swizzling 来产生我们所看到的效果。

它的使用也十分简单,启动 InjectionPluginLite/InjectionPlugin.xcodeproj 项目后直接 Build 然后重启 Xcode即可,Xcode 会提示是否加载插件,选择 Load Bundle。

现在,随便启动一个项目,在某各类例如控制器中,加入下面代码:


- (void)injected {
	// injected!!
}

+ R 运行你的项目,接下来将刚才代码的注释部分替换成随便什么代码,比如一个 UIAlertView。

然后,见证奇迹的时刻!按下 + = ,再看看应用的变化吧。

上效果图:

injection

当然 Injection 也是有局限性的,这一点从它的实现原理上就能看出来了。在这些情况下 Injection 会发生一些问题:

  • Swift 结构体的修改

  • Swift 中 final 修饰的方法和类的修改

  • Swift 中不在类中的全局函数和变量的修改