【发布时间】:2017-09-01 14:32:58
【问题描述】:
如何仅当我在模拟器上运行我的应用程序时禁用应用程序传输安全性(同时在我的设备上运行我的应用程序时仍保持启用它,即使在调试模式下也是如此)?有没有办法使用 Swift 代码而不是修改 Info.plist 文件来禁用它?
我问是因为我已经配置了一些东西(通过下面的代码 sn-p),以便模拟器(通过 HTTP)连接到在 localhost 上运行的开发服务器,并且设备(通过 HTTPS)连接到生产服务器在云端运行。
#if arch(x86_64) || arch(i386) // simulator
let apiBaseURLString = "http://localhost:3000"
#else // device
let apiBaseURLString = "https://api.example.com"
#endif
理想情况下,我希望在模拟器上启用 App Transport Security,并让模拟器通过 HTTPS 连接到在 localhost 上运行的开发服务器。我有这个工作,但我刚刚更新了 Xcode,它坏了。
【问题讨论】:
-
您这样做的理由是什么?在模拟器与设备中运行时,您是否访问不同的 URL。否则,您现在最好添加任何适当的 ATS 例外,这样您就不会将问题推到设备测试时。我不相信有办法在运行时更改 Info.plist,因为它是捆绑包的一部分,并且捆绑包不应该被更改。我认为更简单的解决方案是使用它自己的 Info.plist 创建一个新的模拟器特定构建配置。
-
我认为您应该在我的回答中查看选项 2,特别是“NSAllowsLocalNetworking”。
-
好的。我将会。谢谢你。另外,我刚刚为我的问题添加了理想的解决方案。
-
我假设您的开发服务器 ssl 连接使用的是自签名证书?这些可能很棘手。我认为您最好的选择是将本地网络异常添加到您的 info.plist。或者想办法恢复到开发服务器的有效 ssl 连接。
-
是的,它使用的是自签名证书。我想我遵循了这个:github.com/seviu/iOS-SSL-localhost。好的。谢谢你。 :-)
标签: ios xcode simulator app-transport-security