- 我很久以前就希望有这么一种功能,直接修改某行代码,F5一下就能刷新这个实例,而不用重写build整个项目。靠夭,我不是在说前端!
- 没想居然有一天,梦想照入现实!!!是的,就是它,不用重新启动应用就可以让修改的代码生效。
- 使用
- 超级简单:修改源码,按下刷新的快捷键ctrl+=。会有一个快速的进度条闪过,修改的代码就**生效了。**
njection Plugin For Xcode 是 Xcode 上的一个插件。利用它可以修改应用代码,实时在模拟器或实机上看到效果而不需要重启应用。
安装
点此下载 Injection Plugin for Xcode。安装后,重启Xcode,会发现在 Product 菜单下多了两个选项:
点击 Product > 你的工程名 > Patch Project for Injection 选项, 之后插件会在 main.m 中插入两段代码。这不会影响程序原有代码,如果要还原,随时可以通过点击 Revert Injection’s Changes 选项来还原。
基本使用
我们做一个很简单的应用,其有一个 UIButton 和一个 UILabel,当点击 button 后,label 显示一段文本,ViewController 的代码如下:
1 2 3 4 5 6 7 8 9 |
@interface ViewController () @property (weak, nonatomic) IBOutlet UILabel *label; @end @implementation ViewController - (IBAction)buttonTouched:(id)sender { self.label.text = @"阿布上班不为了钱"; } @end |
运行后,点击按钮,效果如图所示:
之后我们修改代码,将赋给 label 的字符串改为:
self.label.text = @"阿布钱多到花不完";
但区别于一般的使用 CMD+R 来重新编译并运行程序,这次我们使用 control+= 这个快捷键来注入。你会发现代码上方出现一个进度条:
注入完成后,修改的类的代码就生效了,点击模拟器中应用的按钮试试。
真机调试
另外,我们想要真机调度,网上说添加脚本这些,我试了都不行。另外找到了解决方法
由于我们在模拟器里运行了,可以看到目录下多了一个文件夹。
第一步:
点击”Patch Project for Injection“,插入真机的相关代码。如果下次我们不需要真机调试了,直接点击”Revert Injection's Changes“就可以消除了。
插入的相关代码,我们可以在main.m文件中看到,如下图:
模拟器control+=可以正常使用该插件
真机使用这插件的时候现在仍存在问题,
遇到*** Could not codesign as 'iPhone Developer: juan chen (ZYE2H393WW)': /Users/wdwk/Desktop/Test12/iOSInjectionProject/build/Debug-iphoneos/InjectionBundle30.bundle ***的问题吗?我在模拟器上能够正常使用,但是在真机上就出现了这样的问题,我使用echo "$CODESIGNING_FOLDER_PATH" >/tmp/"$USER.ident" && echo "$CODE_SIGN_IDENTITY" >>/tmp/"$USER.ident" && exit;脚本在identity.txt文件中添加了证书之后,问题仍然存在,如果有好方法的朋友请指教
建议使用xcode8之后插件使用二文章中的方法更为简洁!http://www.code4app.com/blog-797524-936.html