0

我想使用自定义的NSURLProtocol类来为测试提供静态数据,并且我已经在应用程序本身中执行了该协议并将其注册到NSURLSessionConfiguration.protocolClasses。我想将协议类移到另一个应用程序并注册它以供其他应用程序使用。这可能吗?注册NSURLProtocol(URLProtocol)类与外部应用程序一起使用?

registerClass:状态苹果文件:

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

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

​​

我想一个外部应用能够使用我的协议类NSURLSession,并为foo://externalApplication.com这样的URL调用它。

感谢您的帮助!

+0

为了澄清,你添加代码和它引用到外部应用程序的类? – Holly

+0

@霍利我编辑了问题并添加了说明。请让我知道如果仍然不清楚。上面的代码和协议类位于我想用于拦截调用的应用程序中,而外部应用程序没有此代码或协议类。外部应用程序是我想调入协议的应用程序。 – lostAtSeaJoshua

回答

2

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