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

App Transport Security and IP addresses in iOS9

我在我的开发箱上使用本地服务器 运行 开发我的 iOS 应用程序。在设备上进行测试时,我直接通过 IP 地址连接,该地址通过 HTTP 而不是 HTTPS(因此我在开发过程中不必处理自签名证书,设备无论如何都不会喜欢)。

我认为这就足够了:

但是,如果不添加 NSAllowsArbitraryLoads = YES,也就是这样:

,就无法让它工作

现在,我将不得不记住在滚动生产构建时而不是在开发期间删除它...arg。 NSExceptionDomains 是否应该使用 IP 地址,如果不能,在不启用 NSAllowsArbitraryLoads 的情况下还有什么我可以做的吗?

硬编码 IP 地址在 iOS9 中不起作用。我也遇到了同样的问题。 尝试了可用解决方案的所有排列和组合。 最后,不得不使用一个合适的域名。

因此,NO.In iOS9 您无法摆脱硬编码的 IP 地址。

is there anything else I can do without also enabling NSAllowsArbitraryLoads?

一种解决方法是使用 xip.io, as explained by QJeffR in this Apple Developer Forums thread (which was shared by David L in ):

A DNS call to (for example) 10.0.1.8.xip.io will resolve to 10.0.1.8, allowing use of the domain instead of the IP address for the NSExceptionDomains key.

正如@PanxShaz 所说,您不能输入硬编码的 IP 地址,但您可以使用一个简单的解决方法:

  1. 使用 sudo 打开您的 /etc/hosts 文件并为您的 IP 地址添加一个新的本地域名。示例:

    192.168.99.100 docker-host.localhost

  2. 然后刷新你的 DNS :

    dscacheutil -flushcache

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

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