概览
我们在第一篇博文:
- 《Swift 从获取所有 NSObject 对象聊起:ObjC、汇编语言以及底层方法调用链(一)》
中讨论了 Swift 语言中的钩子(Hook)机制,以及如何用它来“勾”住 NSObject 的 init 构造器方法。
不过,目前“疑云重重”的实现显然“虐”的你在一直“怀疑人生”。而在本篇的讨论中我们来看看第三方 SwiftHook 库是如何“化腐朽为神奇”来完成这个“不可能任务”的。
在本篇博文中,您将学到如下内容:
- 概览
- 3. 第三方解决之道 SwiftHook 凭什么可以?
- 4. 为什么尝试 print 会崩溃?
- 5. 迂回战术:让 print 成为可能!
- 总结
在下一篇中我们将讨论如果不用 SwiftHook 库,自己撸码实现相似的功能会经历怎样的“磨难”。
那么,让我们马上开始本篇的 Hook 大冒险吧!Let’s go!!!😉
3. 第三方解决之道 SwiftHook 凭什么可以?
SwiftHook 库是一个 Swift 语言中通用 Hook 功能的解决方案。它在 github 中的地址为:
- GitHub:SwiftHook 包
想要了解更多 SwiftHook
库使用案例的小伙伴们,请移步我下面的博文一探究竟:
- SwiftUI 如何在运行时从底层动态获取任何 NSObject 对象实例
好奇的我们迫不及待的想知道:如果用 SwiftHook
库实现之前的代码也会“死得很惨”吗?
class func tryHookNSObjectInit2() {
let oldInitSel = #selector(NSObject.init)
_ = try! hookAfter(targetClass: NSObject.self, selector: oldInitSel) {
obj, sel in
let address = Unmanaged.passRetained(obj).toOpaque()
print