在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。