应用传输安全和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地址,但你可以使用一个简单的解决方法:
-
使用
sudo
打开你的/etc/hosts
文件,为你的ip地址添加一个新的本地域名。 例:192.168.99.100 docker-host.localhost
-
然后刷新你的DNS:
dscacheutil -flushcache
-
最后在您的应用程序传输安全例外中使用这个新的本地域名。
如果您的目标是iOS 10+,只需设置NSAllowsLocalNetworking标志。