在iOS中禁用ATS而不禁用ATS

我正在开发一个应用程序,它有一个小的调整。 它会显示给定url的预览(如Facebook,WhatsApp的)。 但是如果“User-given”url位于HTTP中,则在启用ATS时无法加载预览。 所以我通过使用NSAllowsArbitraryLoadsclosures整个HTTPSstream量。 有什么办法让ATS启用HTTP?

根据苹果 ,如果你build立一个较旧的SDK,所以iOS 8或更早版本,然后ATS被禁用。 我不知道这是什么意思,但我猜测这是目标构build设置架构,基础SDK – 不是部署目标设置。

本video详细介绍了2016年WWDC发布的ATS的变化情况。截至2017年初,如果您使用以下ATS例外情况,苹果将拒绝您的应用程序,并且您无法提供合理的理由:

  • NSAllowsArbitraryLoads
  • NSExceptionAllowsInsecureHTTPLoads
  • NSExceptionMinimumTLSVersion

但是,看起来你被允许使用一个新的exception叫做:

  • NSAllowsArbitraryLoadsInWebContent

这意味着一个WKWebView控件仍然可以加载HTTP内容。 不知道这是否也适用于UIWebView。

在你的情况,我猜你没有使用WKWebView,所以你最好开始工作,你的“合理的理由”。 或者坚持使用iOS 8 SDK。

您可以添加exception( NSExceptionDomains )以允许特定域的HTTP。 请参阅文档 。

但是,如果给定URL的用户可以是任何URL,那么只能使用NSAllowsArbitraryLoads

打开Info.plist作为源代码,然后添加这个你想要的地方:

 <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <false/> <key>NSExceptionDomains</key> <dict> <key>aWebsite.com</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSTemporaryExceptionMinimumTLSVersion</key> <string>TLSv1.1</string> </dict> <key>anotherWebsiteIfYouWant.com</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSTemporaryExceptionMinimumTLSVersion</key> <string>TLSv1.1</string> </dict> </dict> </dict> 

这样您就不必完全禁用ATS。