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