我们在调试iOS原生代码时,每次修改都需要Command+R来重新编译运行。当项目代码量很大,编译时间就会很漫长。因此对于开发中来说,如果能加快编译速度,能大大提高生产效率。如果我们能像Swift Playground、小程序或网页那样修改代码后能实时在界面上反馈出来就好了。然鹅,还真的有这样的Xcode插件,让你可以修改代码后立即在模拟器或真机上看到改变,它便是Injection for Xcode,这是官方的演示效果:

安装

可以通过Alcatraz、或直接在github上clone下来,然后build InjectionPluginLite/InjectionPlugin.xcodeproj。最简单的就是到App Store下载安装即可。(注意安装时先退出Xcode,安装完成后再打开Xcode,以保证Xcode能顺利加载插件)

使用方法

  1. 运行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}
  1. 最后在需要实时监听修改的地方重写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编译速度相关推荐

  1. 转: 加快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/ 加快 ...

  2. iOS进阶--提高XCode编译速度、Xcode卡顿解决方案

    提升编译链接的速度主要有以下三个方式: 1. 提高XCode编译时使用的线程数 defaults write com.apple.Xcode PBXNumberOfParallelBuildSubta ...

  3. [CB]加快BCB编译速度

    我玩电脑有3年了,被比尔盖次折磨成了老手. 做为老手最讨厌重装系统尤其是格式化后得化6个小时完全装好. 所以就备份System目录然后备份注册表,每装一个软件备份一次注册表,每各一星期再备份一次注册表 ...

  4. VS加快程序编译速度——以VS2013为例

    目录 前言 方法介绍: 附录 原文: https://blog.csdn.net/amusi1994/article/details/53679140 前言 由于当前项目包含了很大.cpp文件,以至于 ...

  5. 加快linux编译速度,Linux Makefile 编译速度的优化【转】

    前言 如何提高 Makefile 的编译速度呢?既然是提高,那肯定是对于大项目而言,因为小项目本身源文件不多,Makefile 优化与否,对于编译速度而言,影响并不大.当然对于那些追求速度达到极致的人 ...

  6. 加快android编译速度

    一.修改运行内存 进入项目,菜单栏-help-Edit Custom VM Option Paste_Image.png 添加或修改为: -Xms2048m -Xmx2048m -XX:MaxPerm ...

  7. IDEA加快maven编译速度

    IDEA的maven设置里面,将线程数设置为8,这个时候maven将使用多线程编译,速度会更快,我这边实测,速度大概快了3倍

  8. Ubuntu 22.04​下加快rust的编译速度

    在学习Rust的时候,相信不少人和我一样一直受Rust编译慢的问题困扰.最近阅读一篇写得相当不错的英文博客<Tips for Faster Rust Compile Times>,加上最近 ...

  9. xcode修改时间后就要重新编译_iOS 微信编译速度优化分享

    前言 岁月真是个养猪场,这几年,人胖了,微信代码也翻了.记得 14 年转岗来微信时,用自己笔记本编译微信工程才十来分钟.如今用公司配的 17 年款 27-inch iMac 编译要接近半小时:偶然间更 ...

最新文章

  1. 为开源软件评级—商业就绪分级(BRR)模型
  2. python lol脚本_配台电脑,能玩LOL顶配和能够写一些python脚本能用ps不卡,预算6k到8k?...
  3. 当下网络营销市场中为何企业可通过网络营销提升自我价值?
  4. html的frame加背景图片,tkinter第二章(添加图片,背景图片)
  5. 高通发布一系列新型WiFi芯片:兼容WiFi 6技术
  6. C++ MFC实现基于RFID读写器的上位机软件
  7. 室内声场计算机模拟的声线跟踪法和虚声源法,基于声线跟踪法的室外声场仿真.doc...
  8. java resource和,java_spring之Autowired与Resource差异解析
  9. 冲刺CCNA2.0(200-120)认证考试TK视频讲解
  10. 【配置关系】—Entity Framework实例详解
  11. Notepad++使用心得和特色功能介绍
  12. 10个基础且实用的C语言经典实例【附源码】
  13. GitKraken 比较好用的 Git 可视化工具
  14. 借用计算机简谱,电脑编辑打印简谱之路怎么走——“电脑简谱助手”操作系列谈之二...
  15. dbm与mysql_关于dBm与功率转换
  16. kinit什么意思_kerberos入坑指南
  17. kali中netspeed的安装方法
  18. 小红书去水印源码算法
  19. Java十年 十大组织
  20. 软件项目管理实践经验谈

热门文章

  1. Linux ISCSI配置
  2. git review devops过程
  3. 1月12号 UIView
  4. 12月3号条件控制语句和循环语句
  5. DotNET(C#) Socket基本编程 (1)
  6. C# Idioms: Enum还是Enum Class(枚举类)
  7. ASP.NET实现数据图表
  8. 在Win 2003中配置ASP.net环境
  9. 从FFmpeg 4. 2源码中提取dshow mjpeg code步骤
  10. 矩阵特征分解介绍及雅克比(Jacobi)方法实现特征值和特征向量的求解(C++/OpenCV/Eigen)