NSExceptionAllowsInsecureHTTPLoads不能用于IP地址

排除iOS 9上的ATS不适用于我。

我有一个testing服务器没有域名(只有IP地址),没有SSL证书(所以它是HTTP而不是HTTPS)

尝试:

<key>52.24.145.252</key> <dict> <key>NSExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSIncludesSubdomains</key> <true/> </dict> 

但是我仍然得到错误:

 App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file. 

我究竟做错了什么?

您需要将NSAppTransportSecurity字典添加到您的info.plist 。 然后将NSAllowsArbitraryLoads键添加到该字典并将布尔值设置为YES

ATS选择退出

更新

从2017年1月起,如果您使用上述方法从ATS退出,则需要在向AppStore提交应用程序时向Apple提供理由。

应用程序传输安全性要求2017年1月

尝试这个:

在这里输入图像说明

或者,作为源代码:

 <key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>domain.com</key> <dict> <key>NSExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSIncludesSubdomains</key> <true/> </dict> </dict> </dict> 

就像它在iOS 9.1中的工作(给定你的域是正确的)。

实际上,真正的问题是,在iOS 9中,ATS例外不适用于IP地址。 它只适用于域名。 完全closuresATS是一个糟糕的主意,如果您希望在2016年12月31日之后提交给应用程序商店,将​​会导致您作出该决定的理由。

不幸的是,没有一个很好的解决scheme,试图获取您试图连接到的服务器的域名。

其他人已经成功地使用xip.io服务将本地IP地址“转换”为域名。 所以你可以将xip.io添加到Exception域,将NSIncludesSubdomains设置为true。 然后当你连接到你的域名,而不是连接到52.24.145.252你会连接到52.24.145.252.xip.io