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. [FAQ] "cannot refer to unexported name" in Golang ?

    Golang 项目中如果使用了其它模块中找不到的函数.常量等,都会提示 "cannot refer to unexported name". 遇到这种情况,要么是拼写错误了,要么是 ...

  2. Total Commander 使用 mklink 建立文件夹链接 将 C 盘文件迁移到其他盘

    在安装完成了 100000000 个软件之后,我 1T 的 C 盘的空间终于不足了,由于安装了大量的特别挑的不专业的软件,强行放在其他的盘将水土不服.于是在老师傅的指导下,我采用了 mklink 神奇 ...

  3. git将本地项目关联远程仓库并上传到新分支

    混合项目开发,项目交接的时候没做好,新入职接手老项目的时候一脸懵逼,进入开发阶段时,越搞越不对,越搞越不对,总感觉 本地跑的项目和己方测试环境以及客户的测试环境和目标环境不一致,结果发现着手的两套代码 ...

  4. Redis官方开源的可视化管理工具 - RedisInsight

    前言 今天大姚给大家推荐一款Redis官方开源的可视化管理工具:RedisInsight. Redis介绍 Redis (Remote Dictionary Server) 是一个使用 C 语言编写的 ...

  5. ubuntu安装 vmware workstation pro 15.1.1

    BIOS开启虚拟化 如果没有就参考下面的连接地址设置 http://robotrs.lenovo.com.cn/ZmptY2NtYW5hZ2Vy/p4data/Rdata/Rfiles/726.htm ...

  6. JavaScript 实现前端文件下载

    A.download HTML5的A标签有一个download属性,可以告诉浏览器下载而非预览文件,很实用,参考链接:http://www.zhangxinxu.com/wordpress/2016/ ...

  7. [kernel] 带着问题看源码 —— 进程 ID 是如何分配的

    前言 在<[apue] 进程控制那些事儿>一文中,曾提到进程 ID 并不是唯一的,在整个系统运行期间一个进程 ID 可能会出现好多次. > ./pid fork and exec c ...

  8. 基于webapi的websocket聊天室(二)

    上一篇 - 基于webapi的websocket聊天室(一) 消息超传缓冲区的问题 在上一篇中我们定义了一个聊天室WebSocketChatRoom.但是每个游客只分配了400个字节的发言缓冲区,大概 ...

  9. Android 13 - Media框架(14)- OpenMax(二)

    关注公众号免费阅读全文,进入音视频开发技术分享群! 这一节我们将来解析 media.codec 这个 HIDL service 究竟提供了什么服务,服务是如何启动的. 1.main 函数 我们先来看 ...

  10. cmd /c和cmd /k 以及CMD命令

    [转]cmd /c和cmd /kjava的Runtime.getRuntime().exec(commandStr)可以调用执行cmd指令. cmd /c dir 是执行完dir命令后关闭命令窗口. ...