Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 注册NSURLProtocol(URLProtocol)类以用于外部应用程序?_Ios_Nsurlsession_Url Scheme_Nsurlprotocol_Nsurlsessionconfiguration - Fatal编程技术网

Ios 注册NSURLProtocol(URLProtocol)类以用于外部应用程序?

Ios 注册NSURLProtocol(URLProtocol)类以用于外部应用程序?,ios,nsurlsession,url-scheme,nsurlprotocol,nsurlsessionconfiguration,Ios,Nsurlsession,Url Scheme,Nsurlprotocol,Nsurlsessionconfiguration,我想使用一个定制的NSURLProtocol类来为测试提供静态数据,我已经在应用程序中实现了该协议,并将其注册到NSURLSessionConfiguration.protocolClasses。我想将protocol类移动到另一个应用程序,并将其注册以供其他应用程序使用。这可能吗 适用于各州的苹果文档: 尝试注册NSURLProtocol的子类,使其对URL加载系统可见 在我想用作协议的新应用程序中,我注册了协议,但外部应用程序没有调用它 // Swift 3 func application

我想使用一个定制的
NSURLProtocol
类来为测试提供静态数据,我已经在应用程序中实现了该协议,并将其注册到
NSURLSessionConfiguration.protocolClasses
。我想将protocol类移动到另一个应用程序,并将其注册以供其他应用程序使用。这可能吗

适用于各州的苹果文档:

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

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

// Swift 3
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    URLProtocol.registerClass(MyCustomURLProtocolClass)
}
我希望外部应用程序能够将我的协议类与
NSURLSession
一起使用,并使用诸如
foo://externalApplication.com


谢谢你的帮助

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

假设这只是为了测试的目的,假设你在控制这两个应用程序,你可以考虑A.在一个应用程序扩展或B中编写你的服务器代码,使用OpenURL来在这样的应用程序之间建立一个通信通道:

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

有关详细信息以及更多应用程序间通信技巧和技巧,我建议阅读本文:

要澄清,您是否将该代码及其引用的类添加到外部应用程序中?@Holly我编辑了问题并添加了澄清。如果还不清楚,请告诉我。上面的代码和协议类位于我要用于拦截呼叫的应用程序中,而外部应用程序中没有此代码或协议类。外部应用程序是我要调用到协议中的应用程序。