应用传输安全和iOS9中的IP地址

我使用我的开发箱上运行的本地服务器开发我的iOS应用程序。 在设备上进行testing时,我直接通过IP地址(通过HTTP而不是HTTPS)进行连接(所以我不必在开发过程中处理自签名的证书,而设备甚至不会喜欢)。

我以为这样就足够了:

在这里输入图像说明

但是,如果不添加NSAllowsArbitraryLoads = YES ,也无法使其工作,也就是:

在这里输入图像说明

现在,我将不得不记住在生产版本中删除,而不是在开发过程中删除… arg。 如果NSExceptionDomains与IP地址NSExceptionDomains工作,如果没有,还有什么我可以做,而不启用NSAllowsArbitraryLoads

硬编码的IP地址不会在iOS9中工作。 我也面临同样的问题。 尝试了所有可用解决scheme的排列组合。 最后,不得不使用适当的域名。

所以,不。在iOS9中,你无法脱离硬编码的IP地址。

除了启用NSAllowsArbitraryLoads还有什么我可以做的吗?

一个解决方法是使用xip.io ,正如QJeffR在这个Apple开发者论坛主题 (由David L在他的评论中共享)中所解释的:

对(例如) 10.0.1.8.xip.io的 DNS调用将parsing为10.0.1.8 ,允许使用NSExceptionDomains密钥的域而不是IP地址。

由于@PanxShaz说你不能把一个硬编码的IP地址,但你可以使用一个简单的解决方法:

  1. 使用sudo打开你的/etc/hosts文件,为你的ip地址添加一个新的本地域名。 例:

    192.168.99.100 docker-host.localhost

  2. 然后刷新你的DNS:

    dscacheutil -flushcache

  3. 最后在您的应用程序传输安全例外中使用这个新的本地域名。

如果您的目标是iOS 10+,只需设置NSAllowsLocalNetworking标志。