我们的 iOS 应用程序使用自定义协议 (NSURLProtocol) 来直接管理加载 UIWebview 所需的某些数据。这在 iOS 9 和 XCode 7 之前一直很好。
现在,由于主站点是使用 HTTPS 加载的,所以 UIWebview 在引用自定义协议资源时会抛出错误,因为它认为它不安全(实际上并非如此,我们使用 SSL 加载它,而不是 https://)。该应用程序已经使用“允许任意加载”构建,因为我们还有其他一些需要这样做的东西,我原以为它继承了 NSTemporaryThirdPartyExceptionAllowsInsecureHTTPLoads,这似乎正在与之抗衡,但谁知道呢。
有什么方法可以让 iOS 9 相信我们的自定义协议可以从 HTTPS 访问?注意 - 我们不在 UIWebview 中使用 iframe 或类似的东西 - 这些资源是使用 Ajax/XHR 请求的,并且应用程序的 NSURLProtocol 被调用并接管加载数据并返回响应。
自定义方案也列在 URL 类型中,但这似乎并没有改变任何行为(进出,同样的错误)。这是具体的错误:
[阻止] https://example.com/path/redacted的页面不允许显示来自 mycustomprotocol://different.example.com/path/redacted 的不安全内容。
编辑: 下载 Xcode 6.4,重建应用程序,它似乎在 iOS 9.x 上运行良好,自定义协议没有问题。显然,这不是一个长期的解决方案。希望有人仍然对如何在 Xcode 7+ 中解决问题有所了解。