NSAllowsArbitraryLoads 不工作

NSAllowsArbitraryLoads not working

我有一个可以从 http 域下载一些信息的工作应用程序。但是在 Swift 2.0 和 Xcode 7 更新后,我的应用程序无法连接到服务器并下载 json 数据,我收到 "App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file." 错误。

我试过将这些行放入我的 info.plist:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

但是我得到同样的错误,它不工作。我总是从下载方法中得到零数据。有人有同样的错误吗?谢谢!

编辑:这是我的 info.plist 文件中的一张图片:

您是否尝试添加您的域,例如?您应该将其添加到 NSAppTransportSecurity 字典中。

<key>NSExceptionDomains</key>
        <dict>
            <key>abcde.com</key>
            <dict>
                <key>NSExceptionRequiresForwardSecrecy</key>
                <true/>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                <true/>
            </dict>
        </dict>

您可以尝试使用

nscurl --ats-diagnostics <your-URL>

在终端中。这可以帮助您找到允许您的应用程序连接到您的-URL 的设置。这仅适用于 OSX El Capitan。查看苹果 technote.

但是,如果您在 info.plist 文件中尝试过 NSArbitraryLoads,则此诊断工具可能无法为您提供帮助。我想你可能发现了一个错误。

我遇到了同样的问题,我尝试添加 NSExceptionMinimumTLSVersion 并且成功了。

<key>NSAppTransportSecurity</key>
<dict>
   <key>NSExceptionMinimumTLSVersion</key>
   <string>TLSv1.0</string>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

我不确定为什么这有帮助,但是...确实有帮助!我希望它对那里的人也有帮助

我觉得自己好傻。我在错误的 Info.plist 上添加了禁用 ATS 的键。我没有将它添加到 Supporting Files/Info.plist 文件中,而是将其添加到 MyAppTests/Supporting Files/Info.plist 文件中。不是 Xcode 中的错误,而是我大脑中的错误。谢谢大家的回答!

None 以前的解决方案对我有用,我将 NSAllowsArbitraryLoads 设置为 true,但 HTP 仍然无法工作,环顾四周后我注意到 info.plist 文件有 NSExceptionDomains 部分,所以我删除它进行测试,一切正常。

所以看起来 NSExceptionDomains 取消了 NSAllowsArbitraryLoads,希望这对您有所帮助。

我遇到了类似的问题,过了一会儿我发现 info.plist 文件已损坏。我只能建议直接检查 xml 而不仅仅是 xcode.

中的 plist 编辑器

如果您只需要在网络 (UIWebView/WKWebView/SafariViewController) 中加载 http:// 资源,那么以下内容就足够了。

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoadsInWebContent</key>
    <true/>
</dict>

在我的例子中,我需要删除所有其他键,如 "Allow Arbitrary Loads in Web Content" 或 "Exception Domains" 才能使 "Allow Arbitrary Load" 工作,因为它在 "App Transport Security Settings" 下设置为 true在 Info.plist.

使用 XCode 8.2.1、iOS 10.2 测试。

我在 XCode 版本 8.3.2 (8E2002) 和 iOS 10.3 中遇到了同样的问题。删除所有键后,如 "Allow Arbitrary Loads in Web Content" 或 "Exception Domains","Allow Arbitrary Load" 键按预期工作。谢谢@dariukas。

在 iOS12 中,我无法使用旧方法使其工作 NSAllowsArbitraryLoads

只有当我将密钥更新为 NSExceptionAllowsInsecureHTTPLoads 时它才起作用。 我的 info.plist 部分有效:

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>yourdomain.com</key>
            <dict>
                <key>NSExceptionAllowsInsecureHTTPLoads</key>
                <true/>
            </dict>
        </dict>
    </dict>