使用Xcode 7testing时,iOS 9应用程序无法从http请求获取数据

我正在开发iOS应用程序。 对于我的发展,我正在使用Xcode beta7。 之前,我曾经使用iOS 8.4在我的手机上testing我的应用程序,更新到iOS 9之后,我无法在手机上安装相同的应用程序。 请给我一些build议。 十分感谢!

将此行添加到您的.plist文件中: 在这里输入图像说明

如果只使用一个域,那么将其添加到您的.plist中:

<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>yoursite.com</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> </dict> </dict> </dict> 

目前这只是一种解决方法,但几周前我已经获得App Store的批准。

请确保为兼容性设置NSAppTransportSecurity。

请参阅: 如何将NSAppTransportSecurity添加到我的info.plist文件?

从最初的最小问题信息来看,问题可能是对不符合当前安全最佳实践的服务器的失败http请求。

iOS9现在默认要求服务器支持https与TLS 1.2,转发安全和安全的encryption方法。

来自: 应用运输安全技术

默认行为:
所有使用NSURLConnection,CFURL或NSURLSession API的连接都使用适用于iOS 9.0或更高版本以及OS X 10.11或更高版本的应用程序中的App Transport Security默认行为。 不符合要求的连接将失败。

解决scheme是将服务器升级到https TLS 1.2并转发安全性。 也只支持上述安全技术的encryption方法。

另一个解决scheme是将应用程序plist上的url列入白名单,或者即使有必要允许所有http连接。 这降低了连接的安全性,最好的办法是更新服务器。

如果需要的话,所有的URL都可以被允许,通常只有当被访问的URL是不知道的,可能是用户提供的或者有大量的已知的URL时才需要。

要禁用所有URL的安全性,请将其添加到应用程序的plist文件中:
不推荐 ),除非你确实需要访问未知的URL

 <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key><YES/> </dict> 

要禁用单个URL(和子url)的安全性,请将其添加到应用程序的plist文件( 将“yourdomain.com更改为正确的URL”:

 <key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>yourdomain.com</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> </dict> </dict> </dict> 

苹果提供了有关这几个地方的信息:

有WWDC 2015会话706以及发行说明: iOS iOS 9.0中的新增function 。 我相信在WWDC的主题演讲中也提到了这一点。

另请参阅此SO答: 关于iOS 9发行版中的ATS SSL 。