iOS开发插件推荐(1):利用神插件injectionforxcode倍增你的开发效率
2016-05-23 09:41
656 查看
前言
这款插件曾经被我扔到了垃圾堆,直到最近UI部门要联调App,为了改一个像素,改个颜色,我不得不修改代码,停止运行,再重启模拟器,再一个页面页面的跳转到调试所在页面,其实崩溃的不是代码不是代码,是我是我是我。。。还好我想起了它,还好有Github,否则我将追悔莫及,恨一万年都不够。今天就跟大家介绍这款神级插件
injectionforxcode。
神奇之处
在程序运行过程中插入OC/Swift代码,不需要重启模拟器就可以查看模拟器运行效果。
injected.gif
开门请神
跟安装其他插件的方式一样,推荐使用Alcatraz插件管理器安装。打开Xcode我们可以看到Product菜单下多出了如下两个选项代表你请神成功了。
Paste_Image.png
召唤神
1.在APP运行过程中修改代码,比如在controller中加入以下方法- (void)injected { NSLog(@"I've been injected: %@", self); }
2.按下
ctrl+
=,有没有出现一个加载的进度???有的话,说明你插件安装成功,马上你就可以看到控制台打印了I've been injected
。是不是很神奇,如果你不这么觉得我就敢说你是神经病。
拜拜神,给你带来财富
现在你可以尝试在在代码插入任何代码了,记住按ctrl+
=召唤神,让模拟器立刻响应你的代码变化吧,看看神是如何神奇地提高你的调试效率的。
它为什么这么神
它通过解析应用的build日志来判断源代码文件上次是怎么被编译的。然后会把这些重新编译一遍包在一个已经通过动态加载器(dynamic loader)注入到应用的
bundle里。这个时候其实有两个版本的类在app里,一个原始的和一个修改过的版本。修改过的版本通过转发
"swizzled"作用在原来的类上来产生效果。
这个
swizzling技巧事实上利用了OC的运行时绑定方法调用和方法实现的来达到目的。这个也可以在Swift中没有标记为
final或者
private的方法(比如可以被
override的方法)。
原理图
yuan'li'tu
提供的技能
它提供了三个实现回调的方法1.- (void)injected实例方法。它可以让我们按下
ctrl+
=更新一个类。比如在该方法里调用viewDidLoad方法,就可以再次调用控制器的viewDidLoad方法。
2.+ (void)injected类方法,可以让我们更新全局函数。
3.监听名为
INJECTION_BUNDLE_NOTIFICATION的通知,因此我们可以让其他类监听该通知。
4.使用tunable_parameters
Paste_Image.png
神是万能的
1.我其实还支持StoryboardStoryboard-based iOS projects.
2.我其实也可以可视化的调整颜色
collection of tunable parameters
3.当你开始注入时,我会在同一个目录下生成一个项目文件:iOSInjectionProject 或者 OSXInjectionProject。这个项目用于注入你的修改到原项目。建议加入.gitignore。
4.
ctrl+``=的快捷键可以在 "Tunable App Parameters"面板里自定义
5.如果想在一台设备上使用,参考这个文档patch to your project..
低调低调,你知道我很神就行了。
神仙下凡时
我再神也要下凡的啊,不要笑话就行啊,看看就得了,敢笑话我?我就让你写的程序一直有bug,一直有一直有Z Z Z 。
Paste_Image.png
1.为了防止出现两个单例(之前提到swizzle会创建一个相同的类),shared前缀修饰的类方式不能注入代码。
2.dispatch_on_main方法不能注入。
3.第三点我看不懂,不知道怎么翻译,可以去Github看起官方原文,不好意西。
找到此神
GitHub :Injection Plugin for Xcode作者twitter :@orta
作者亲自录的教程(英文) :
https://www.youtube.com/watch?v=uftvtmyZ8TM&feature=youtu.be
补充
给你介绍这么好的东西,你不需要谢谢我,不要给我打赏,千万不要,你要是打赏了,我一定不会。。。手软。文/jackiehoo(简书作者)
原文链接:http://www.jianshu.com/p/070d8b1a6190
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 讲解iOS开发中基本的定位功能实现
- iOS中定位当前位置坐标及转换为火星坐标的方法
- js判断客户端是iOS还是Android等移动终端的方法
- iOS应用开发中AFNetworking库的常用HTTP操作方法小结
- iOS应用中UISearchDisplayController搜索效果的用法
- IOS开发环境windows化攻略
- iOS应用中UITableView左滑自定义选项及批量删除的实现
- iOS中UIAlertView警告框组件的使用教程
- iOS开发之路--微博“更多”页面
- 浅析iOS应用开发中线程间的通信与线程安全问题
- 检测iOS设备是否越狱的方法
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?