【问题标题】:NSAllowsArbitraryLoads not workingNSAllowsArbitraryLoads 不起作用
【发布时间】:2016-01-02 06:24:30
【问题描述】:

我有一个可以从 http 域下载一些信息的工作应用程序。但是在 Swift 2.0 和 Xcode 7 更新之后,我的应用程序无法连接到服务器并下载 json 数据,我得到“应用程序传输安全性阻止了明文 HTTP (http://) 资源加载,因为它不安全。可以通过应用程序的 Info.plist 文件配置临时例外。”错误。

我已经尝试将这些行放在我的 info.plist 中:

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

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

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

【问题讨论】:

  • 看起来很奇怪,你试过清理项目、构建文件夹和派生数据吗?

标签: ios json http swift2 xcode7


【解决方案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>

【讨论】:

  • 我已经更新了我的答案。您应该将其添加到NSAppTransportSecurity。在您的 .plist 中,您将其添加到 NSAppTransportSecurity 之外。 @PabloQuemé
  • 我按照您的建议更新了我的 info.plist,但仍然遇到同样的错误。我的 AppDelegate 或 Xcode 是否有问题?
【解决方案2】:

你可以试试

nscurl --ats-diagnostics <your-URL>

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

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

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,我尝试添加 NSExceptionMinimumTLSVersion 并且它有效。

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

    我不知道为什么这会有所帮助,但是……确实如此!我希望它对那里的人也有帮助

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 我的项目视图中有 3 个 info.plist 文件,我选择了最后一个。一个公平的错误!
      【解决方案5】:

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

      因此,NSExceptionDomains 似乎取消了 NSAllowsArbitraryLoads,希望这会有所帮助。

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

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

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

          【讨论】:

            【解决方案8】:

            在我的情况下,我需要删除所有其他键,例如“允许 Web 内容中的任意加载”或“异常域”,以使“允许任意加载”在“应用程序传输安全设置”下设置为 true 时工作" 在 Info.plist 中。

            使用 XCode 8.2.1、iOS 10.2 测试。

            【讨论】:

              【解决方案9】:

              我在 iOS 10.3 的 XCode 版本 8.3.2 (8E2002) 中遇到了同样的问题。删除“允许 Web 内容中的任意加载”或“异常域”等所有键后,“允许任意加载”键按预期工作。谢谢@dariukas。

              【讨论】:

                【解决方案10】:

                在 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>
                

                【讨论】:

                  猜你喜欢
                  • 2016-03-06
                  • 2016-08-16
                  • 1970-01-01
                  • 2016-03-08
                  • 2016-03-13
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-09-12
                  • 1970-01-01
                  相关资源
                  最近更新 更多