1

我想使用自定义NSURLProtocol类来提供静态数据以进行测试,并且我已经在应用程序本身中实现了协议并将其注册到NSURLSessionConfiguration.protocolClasses. 我想将协议类移动到另一个应用程序并注册它以供其他应用程序使用。这可能吗?

registerClass:各州的 Apple 文档:

尝试注册 NSURLProtocol 的子类,使其对 URL 加载系统可见。

在我想用作协议的新应用程序中,我注册了协议,但外部应用程序没有调用它。

// Swift 3
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    URLProtocol.registerClass(MyCustomURLProtocolClass)
}

我希望一个外部应用程序能够使用我的协议类NSURLSession并使用诸如foo://externalApplication.com.

谢谢您的帮助!

4

1 回答 1

3

NSURLProtocol注册本质上是每个进程的。不可能在一个进程中注册协议以在另一个进程中使用它,因为这将是一个安全漏洞,允许任何应用程序轻松操纵任何其他应用程序的流量。

假设这只是为了测试目的,并且假设您可以控制这两个应用程序,您可能会考虑 A. 在应用程序扩展中编写服务器代码或 B. 使用 openURL 在应用程序之间建立通信通道,如下所示:

  • 使您的服务器应用程序成为实际的 Web 服务器。(那里有许多第三方 Web 服务器框架。)
  • 为该服务器应用程序注册一个 URL 方案,以便其他应用程序可以按需启动它。
  • 在另一个应用程序中,注册一个 URL 方案,以便服务器应用程序在启动后可以将控制权返回给该应用程序。
  • 在另一个应用程序中,使用 openURL 启动服务器应用程序并传递将打开另一个应用程序的自定义 URL。
  • 在服务器应用程序中,解码该 URL 并使用 openURL 切换回另一个应用程序,将端口号作为它发送到另一个应用程序的 URL 的一部分附加。
  • 在另一个应用程序中,从 URL 中获取端口号并开始与本地 Web 服务器通信。如果这未能响应,请发送另一个 openURL 请求。

有关详细信息以及更多应用程序间通信技巧和技术,我建议阅读这篇文章:http ://www.goldmansachs.com/what-we-do/engineering/see-our-work/app-to-app -comm.html

于 2017-01-09T23:44:35.063 回答