我有一个可以从http域下载一些信息的应用程序。但是在Swift 2.0和Xcode 7更新之后,我的应用程序无法连接到服务器并下载json数据,我得到“App Transport Security已经阻止了一个明文HTTP(http://)资源加载,因为它不安全。可以通过应用程序的Info.plist文件配置临时例外。“错误。
我已经尝试将这些行放在我的info.plist中:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
但我得到同样的错误,它不起作用。我总是从下载方法中获取nil数据。任何人都有同样的错误?谢谢!
编辑:这是我的info.plist文件中的图片:
答案 0 :(得分:15)
我觉得很蠢。我在错误的Info.plist上添加了禁用ATS的密钥。我将其添加到MyAppTests / Supporting Files / Info.plist文件中,而不是将其添加到Supporting Files / Info.plist文件中。不是Xcode中的错误,而是我大脑中的错误。谢谢大家的答案!
答案 1 :(得分:8)
您可以尝试使用
nscurl --ats-diagnostics <your-URL>
在终端。这可以帮助您找到允许您的应用连接到您的网址的设置。这仅适用于OSX El Capitan。查看苹果technote。
但是如果您在info.plist文件中尝试过NSArbitraryLoads,那么这个诊断工具可能对您没有帮助。我想你可能发现了一个错误。
答案 2 :(得分:4)
在我的情况下,我需要删除所有其他键,例如&#34;允许Web内容中的任意负载&#34;或&#34;异常域&#34;为了获得&#34;允许任意负载&#34;在&#34;应用程序传输安全设置&#34;下运行,因为它设置为true在Info.plist。
使用XCode 8.2.1,iOS 10.2进行测试。
答案 3 :(得分:3)
我有同样的问题,我尝试添加NSExceptionMinimumTLSVersion
并且它有效。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
我不确定为什么这会有所帮助,但是......确实如此!我希望它对那里的人也有帮助
答案 4 :(得分:3)
如果您只需要在web(UIWebView / WKWebView / SafariViewController)中加载<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoadsInWebContent</key>
<true/>
</dict>
资源,则以下内容就足够了。
($preparedStatement->fetch())['p'];
答案 5 :(得分:1)
您是否尝试添加域名?您应该将其添加到NSAppTransportSecurity
字典中。
<key>NSExceptionDomains</key>
<dict>
<key>abcde.com</key>
<dict>
<key>NSExceptionRequiresForwardSecrecy</key>
<true/>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
答案 6 :(得分:1)
以前的解决方案都没有为我工作,我将NSAllowsArbitraryLoads设置为true,但仍然HTP无法正常工作,在环顾四周之后我注意到info.plist文件有NSExceptionDomains部分,所以我将其删除以进行测试并且一切正常
所以看起来NSExceptionDomains取消了NSAllowsArbitraryLoads,希望这会有所帮助。
答案 7 :(得分:1)
我在iOS 10.3的XCode版本8.3.2(8E2002)中遇到了同样的问题。删除所有键“允许Web内容中的任意加载”或“异常域”后,“允许任意加载”键按预期工作。谢谢@dariukas。
答案 8 :(得分:1)
在iOS12中,我无法使用旧方法 NSAllows任意负载
仅当我将密钥更新为NSExceptionAllowsInsecureHTTPLoads时,它才起作用。 我的info.plist部分有效:
contents()
答案 9 :(得分:0)
我有类似的问题,过了一段时间我发现info.plist文件已损坏。我只能建议直接检查xml,而不仅仅是xcode中的plist编辑器。