根据以下错误消息,我需要在info.plist中设置什么来启用HTTP模式?

传输安全性已阻止明文HTTP(HTTP://)资源因为它是不安全的。可以通过以下方式配置临时异常应用程序的Info.plist文件。

假设我的域名是example.com。


当前回答

如本技术说明所述,确定可以自动执行哪些设置:

/usr/bin/nscurl --ats-diagnostics --verbose https://your-domain.com

其他回答

注意:plist中的异常域应该是小写。

示例:您已在“设置”->“共享”下将计算机命名为“MyAwesomeMacbook”;您的服务器(出于测试目的)正在MyAwesomeMacbook.local:3000上运行,您的应用程序需要向http://MyAwesomeMacbook.local:3000/files...,您的plist需要指定“myawesomemacbook.local”作为异常域。

--

您的info.plist将包含。。。

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>myawesomemacbook.local</key>
    <dict>
      <!--Include to allow subdomains-->
      <key>NSIncludesSubdomains</key>
      <true/>
      <!--Include to allow HTTP requests-->
      <key>NSExceptionAllowsInsecureHTTPLoads</key>
      <true/>
    </dict>
  </dict>
</dict>

我不喜欢直接编辑plist。您可以使用GUI轻松地将其添加到plist:

单击左侧导航器中的Info.plist。现在更改主区域中的数据:在最后一行添加+输入组的名称:应用程序传输安全设置右键单击组并选择“添加行”输入允许任意加载将右侧的值设置为YES

正如许多人所指出的,这是iOS 9.0附带的一个功能问题。他们添加了一个叫做应用程序传输安全的东西,当它破坏了我的应用程序时,我也很生气。

您可以在.plist文件中的NSAppTransportSecurity字典下使用NSAllowsArbitraryLoads键将其绑定为YES,但最终您需要重新编写形成URL的代码以形成HTTPS://前缀。

苹果在iOS 9.0中重新编写了NSUrlConnection类。您可以在NSURLConnection中了解它。

否则,您可能必须退出iOS 9.0,直到有时间实施正确的解决方案。

2015-09-25(2015-09-18 Xcode更新后):

我用了一种非懒惰的方法,但没有奏效。以下是我的尝试。

第一

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>www.xxx.yyy.zzz</key>
        <dict>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSTemporaryExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

其次,

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>www.xxx.yyy.zzz</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

最后,我使用了懒惰的方法:

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

这可能有点不安全,但我找不到其他解决方案。

对于Cordova,如果您想将其添加到ios.json中,请执行以下操作:

"NSAppTransportSecurity": [
   {
      "xml": "<dict><key>NSAllowsArbitraryLoads</key><true /></dict>"
   }
]

并且它应该位于:

"*-Info.plist": {
   "parents": {
   }
}