我正在iOS中开发一个应用程序。对于我的开发,我使用的是Xcode beta7。之前,我曾经在iOS 8.4中使用iOS 8.4测试我的应用程序,更新到iOS 9后,我无法在手机中安装相同的应用程序。请给我一些建议。太谢谢了!
请务必设置NSAppTransportSecurity以获得兼容性。
见:How can I add NSAppTransportSecurity to my info.plist file?
从最初的最小问题信息来看,问题可能是对不符合当前安全最佳实践的服务器的失败http请求。
iOS9现在默认需要服务器支持带有TLS 1.2的https,转发安全性和安全加密方法。
来自:App Transport Security Technote
默认行为: 使用NSURLConnection,CFURL或NSURLSession API的所有连接都在为iOS 9.0或更高版本以及OS X 10.11或更高版本构建的应用程序中使用App Transport Security默认行为。不符合要求的连接将失败。
解决方案是将服务器更新为https TLS 1.2并转发安全性。也只支持上述Security Technote中的加密方法。
另一种解决方案是将app plist上的url列入白名单,或者甚至在必要时允许所有http连接。这降低了连接安全性,最好的方法是更新服务器。
如果需要,可以允许所有URL,这通常仅在不知道要访问的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>
Apple提供了有关这几个地方的信息:
有描述的WWDC 2015 session 706以及发行说明:What's New in iOS iOS 9.0。我相信它也在WWDC主题演讲中提到过。
另见这个SO答案:About ATS SSL in iOS 9 release version。