我正在开发一个关于XCode的Cordova项目。
我正在使用Cordova v5.4.1,Xcode v7.2和iOS模拟器v9.2。
该应用程序正在模拟器上成功构建和部署,但未使用REST Web服务。我能够在模拟器的Safari浏览器中查看来自Web服务的JSON响应,但该应用程序没有显示相同的内容。
我启用了#34;允许HTTP服务"在开发人员设置中,并尝试重新启动模拟器和Xcode,但没有任何帮助。我还将这些行添加到config.xml。
<plugin name="cordova-plugin-whitelist" spec="1" />
<access origin="*" />
如何修复此问题?
答案 0 :(得分:2)
也许你被iOS 9 ATS(App Transport Security)阻止了?
要测试是否可能出现这种情况,请在Mac上尝试使用Terminal.app:
nscurl --ats-diagnostics https://api.your-server.com
如果ATS允许连接到https://api.your-server.com,您应该在响应的第一个块中看到这一点:
Default ATS Secure Connection
---
ATS Default Connection
Result : PASS
---
其他任何意味着ATS都会阻止HTTP(S)请求通过。
要解决此问题,您可以在根目录(使用带有TLS 1.2,SHA256或更高版本的HTTPS,以及转发保密)修复问题,这是推荐的解决方案,但并非总是可行,或者为服务器定义例外允许进入App-Info.plist
文件。例如:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>api.your-server.com</key>
<dict>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>
</dict>
有关ATS的更多信息,以及可用于定义例外的值:https://developer.apple.com/library/prerelease/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html
如果所有其他方法都失败了,您可以尝试使用此Cordova插件: https://github.com/robertklein/cordova-ios-security 但是我不推荐它,因为它完全禁用了ATS,这是一个非常糟糕的想法。