gpt4 book ai didi

ios - 仅禁用模拟器的应用程序传输安全

转载 作者:行者123 更新时间:2023-12-01 20:21:56 25 4
gpt4 key购买 nike

如何仅在模拟器上运行应用程序时禁用应用程序传输安全性(同时在设备上运行应用程序时仍保持启用状态,即使在 Debug模式下也是如此)?有没有办法用 Swift 代码来禁用它,而不是通过修改 Info.plist 文件?

我这么问是因为我已经配置了一些东西(通过下面的代码片段),以便模拟器连接(通过 HTTP)到本地主机上运行的开发服务器,并且设备连接(通过 HTTPS)到运行在云。

#if arch(x86_64) || arch(i386) // simulator
let apiBaseURLString = "http://localhost:3000"
#else // device
let apiBaseURLString = "https://api.example.com"
#endif

理想情况下,我希望在模拟器上保持应用程序传输安全性启用,并让模拟器通过 HTTPS 连接到在本地主机上运行的开发服务器。我可以正常工作,但我刚刚更新了 Xcode,它就坏了。

最佳答案

应用程序传输安全性是在编译时通过读取 Info.plist 进行配置的。即使您可以在运行时更改 Info.plist(即 you can't ),在运行时更改它实际上不会对 ATS 实现产生影响。

我只能想到两个解决方案:

  1. 模拟器构建配置 - 您可以创建两个版本的 Info.plist,其中一个完全禁用 ATS,另一个用于在设备上运行。然后,您可以创建一个特定的构建配置以在模拟器上运行。在build设置中,选择新的 Info-Simulator.plist 来禁用 ATS。这样做的缺点是,您需要在模拟器上运行之前更改构建配置 - 它不会自动为模拟器与设备使用正确的构建配置。

  2. 模拟器没有不同的 ATS 设置。配置 ATS 以处理模拟器和物理设备。 ATS 异常(exception)有许多选项,适用于大多数场景。本地网络连接需要异常(exception)吗?查看NSAllowsLocalNetworking。需要 WebView 具有更大的灵 active 吗?尝试 NSAllowsArbitraryLoadsInWebContent 。

不幸的是,您可以在运行时检测模拟器,但无法在运行时更改 ATS 行为。您需要找到另一种方法,或者重新评估您是否确实需要在模拟器与设备上进行不同的配置。

关于ios - 仅禁用模拟器的应用程序传输安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43257249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com