iOS 9和NSAppTransportSecurity

4

iOS 9与服务器通信存在问题。请检查info.plist文件设置:

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

当您通过Xcode运行应用程序时,一切都很顺利。与服务器的工作进行得非常完美。但是,一旦我停止应用程序并尝试仅单击模拟器中的图标运行它,网络就会停止工作。当我将应用程序发送到TestFlight中审查时也是同样的问题。应用程序安装后,网络再次停止工作。
Xcode 7.0(7a220) iOS 9.0
3个回答

4
你确定它不起作用吗?我测试了一下,一切都很好。
可能的操作:
启用调试模式,构建您的应用程序,从Xcode中运行它,并确保您不会收到“应用传输安全性”错误: App Transport Security已阻止明文HTTP(http://)资源加载,因为不安全。 在使用模拟器启动时。现在找到相同模拟器的DEVICE_CODE
提示:其中之一将是这些~/Library/Developer/CoreSimulator/Devices/中的代码。从Xcode中找到这个代码的最简单方法是转到窗口->设备。
然后,使用Console打开其日志文件。
~/Library/Logs/CoreSimulator/<DEVICE_CODE>/system.log

清除历史记录(以防万一,您可以再次从Xcode启动应用程序,并确保输出被记录在您打开的日志文件中,并且您仍然没有在其中获得“App Transport Security”错误)。

现在从模拟器中启动您的应用程序,并检查日志中是否有与“App Transport Security”相关的任何错误。

对我来说,如果我从Xcode中工作时没有错误,则不会有任何错误。

==================================

P.S.:

强烈建议不要将NSAllowsArbitraryLoads设置为true,而是应该通过以下方式实现所需的结果:

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>yourserver.com</key>
    <dict>
      <!--Include to allow subdomains-->
      <key>NSIncludesSubdomains</key>
      <true/>
      <!--Include to allow HTTP requests-->
      <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
      <true/>
      <!--Include to specify minimum TLS version-->
      <key>NSTemporaryExceptionMinimumTLSVersion</key>
      <string>TLSv1.1</string>
    </dict>
  </dict>
</dict>

感谢您的回答,但第一个选项(可能的操作:)并没有效果。日志文件中没有任何错误出现,一切都正常工作。但是在停止应用程序Xcode后,网络再次无法工作。这个方法涉及到NSExceptionDomains也会导致同样的问题。 - Maxim Zakopaylov
你确定问题的原因是 NSAppTransportSecurity 吗?你说控制台没有显示任何错误。 - makaron
如果您使用运行10.11的Mac,则可以使用新的nscurl命令和--ats-diagnostics选项。这将查看您正在连接的服务,并告诉您需要调整哪些设置才能在尽可能保持防护的情况下进行连接。 - macshome
我无法理解可能的原因。现在我的服务器支持https和TLC v1.2请求,但iOS 9也无法通过它。iOS 8一切正常。 - Maxim Zakopaylov
嗯,NSAppTransportSecurity已知会对HTTP请求造成问题。对于HTTPS,它不应该阻止任何内容。也许你可以为你的问题添加更多标签(例如nsurlrequestafnetworking),并尝试在@macshome建议的地方搜索问题。 - makaron
显示剩余5条评论

2
应该这样做,你需要在你的Plist中添加以下记录 苹果文档 它是懒惰的,所以你的框架可以访问互联网。
NSAppTransportSecurity <- 类型字典
NSAllowsArbitraryLoads <- 类型布尔值YES

enter image description here


0

非常简单,只需按照以下步骤操作:

  1. 应用程序传输安全设置。
  2. 允许任意加载。
  3. 例外域和域/主机引用。

enter image description here

注意:此问题发生的原因是您的项目设置默认不允许任何跨站点脚本引用。因此,它会阻止任何超出您应用程序范围的服务调用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接