NSAllowsArbitraryLoads无效

时间:2015-10-05 14:37:44

标签: ios json http swift2 xcode7

我有一个可以从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文件中的图片:

Info.plist file

10 个答案:

答案 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编辑器。