injectionIII iOS代码注入工具(下)

本文将解决如何使用injectionIII对主页热重载,如果对injectionIII不了解的同学请回到上篇查看

Vaccine

简单地说Vaccine其实是injectionIII的注入功能无法注入的地方通过它来进行实现,从整体上观看Vaccine整个框架的文件结构来看,里面有很多的extension的文件。

Vaccine文件结构

Vaccine可以用Cocoapods或者Carthage,也可以手动导入项目中的Source文件夹。

pod 'Vaccine'
github "zenangst/Vaccine"

Vaccine样例解析

项目中提供了一个样例项目,按照下面的步骤配置即可

  1. Install InjectionIII from the Mac App Store
  2. git clone git@github.com:zenangst/Vaccine.git
  3. Run pod install in Example/VaccineDemo/
  4. Open and run VaccineDemo.xcworkspace
  5. Select the demo project when InjectionIII wants you to select a folder.
  6. 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方法,也就是我们日常需要实现的homeVCself.window

每当摁下cmd+s,appdelegate作为观察者将会调用injected:方法,如果想重新刷新homeVC,你只需要把self.windowhomeVC重新生成就好了,也就是把loadAPP()的注释解开。

求打赏

injectionIII iOS代码注入工具(下)的更多相关文章

  1. IOS 代码管理工具

    代码管理工具国内主要用的是SVN 国外主要是Git

  2. 各种代码版本控制工具下使用http代理的方法

    原文:各种SCM工具下使用http代理下载源码:http://www.linuxeden.com/html/develop/20090723/66951.html SCM是软件配置管理的简称,常见的S ...

  3. iPhone手机越狱-逆向砸壳-代码注入

    iPhone手机越狱 逆向砸壳 代码注入 工具下载 操作越狱 安装待逆向应用(app) 使用OpenSSH连接手机 找到应用二进制文件地址 找到应用document沙盒地址 拷贝砸壳工具(dumpde ...

  4. 【原】iOS动态性(三) Method Swizzling以及AOP编程:在运行时进行代码注入

    概述 今天我们主要讨论iOS runtime中的一种黑色技术,称为Method Swizzling.字面上理解Method Swizzling可能比较晦涩难懂,毕竟不是中文,不过你可以理解为“移花接木 ...

  5. Xcode之外的文档浏览工具--Dash (在iOS代码库中浏览本帖)

    链接地址:http://www.cocoachina.com/bbs/read.php?tid=273479 Xcode之外的文档浏览工具--Dash    (在iOS代码库中浏览本帖)       ...

  6. Win32环境下代码注入与API钩子的实现(转)

    本文详细的介绍了在Visual Studio(以下简称VS)下实现API钩子的编程方法,阅读本文需要基础:有操作系统的基本知识(进程管理,内存管理),会在VS下编写和调试Win32应用程序和动态链接库 ...

  7. Win32环境下代码注入与API钩子的实现

    本文详细的介绍了在Visual Studio(以下简称VS)下实现API钩子的编程方法,阅读本文需要基础:有操作系统的基本知识(进程管理,内存管理),会在VS下编写和调试Win32应用程序和动态链接库 ...

  8. iOS应用代码注入防护

    在应用开发过程中,我们不仅仅需要完成正常的业务逻辑,考虑应用性能.代码健壮相关的问题,我们有时还需要考虑到应用安全的问题.那么应用安全的问题涉及到很多方面.比如防止静态分析的,代码混淆.逻辑混淆:防止 ...

  9. ChaosTool,iOS添加垃圾代码工具,代码混淆工具,代码生成器,史上最好用的垃圾代码添加工具,自己开发的小工具

    最近在H5游戏项目中需要添加垃圾代码作混淆,提高过审机率.手动添加太费时费力,在网上并没有找到合适的比较好的工具,就自己动手写了一个垃圾代码添加工具,命名为ChaosTool. 扣扣交流群:81171 ...

  10. linux下的代码比较工具

    在linux下有很多不错的代码比较工具:meld.DiffMerge.xxdiff.diffuse.Kompare等... diff : 文件比较工具用于比较计算机上的文件的内容,找到他们之间相同与不 ...

随机推荐

  1. 18.基于Consul的服务发现和ConsulManager管理

    192.168.10.14 prometheus.consul 192.168.10.100 各类服务 一.基于Consul的服务发现 Consul 是由 HashiCorp 开发的一个支持多数据中心 ...

  2. 数据分析之pyecharts v1版本

    维护人员,感谢他们 https://github.com/chenjiandongx https://github.com/chfw https://github.com/kinegratii中文文档 ...

  3. Golang重复Rails Devise gem密码加密

    https://github.com/haimait/go-devise-encryptor package main import ( "fmt" //devisecrypto ...

  4. MAPREDUCE实践篇

    1.编程规范 (1)用户编写的程序分成三个部分:Mapper,Reducer,Driver(提交运行mr程序的客户端) (2)Mapper的输入数据是KV对的形式(KV的类型可自定义) (3)Mapp ...

  5. Mac远程控制工具有哪些

    适用于Mac的远程控制工具有很多,这里我们给大家列举五个常用软件. 1.Apple Remote Desktop 苹果自带远程桌面正如其名称所承诺的那样.作为 Apple 出品的应用程序,您可以想象它 ...

  6. pageoffice在线打开word文件加盖电子印章

    一.加盖印章的 js 方法 js方法 二.常见使用场景 1.常规盖章.弹出用户名.密码输入框,选择对应印章. 点击盖章按钮弹出用户名密码登录框,登录以后显示选择电子印章. document.getEl ...

  7. 深入Django项目实战与最佳实践

    title: 深入Django项目实战与最佳实践 date: 2024/5/19 21:41:38 updated: 2024/5/19 21:41:38 categories: 后端开发 tags: ...

  8. 基于Python的性能优化

    一.多线程 在CPU不密集.IO密集的任务下,多线程可以一定程度的提升运行效率. import threading import time import requests def fetch_url( ...

  9. 【winform】解决datagridview里放combox,combox不能按下键快速选择的问题

    效果图: 一开始,是拖个下拉框到窗体上,用dgv.controls.Add(combox)添加到表格里,在通过表格事件,触发时,改变下拉框的位置和大小,这样做,下拉框是会出现在表格里,但是有问题,不能 ...

  10. C# winfrom 局域网版多人成语接龙(二)

    功能基本上是完成了,要两个人完才好玩,目前 倒计时,每组游戏玩家数量这些控制变量,都是写死再代码里的,等以后想改的时候再改,这个项目核心的功能算是实现了,但还可以扩展,比如记录一下用户的游戏数据,答对 ...