提问人:Paul Hammond 提问时间:1/27/2011 最后编辑:Peter MortensenPaul Hammond 更新时间:3/20/2022 访问量:346088
是否可以在 iOS 模拟器中禁用网络?
Is it possible to disable the network in iOS Simulator?
问:
我正在尝试调试我在从 Internet 获取其主要数据的应用程序中看到的一些不一致的行为。我在模拟器中没有看到问题,只是在设备上,所以我想在模拟器中重现网络和连接环境。
有没有办法在模拟器中禁用网络?
(我正在远程连接到 Mac 进行编码,现在没有任何其他选择,因此禁用操作系统网络不是一种选择)。
答:
恐怕不是 - 模拟器共享操作系统正在使用的任何网络连接。不久前,我提交了一份关于模拟网络条件的雷达错误报告;您可以考虑做同样的事情。
评论
在我所知道的 iOS 模拟器上禁用网络的唯一方法是使用 Little Snitch 或 Hands Off 等工具。有了它们,您可以拒绝/阻止任何传出和传入的网络连接。
您可以对其进行设置,使其仅阻止来自模拟器应用的连接。它就像防火墙一样工作。
评论
只需在 Mac OS X 中关闭 Wi-Fi 即可。这是一种享受!
评论
从 Xcode 4 (?) 开始,有一个名为 .您可以使用现有的配置文件之一,也可以创建自己的自定义配置文件,上行/下行链路速率为 0 kbit/s,丢弃率为 100%。/Applications/Utilities
Network Link Conditioner
评论
Network Link Conditioner
Little Snitch
Hands Off
是的。在 Xcode 中,您可以转到菜单“打开开发人员工具”→“更多开发人员工具”并下载“Xcode 的其他工具”,其中将具有网络链接调节器。
使用此工具,您可以模拟不同的网络场景(例如 100% 丢失、3G、高延迟 DNS 等),也可以创建自己的自定义场景。
评论
SCNetworkReachabilityFlags
.Reachable
使用简单的法拉第笼来阻挡或限制外部射频信号电平。
您可以用铝箔制作自己的。如果要阻止数据服务的波长,则开口应小于数据服务的波长。
- 800 MHz 具有 37 厘米(14 英寸)波长
- 1900 MHz 的波长为 16 厘米(6 英寸)。
这在实际设备上比在模拟器上效果更好,因为 Mac 在法拉第笼内很难工作;
评论
您可以禁用主机的网络!
评论
您可以使用第三方应用程序(如 Charles)限制 Internet 连接。
在 Mac 上按 + + 设置限制。CommandShiftT
您可以使用 OHHTTPStubs 并将网络请求存根到特定 URL 以失败。
如果您至少有两个Wi-Fi网络要连接,一个非常简单的方法是在iOS模拟器中使用错误:
- 如果模拟器处于打开状态,则退出模拟器 ( + )CmdQ
- 将 Mac 连接到一个 Wi-Fi 接入点(它可能未连接到互联网,但没关系)
- 启动模拟器(菜单:Xcode → Open Developer Tool → iOS Simulator)并等待加载
- 将 Wi-Fi 网络切换到另一个网络
- 利润
错误是模拟器尝试使用尚未连接的网络 (IP?)。
在重新启动模拟器之前 - 它将没有 Internet 连接(即使您连接的第一个 Wi-Fi 网络有 Internet 连接),因此您可以运行 (+) 和停止 (+) 项目以在没有连接的情况下使用模拟器,但您的 Mac 将连接。CmdRCmd.
然后,如果您需要运行连接的模拟器 - 只需退出并启动它即可。
您可以使用 Little Snitch 切断任何单个进程的网络流量,包括在 iOS 模拟器上运行的进程。这样,您可以保持 Internet 连接并断开正在运行的应用程序。
您可以在 Mac 上使用网络链接调节器。您可以从 Apple 开发者网站下载它。它应该在我们获得旧版本的 Xcode 和 iOS 的地方可用。使用此网络调节器,您可以将网络强度从 Wi-Fi 更改为无网络。
此外,当您安装网络调节器时,它会安装在系统偏好设置中。
由于 Xcode 不提供这样的功能,您肯定会选择一些第三方应用程序/工具。 关闭 Mac 网络也有助于关闭 iOS 模拟器网络。
您可以从“系统偏好设置...”→“网络”中关闭 Mac Internet 连接,然后关闭所需的网络源。
要关闭 Mac Wi-Fi 互联网源(如果您的 Mac 处于 Wi-Fi 互联网连接中):
一个可能疯狂的想法或补丁:
只需切换网络可访问性的标志
这是我用来在运行时通过触发“模拟器内存警告”来切换我的标志的代码,它是完全安全的。只需确保代码应仅处于调试模式即可
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
#ifdef DEBUG
isInternetAvailable = !isInternetAvailable;
#endif
}
评论
false
isInternetAvailable
下载其他工具包(网络链路调节器)
评论
在 Xcode 8.3 和 iOS 10.3 中:
XCUIDevice.shared().siriService.activate(voiceRecognitionText: "Turn off Wi-Fi")
XCUIDevice.shared().press(XCUIDeviceButton.home)
请务必包含在测试套件文件的顶部。@available(iOS 10.3, *)
如果您愿意,也可以“打开飞行模式”。
一旦 Siri 关闭 Wi-Fi 或打开飞行模式,您将需要关闭 Siri 对话框,该对话框显示 Siri 需要互联网。这是通过按下主页按钮来完成的,该按钮会关闭对话框并返回到您的应用程序。
评论
有两种方法可以禁用 iOS 模拟器的 Internet 连接:
- 拔下网络连接
- 关闭 Wi-Fi
这是最简单的方法。
评论
如果您的应用程序正在连接到特定域,您只需将其添加到您的文件中,然后将其路由到本地网络中不存在的 IP 地址...对于应用程序,它将与没有任何 Internet 连接或无法访问服务器相同。/etc/hosts
sudo nano /etc/hosts
添加以下行:
192.168.1.123 example.com
或者,如果您未在本地计算机上运行 Web 服务器,请使用。127.0.0.1
评论
一个简单的解决方案是为您的 Mac 创建飞行模式。 操作方法如下:
- 进入“系统偏好设置”中的“网络”
- 点击位置下拉菜单
- 单击加号图标以添加新位置
- 将新位置命名为“飞行模式”或类似名称,然后单击“完成”
- 从位置下拉菜单中选择您刚刚创建的位置
- 依次单击窗口左侧列表中的每个可用网络接口,禁用每个网络接口
- 单击“配置 iPv4”菜单,然后选择“关闭”
- 对于 Wi-Fi,只需单击“关闭 Wi-Fi”按钮
- 单击“应用”,此位置将阻止所有网络活动
如果要重新打开网络,只需从“位置”下拉菜单中选择“自动”,然后单击“应用”
iOS 禁用网络
我建议您在 Mac 上使用 Charles Proxy 应用程序。
它允许您使用仅为调整网络连接而创建的带宽限制功能。
启动/停止节流 +
节流设置...⌘ commandT⌘ command + T + ⇧ shift

*如果您创建自己的预设,带宽为 0 和 0 用于下载和上传,您可以模拟没有互联网连接。此外,仅为某些特定主机启用它也非常有用。Add Preset
作为替代方案,您可以在 Mac 上禁用连接,因为来自 Simulator 的所有流量都通过您的计算机。
如果你需要破坏你的网络连接是不同的方式,看看这些工具:
ipfw 或 pfctl (FreeBSD/OSX) - 低级数据包过滤器。拒绝从 localhost 访问端口的示例 要禁用网络,您可以在终端中执行:
pfctl -e
(echo "block all"; pfctl -sr) | pfctl -f -
要停止筛选,请执行以下操作:
pfctl -d
曾经有Throttle(Mac)通过共享无线网络模拟3G网络。
评论