injectionIII iOS代码注入工具(下)
injectionIII iOS代码注入工具(下)
本文将解决如何使用injectionIII对主页热重载,如果对injectionIII不了解的同学请回到上篇查看
Vaccine
简单地说Vaccine其实是injectionIII的注入功能无法注入的地方通过它来进行实现,从整体上观看Vaccine整个框架的文件结构来看,里面有很多的extension的文件。
Vaccine可以用Cocoapods或者Carthage,也可以手动导入项目中的Source
文件夹。
pod 'Vaccine'
github "zenangst/Vaccine"
Vaccine样例解析
项目中提供了一个样例项目,按照下面的步骤配置即可
- Install InjectionIII from the Mac App Store
- git clone git@github.com:zenangst/Vaccine.git
- Run pod install in Example/VaccineDemo/
- Open and run VaccineDemo.xcworkspace
- Select the demo project when InjectionIII wants you to select a folder.
- Start having fun
(不会有人看不懂吧)
这里我们在此项目开始解决文章开头提出的问题:对主页热重载。
先展示在AppDelegate中的关键代码:
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
Injection.load(then: loadApp).add(observer: self, with: #selector(injected(_:)))
return true
}
private func loadApp() {
//新建HomeVC
//配置self.window
}
private func configureApperance() {
UINavigationBar.appearance().barStyle = .default
UINavigationBar.appearance().tintColor = .blue
}
@objc open func injected(_ notification: Notification) {
/*
TODO: Uncomment line 69 to 70 to change the device resolution you want to test with.
This will also reload the application by invoking `loadApp()` which creates a new main window.
*/
//screenBounds = UIScreen.device(.iPhoneX(orientation: nil))
//loadApp()
/*
TODO: Uncomment line 76 to 92 to show detail controller on each injection.
Animations are temporarely disabled for a better debugging environment.
*/
// guard let flowController = flowController,
// let listController = listViewController else { return }
//
// let contact = Contact(firstName: "John",
// lastName: "Appleseed",
// phoneNumbers: [
// "(888) 555-5512",
// "(888) 555-1212"],
// emails: ["John-Appleseed@mac.com"],
// notes: "Some notes"
// )
//
// UIView.setAnimationsEnabled(false)
// flowController.listViewController(listController, didSelect: contact)
// DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
// UIView.setAnimationsEnabled(true)
// }
}
}
样例中,Vaccine在didFinishLaunchingWithOptions
中实现了InjectionIII的注入和添加响应热更新的观察者,另外会调用loadApp方法,也就是我们日常需要实现的homeVC
和self.window
。
每当摁下cmd+s,appdelegate作为观察者将会调用injected:
方法,如果想重新刷新homeVC
,你只需要把self.window
和homeVC
重新生成就好了,也就是把loadAPP()
的注释解开。
求打赏
injectionIII iOS代码注入工具(下)的更多相关文章
- IOS 代码管理工具
代码管理工具国内主要用的是SVN 国外主要是Git
- 各种代码版本控制工具下使用http代理的方法
原文:各种SCM工具下使用http代理下载源码:http://www.linuxeden.com/html/develop/20090723/66951.html SCM是软件配置管理的简称,常见的S ...
- iPhone手机越狱-逆向砸壳-代码注入
iPhone手机越狱 逆向砸壳 代码注入 工具下载 操作越狱 安装待逆向应用(app) 使用OpenSSH连接手机 找到应用二进制文件地址 找到应用document沙盒地址 拷贝砸壳工具(dumpde ...
- 【原】iOS动态性(三) Method Swizzling以及AOP编程:在运行时进行代码注入
概述 今天我们主要讨论iOS runtime中的一种黑色技术,称为Method Swizzling.字面上理解Method Swizzling可能比较晦涩难懂,毕竟不是中文,不过你可以理解为“移花接木 ...
- Xcode之外的文档浏览工具--Dash (在iOS代码库中浏览本帖)
链接地址:http://www.cocoachina.com/bbs/read.php?tid=273479 Xcode之外的文档浏览工具--Dash (在iOS代码库中浏览本帖) ...
- Win32环境下代码注入与API钩子的实现(转)
本文详细的介绍了在Visual Studio(以下简称VS)下实现API钩子的编程方法,阅读本文需要基础:有操作系统的基本知识(进程管理,内存管理),会在VS下编写和调试Win32应用程序和动态链接库 ...
- Win32环境下代码注入与API钩子的实现
本文详细的介绍了在Visual Studio(以下简称VS)下实现API钩子的编程方法,阅读本文需要基础:有操作系统的基本知识(进程管理,内存管理),会在VS下编写和调试Win32应用程序和动态链接库 ...
- iOS应用代码注入防护
在应用开发过程中,我们不仅仅需要完成正常的业务逻辑,考虑应用性能.代码健壮相关的问题,我们有时还需要考虑到应用安全的问题.那么应用安全的问题涉及到很多方面.比如防止静态分析的,代码混淆.逻辑混淆:防止 ...
- ChaosTool,iOS添加垃圾代码工具,代码混淆工具,代码生成器,史上最好用的垃圾代码添加工具,自己开发的小工具
最近在H5游戏项目中需要添加垃圾代码作混淆,提高过审机率.手动添加太费时费力,在网上并没有找到合适的比较好的工具,就自己动手写了一个垃圾代码添加工具,命名为ChaosTool. 扣扣交流群:81171 ...
- linux下的代码比较工具
在linux下有很多不错的代码比较工具:meld.DiffMerge.xxdiff.diffuse.Kompare等... diff : 文件比较工具用于比较计算机上的文件的内容,找到他们之间相同与不 ...
随机推荐
- kubernetes-1.26安装
一.环境准备 k8s集群角色 IP 主机名 安装组件 配置 控制节点 192.168.10.10 master apiserver.controller-manager.scheduler.etcd. ...
- 【AI新趋势期刊#2】AI发明计算机算法,如何给大模型排行,照片秒变二维码,视频一键动漫风
前言 每天都要浏览大量AI相关新闻,是不是感到信息量爆炸,有效信息少? 这么多新产品和新工具,到底哪些是真正是有价值的,哪些只是浮躁的一时热点? 想参与AI产品和工具的开发,从哪里能够获得大量的灵感和 ...
- 关于Java Chassis 3的契约优先(API First)开发
本文分享自华为云社区<Java Chassis 3技术解密:契约优先(API First)开发>,作者: liubao68. 契约优先(API First)开发是指应用程序开发过程中,将A ...
- ansible系列(26)--ansible的tags标签
目录 1. tags标签 1.1 指定执行某个tags 1.2 指定排除某个tags 1. tags标签 默认情况下, Ansible 在执行一个 playbook 时,会执行 playbook 中所 ...
- uiautomator2使用方法
一.设备连接 1.usb单设备连接 d = u2.connect() 2.usb多设备连接 d = u2.connect("90bf8faf") # 多台设备填写device即可 ...
- kettle使用4-使用Pan.bat执行转换、Kitchen.bat执行作业
一.直接在spoon中执行作业 使用bat文件执行速度比执行在spoon.bat中执行慢很多,如果少数几个任务,可以直接在spoon中执行. 1.新建作业 2.在通用中,新建START 任务执行的时间 ...
- C语言:如何实现在txt文件中删除超链接、统计单词数量、生成单词列表 (文本流操作并解决乱码)
1.首先读取原文件内容文本流(包含中英文) 2.删除超链接 3.统计单词数量 4.去除重复单词 读取文件需要自己在文本笔记中保存一个网页,保存为txt文件 注意的是,在这个代码实现过程中,我学到的是如 ...
- 基于 OAI 部署私有的 4G EPS
目录 文章目录 目录 前言 硬件设备要求 运行平台 RF 外设 可编程 SIM 卡 UE 终端 高精度参考时钟 操作系统要求 内核要求 CPU Frequency scaling All-In-One ...
- AIRIOT答疑第1期 | 零开发基础也能干物联网平台项目?
当然可以! 物联网低代码平台以零门槛.部署快.灵活性高.满足二次开发等特点,成为近两年来IOT服务的生力军.项目团队即使没有研发人员,也可以像拼乐高一样快速搭建物联网平台,功能全面,满足多数业务场景下 ...
- CMD程序_WordCount_博客改
程序简介 这个程序只能以命令行的方式启动,在启动时要输入相应的命令.程序的功能是对文本文件的字符数,单词数,行数进行统计,将结果输出到默认文件或指定文件. 码云项目链接:WordCount 程序结构 ...