IOS热重载工具InjectionIII

支持 OC、Swift 以及 Swift 和 OC 混编项目的 UI 热重载工具,采取在模拟器(真机不支持)注入方式实现 UI 热重载,修改完 UI 直接 cmd + s,不用重新编译运行就能看到 UI 效果。 Github

安装

github 下载最新 release 版本,或者 AppStore 下载安装即可,推荐 github 下载安装,github 更新比 AppStore 更新快。如果项目使用混编 OC 时,建议使用 github 的 releases 版本。

安装过后打开,点击 open project

并且勾选File Watcher

项目配置

AppDelegate 配置,在 didFinishLaunchingWithOptions 配置注入。 需要注意,先打开 InjectionIIIResources 路径,确认 bundle 文件的正确路径

  • OC
#if DEBUG
// iOS
[[NSBundle bundleWithPath:@"/Applications/InjectionIII.app/Contents/Resources/iOSInjection.bundle"] load]; // 同时还支持 tvOS 和 MacOS,配置时只需要在 /Applications/InjectionIII.app/Contents/Resources/ 目录下找到对应的 bundle 文件,替换路径即可
#endif
  • Swift
#if DEBUG
do {
let injectionBundle = Bundle.init(path: "/Applications/InjectionIII.app/Contents/Resources/iOSInjection.bundle")
if let bundle = injectionBundle{
try bundle.loadAndReturnError()
} else {
debugPrint("Injection 注入失败,未能检测到 Injection")
} } catch {
debugPrint("Injection 注入失败 \(error)")
}
#endif

启动项目

此时启动项目,在控制台可以看到,表示注入成功了,如果有多个项目都在使用 Injection,需要查看 Injection 链接路径是否正确,如果不正确,打开 Injection 菜单 -Open Recent- 选择需要注入的项目即可。

页面文件配置

在需要热重载的页面 VC 中,实现 injected 方法,把操作 UI 方法添加到 injected 中即可。以 Swift 为例,比如 UI 操作都在 VC 的 viewDidLoad 中,那么就在 injected 添加 viewDidLoad 方法即可。如果项目都想使用,直接添加到 VC的基类 即可。

   @objc func injected()  {
#if DEBUG
self.viewDidLoad()
#endif
}

在 UI 阶段,修改外 UI,直接 cmd + s 就能看到效果,相当于保存之后就会走到injected方法,重新构建UI

额外配置

如果想对 final 方法和 structs 方法热重载,在 Build Settings - Other Linker Flags 中加入 -Xlinker,-interposable

限制

  • 它只支持模拟器,不支持真机
  • 不能增加或删除存储类型的属性和方法,如果有这种情况需要重新编译运行
  • 可以修改class、enum、struct 的成员方法的实现,但如果是inline函数则不行,如果有这种情况需要重新编译运行。

示例

IOS热重载工具InjectionIII的更多相关文章

  1. Xcode辅助工具之热重载插件利器

    该博客首发于github.io 2018-06-13 13:43:44 文章最新修改于: 2019-03-31 13:47:20 昨天刚刚看完iOSTips微信公众号推送的文章, Injection: ...

  2. 【译】在运行时编辑代码的 .NET 热重载

    今天,我们很高兴向你介绍 Visual Studio 2019 中 16.11(预览版1)中的 .NET 热重载(通过 .NET 6(预览版4)中的 dotnet watch 命令行工具).在这篇文章 ...

  3. 最新的.NET 热重载介绍

    今天,我们很高兴的向您介绍 Visual Studio 2019 版本 16.11(预览版 1)和 .NET 6 中的 dotnet watch 命令行工具(预览版 4)中的 .NET 热重载体验的可 ...

  4. KSFramework:集成U3D热重载框架 - README

    KSFramework KEngine + SLua+ Framework = KSFramework KSFramework是一个整合KEngine.SLua的Unity 5开发框架,并为程序.美术 ...

  5. webpack之带有可自动打开浏览器及热重载的基本配置

    什么是Webpack WebPack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript等),并 ...

  6. iOS热更新实现方式

    heart.jpg 苹果静止热更新,可惜我的是企业app,没有这些约束了,随便用.(当然有些热更新已经可以通过苹果审核了,比如JSPatch)官网说的: JSPatch 平台 SDK 1.7.2 以上 ...

  7. Flutter 不能热加载,热重载按钮灰色,无法点击,flutter doctor 显示NO_PROXY is not set

    一.现象: Flutter 不能热加载 热重载按钮灰色,无法点击. 二.分析原因: 终端 flutter doctor 显示 NO_PROXY is not set 没有设置无代理的端口 终端:flu ...

  8. GO学习-(37) 使用Air实现Go程序实时热重载

    使用Air实现Go程序实时热重载 今天我们要介绍一个神器--Air能够实时监听项目的代码文件,在代码发生变更之后自动重新编译并执行,大大提高gin框架项目的开发效率. 为什么需要实时加载? 之前使用P ...

  9. 【Unity】Lua热重载

    写在前面 本文讨论的"Lua热重载"是基于他人现成工具和相关博文上展开的,所以这里并不会重复实现一遍工具,主要记录我的理解过程. Lua热重载 探索 偶然在知乎上翻到一篇文章&qu ...

  10. iOS第三方库管理工具

    作者:彷徨iOS 原文地址1:http://iostree.sinaapp.com/?p=78 原文地址2:http://blog.csdn.net/wzzvictory/article/detail ...

随机推荐

  1. Project: Kill e

    接到上级任务,今天来暗杀 \(e\) 据说杀死 \(e\) 的方式就是把他算出来,好吧,现在我们还是来算一下 考虑使用如下代数式求解 \[e\ \text{site:baidu.com} \] 虽然我 ...

  2. 智和信通搭建高可靠、真稳定IT运维平台,助力能源行业高效生产

    在能源企业信息化高度发展的背景下,北京智和信通有限公司推出全栈式运维管控平台--"智和网管平台",助力能源企业搭建高可靠.真稳定的IT运维平台,实现高效稳定生产. 信息化飞速发展, ...

  3. Ant Design Vue 在表格中插入图片

    这两天一直在用 Antdv 做一些小 demo,今天在做表格的时候想在表格中插入图片,简单翻了下文档和国内的博客,发现所有的方法竟然都不好使,最后还是在官网的示例代码中看到相关的部分,不得不说这种 u ...

  4. [rCore学习笔记 029] 动态内存分配器实现-以buddy_system_allocator源码为例

    在上一部分,我们讲了动态内存分配器的原理是维护一个堆,而且是实现各种连续内存分配方法. 但是上一部分是直接通过引用了buddy_system_allocator来解决的问题. 那么对于内存分配算法有兴 ...

  5. 精彩回顾|【ACDU 中国行·杭州站】数据库主题交流活动成功举办!

    8月19日下午,[ACDU 中国行·杭州站]在杭州西溪万怡酒店圆满落下帷幕.本次活动由中国数据库联盟(ACDU)联合墨天轮社区主办,蚂蚁集团 OceanBase 及亚信科技 AntDB 赞助支持.六位 ...

  6. Springboot --- 使用国内的 AI 大模型 对话

    实在是不知道标题写什么了 可以在评论区给个建议哈哈哈哈 先用这个作为标题吧 尝试使用 国内给出的 AI 大模型做出一个 可以和 AI 对话的 网站出来 使用 智普AI 只能 在控制台中输出 对应的信息 ...

  7. 探索 Kubernetes 持久化存储之 Longhorn 初窥门径

    作者:运维有术星主 在 Kubernetes 生态系统中,持久化存储扮演着至关重要的角色,它是支撑业务应用稳定运行的基石.对于那些选择自建 Kubernetes 集群的运维架构师而言,选择合适的后端持 ...

  8. 揭秘!KubeSphere 背后的“超级大脑”:etcd 的魅力与力量

    作者:尹珉,KubeSphere Ambassador & Contributor,KubeSphere 社区用户委员会杭州站站长. 1. 开篇:揭开神秘面纱,etcd 如何驱动 KubeSp ...

  9. 洛谷 P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布

    题目大意 小A和小B,要进行 \(N\) 次猜拳,每次按照一定周期出拳,胜负情况如下: 求出小A和小B分别赢了几次. 思路 枚举 \(N\) 次猜拳,每次比较 \(a[powera]\) 与 \(b[ ...

  10. 需求解决 _按需要对控件进行禁用和解除禁用 _CSS _20210922

    需求解决 _按需要对控件进行禁用和解除禁用 _CSS _20210922 通过JQuery 或者其他方式的选择器 获取DOM节点 再通过一下的方式 设置 disabled属性为 true 即可禁用,为 ...