ios 9和NSAppTransportSecurity

iOS 9有一个问题,并与服务器一起工作。 我info.plist设置:

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

当你通过Xcode运行应用程序时,一切都很好。 与服务器一起工作是完美的。 但只要我停止应用程序,并尝试运行它只需点击模拟器中的图标。 networking停止工作。 当我将应用程序发送到TestFlight中的Review时,也出现同样的问题。 应用程序已安装,但networking再次停止工作。

Xcode 7.0(7a220)iOS 9.0

你确定它不工作? 我testing过,一切都很好。

可能的行动

启用debugging模式,构build您的应用程序,从Xcode运行它,并确保您没有得到一个应用程序传输安全错误:

App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure.

当使用您的模拟器从Xcode启动它。 现在find一个相同的模拟器的DEVICE_CODE

(Hint: it will be one of these ~/Library/Developer/CoreSimulator/Devices/. The easiest way to find this code from Xcode is to go Window->Devices)

并用控制台打开它的日志文件:

 ~/Library/Logs/CoreSimulator/<DEVICE_CODE>/system.log 

清除历史logging(以防万一您可以再次从Xcode启动您的应用程序,并确保您的输出正在进入您打开的日志文件,并且仍然没有在那里得到App Transport Security错误)。

现在从模拟器中启动您的应用程序,并检查日志中是否存在与应用程序传输安全相关的任何错误。

对于我来说,如果我从Xcode工作中得不到任何的话。

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

PS

强烈build议不要将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> 

应该这样做,您需要在您的Plist中添加以下loggingApple文档

这是懒惰的,所以你的框架可以访问互联网

NSAppTransportSecurity < – types字典

NSAllowsArbitraryLoads < – types布尔值是

在这里输入图像说明

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

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

在这里输入图像说明

注意:发生此问题是因为您的项目设置默认不允许任何跨站点脚本引用。 因此,它会阻止任何不在您应用程序之外的服务呼叫。