ios - Objective-C Hook 到 [AppDelegate openUrl]

标签 ios objective-c swizzling

环境

  • xcode 6.4
  • objective-C
  • iOS应用

用例

  • 该产品是集成在第 3 方应用中的 SDK
  • 不能访问使用 SDK 的应用程序的源代码
  • SDK 中的模块应检索用于启动应用程序的 URL(如果有)

手头的问题

考虑到上述用例,我如何检索用于启动应用程序的 URL(如果有),或者拦截应用程序 AppDelegate 实现的“openUrl”方法?

最佳答案

您可以创建自己的类来实现 UIApplicationDelegate 协议(protocol)。在您的 SDK 的启动代码中(用户必须尽早调用 application:willFinishLaunchingWithOptions:),实例化它,并将主 UIApplication 对象的 delegate 替换为您的自定义对象。

您的自定义对象现在是应用程序委托(delegate)而不是他们的。

在设置 UIApplication 对象的委托(delegate)之前,将您的类的委托(delegate)设置为当前的 UIApplication 委托(delegate),以便您可以将任何消息转发回它们的应用程序委托(delegate)对象。

无需调配。

关于ios - Objective-C Hook 到 [AppDelegate openUrl],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31948821/

相关文章:

ios - 如何调配 NSURLSession 类方法 dataTaskWithUrl

ios - 使用选项卡 View Controller 的 Xcode IOS 转换 View

ios - RealityKit 仅显示暗图像

ios - 为什么在某些情况下 View 的快照看起来会大两倍?

ios - iPhone 6 - 通过命名约定使用精确尺寸的图像

ios - 在带有IOS 6的iPad上展示aN操作表时崩溃

ios - 单个 UICollectionViewController 中的多个自定义单元格,通过 NavigationBarButton 在之间循环

ios - 未调用 NSMutableDictionary 的 Swizzled 方法

ios - 复数字典总是从 "zero"键返回值

ios - 用类别覆盖方法时如何调用原始实现?