利用Injection插件加快Xcode编译速度
我们在调试iOS原生代码时,每次修改都需要Command+R来重新编译运行。当项目代码量很大,编译时间就会很漫长。因此对于开发中来说,如果能加快编译速度,能大大提高生产效率。如果我们能像Swift Playground、小程序或网页那样修改代码后能实时在界面上反馈出来就好了。然鹅,还真的有这样的Xcode插件,让你可以修改代码后立即在模拟器或真机上看到改变,它便是Injection for Xcode,这是官方的演示效果:
安装
可以通过Alcatraz、或直接在github上clone下来,然后build InjectionPluginLite/InjectionPlugin.xcodeproj。最简单的就是到App Store下载安装即可。(注意安装时先退出Xcode,安装完成后再打开Xcode,以保证Xcode能顺利加载插件)
使用方法
- 运行Injection,然后确保勾选了File Watcher
2.如果用的是Xcode10.2及以上,直接打开项目AppDelegate.m 在didFinishLaunchingWithOptions:中添加代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {// Override point for customization after application launch.#if DEBUG// for iOS[[NSBundle bundleWithPath:@"/Applications/InjectionIII.app/Contents/Resources/iOSInjection10.bundle"] load];// for tvOS[[NSBundle bundleWithPath:@"/Applications/InjectionIII.app/Contents/Resources/tvOSInjection10.bundle"] load];// for masOS[[NSBundle bundleWithPath:@"/Applications/InjectionIII.app/Contents/Resources/macOSInjection10.bundle"] load];
#endifreturn YES;
}
如果是swift:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {// Override point for customization after application launch.#if DEBUGBundle(path: "/Applications/InjectionIII.app/Contents/Resources/iOSInjection10.bundle")?.load()//for tvOS:Bundle(path: "/Applications/InjectionIII.app/Contents/Resources/tvOSInjection10.bundle")?.load()//Or for macOS:Bundle(path: "/Applications/InjectionIII.app/Contents/Resources/macOSInjection10.bundle")?.load()#endifreturn true}
- 最后在需要实时监听修改的地方重写injected方法,如在首页的ViewController.m中:
- (void)injected{
NSLog(@“I’ve been injected: %@”, self);
}
效果
现在运行项目,并调整UI相关的代码,模拟器或真机上面就会立即显示对应的效果。我最近在做一个iPad的项目,涉及UI调试的内容比较多,此时就能高效率地调试项目啦。
例如:原来的图片是yaun.png:
我在重写的injected方法中打了断点,然后把原来的yuan.png改成yi.png:
[yuan setImage:[UIImage imageFileName:@"main_section_button_yuan.png"] forState:0];
改为
[yuan setImage:[UIImage imageFileName:@"main_section_button_yi.png"] forState:0];
修改并Command+s保存后,此时会停到我们上面的断点处:
跳过断点,我们看到界面进行了更新:
原理
在Xcode端,Injection监听源代码的变化,如果有改动,Injection会将对应的类重新编译打包成动态库,也就是.dylib文件,然后通过Socket通知App。App收到消息后,加载动态库,此时会有被修改类的新、旧两个版本,然后利用runtime的方法动态替换,用新类替换旧类,从而达到不用重新编译运行而更新App。
参考
- injectionforxcode官方:https://github.com/johnno1962/injectionforxcode
- https://www.cnblogs.com/li-wei203/p/9851860.html
- 戴铭的iOS开发高手课《App 如何通过注入动态库的方式实现极速编译调
试?》
利用Injection插件加快Xcode编译速度相关推荐
- 转: 加快Android编译速度
转: http://timeszoro.xyz/2015/11/25/%E5%8A%A0%E5%BF%ABandroid%E7%BC%96%E8%AF%91%E9%80%9F%E5%BA%A6/ 加快 ...
- iOS进阶--提高XCode编译速度、Xcode卡顿解决方案
提升编译链接的速度主要有以下三个方式: 1. 提高XCode编译时使用的线程数 defaults write com.apple.Xcode PBXNumberOfParallelBuildSubta ...
- [CB]加快BCB编译速度
我玩电脑有3年了,被比尔盖次折磨成了老手. 做为老手最讨厌重装系统尤其是格式化后得化6个小时完全装好. 所以就备份System目录然后备份注册表,每装一个软件备份一次注册表,每各一星期再备份一次注册表 ...
- VS加快程序编译速度——以VS2013为例
目录 前言 方法介绍: 附录 原文: https://blog.csdn.net/amusi1994/article/details/53679140 前言 由于当前项目包含了很大.cpp文件,以至于 ...
- 加快linux编译速度,Linux Makefile 编译速度的优化【转】
前言 如何提高 Makefile 的编译速度呢?既然是提高,那肯定是对于大项目而言,因为小项目本身源文件不多,Makefile 优化与否,对于编译速度而言,影响并不大.当然对于那些追求速度达到极致的人 ...
- 加快android编译速度
一.修改运行内存 进入项目,菜单栏-help-Edit Custom VM Option Paste_Image.png 添加或修改为: -Xms2048m -Xmx2048m -XX:MaxPerm ...
- IDEA加快maven编译速度
IDEA的maven设置里面,将线程数设置为8,这个时候maven将使用多线程编译,速度会更快,我这边实测,速度大概快了3倍
- Ubuntu 22.04下加快rust的编译速度
在学习Rust的时候,相信不少人和我一样一直受Rust编译慢的问题困扰.最近阅读一篇写得相当不错的英文博客<Tips for Faster Rust Compile Times>,加上最近 ...
- xcode修改时间后就要重新编译_iOS 微信编译速度优化分享
前言 岁月真是个养猪场,这几年,人胖了,微信代码也翻了.记得 14 年转岗来微信时,用自己笔记本编译微信工程才十来分钟.如今用公司配的 17 年款 27-inch iMac 编译要接近半小时:偶然间更 ...
最新文章
- 为开源软件评级—商业就绪分级(BRR)模型
- python lol脚本_配台电脑,能玩LOL顶配和能够写一些python脚本能用ps不卡,预算6k到8k?...
- 当下网络营销市场中为何企业可通过网络营销提升自我价值?
- html的frame加背景图片,tkinter第二章(添加图片,背景图片)
- 高通发布一系列新型WiFi芯片:兼容WiFi 6技术
- C++ MFC实现基于RFID读写器的上位机软件
- 室内声场计算机模拟的声线跟踪法和虚声源法,基于声线跟踪法的室外声场仿真.doc...
- java resource和,java_spring之Autowired与Resource差异解析
- 冲刺CCNA2.0(200-120)认证考试TK视频讲解
- 【配置关系】—Entity Framework实例详解
- Notepad++使用心得和特色功能介绍
- 10个基础且实用的C语言经典实例【附源码】
- GitKraken 比较好用的 Git 可视化工具
- 借用计算机简谱,电脑编辑打印简谱之路怎么走——“电脑简谱助手”操作系列谈之二...
- dbm与mysql_关于dBm与功率转换
- kinit什么意思_kerberos入坑指南
- kali中netspeed的安装方法
- 小红书去水印源码算法
- Java十年 十大组织
- 软件项目管理实践经验谈
热门文章
- Linux ISCSI配置
- git review devops过程
- 1月12号 UIView
- 12月3号条件控制语句和循环语句
- DotNET(C#) Socket基本编程 (1)
- C# Idioms: Enum还是Enum Class(枚举类)
- ASP.NET实现数据图表
- 在Win 2003中配置ASP.net环境
- 从FFmpeg 4. 2源码中提取dshow mjpeg code步骤
- 矩阵特征分解介绍及雅克比(Jacobi)方法实现特征值和特征向量的求解(C++/OpenCV/Eigen)