在 iOS 模拟器中是否可以禁用网络?

580

我正在尝试调试一款从互联网获取主要数据的应用程序,发现其行为不一致。在模拟器中不存在此问题,仅在设备上存在,因此我想在模拟器中复制网络和连接环境。

是否有一种方法可以在模拟器中禁用网络?

(我通过远程连接到Mac进行编码,当前没有其他选择,因此禁用操作系统网络不是一个选项)。


我认为你也可以使用CharlesProxy来运行类似的测试。 - mfaani
另外一个选项就是在网络检查工具函数中简单地返回false。 - jeff ayan
21个回答

7
你可以使用第三方应用程序(例如Charles)来限制互联网连接速度。

在Mac上,按下 Command + Shift + T 来设置限速。


5
你可以使用 Little Snitch 切断任何单独进程的网络流量,包括在 iOS 模拟器上运行的进程。这样你就可以保持互联网连接并断开正在运行的应用程序。

5

一个可能有点疯狂的想法或补丁:

切换网络可达性标志

这是我用来在运行时通过触发“模拟器内存警告”来切换我的标志的代码,它是完全安全的。只需确保代码仅在调试模式下运行。

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
#ifdef DEBUG
    isInternetAvailable = !isInternetAvailable;
#endif
}

1
我有一个全局类,其中包含一个检查互联网连接的静态函数。返回false是个好主意。无需安装,我可以继续远程工作!谢谢。 - JCarlosR
1
这个 isInternetAvailable 是在哪里定义的?! - CSawy
@CSawy 它是一个标志,用于在可达性类中发送当前互联网连接状态。 - Darshit Shah

3
使用 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需要互联网。这可以通过按Home按钮来完成,这样可以关闭对话框并返回到您的应用程序中。

1
它可能无法在iOS11GM上运行。我在模拟器中找不到Wifi设置。 - Bill Chan
2
现在有了 Xcode 9,使用 Siri 不是唯一的选择,因为现在可以激活多个应用程序。激活 iOS 设置应用程序以关闭 wifi 现在也可以实现。 - brandenbyers

2

禁用iOS模拟器的网络连接有两种方法:

  • 拔掉网络连接
  • 关闭Wi-Fi

这是最简单的方法。


7
欢迎来到幼儿园 - Farid

2
您可以使用OHHTTPStubs来模拟网络请求失败的情况。

1

你可以在Mac上使用网络链接调节器。你可以从苹果开发者网站下载它。它应该可以在我们获取旧版本的Xcode和iOS的地方找到。通过这个网络调节器,你可以将网络强度从Wi-Fi改变为无网络。

此外,当你安装网络调节器时,它会被安装在系统偏好设置中。


1
一个简单的解决方案是为您的Mac创建一个飞行模式。 以下是如何操作:
  • 进入系统偏好设置中的网络
  • 单击位置下拉菜单
  • 单击加号图标以添加新位置
  • 将新位置命名为“飞行模式”或类似名称,并单击“完成”
  • 从位置下拉菜单中选择刚刚创建的位置
  • 依次单击窗口左侧列表中的每个可用网络接口,将其禁用
  • 单击配置iPv4菜单,并选择关闭
  • 对于Wi-Fi,只需单击“关闭Wi-Fi”按钮
  • 单击应用,此位置将阻止所有网络活动

当您想要重新启用网络时,只需从位置下拉菜单中选择自动,然后单击应用即可。


0

如果你有至少两个Wi-Fi网络需要连接,一种非常简单的方法是使用iOS模拟器中的一个漏洞:

  1. 退出模拟器(Cmd + Q),如果它已经打开
  2. 将您的Mac连接到一个Wi-Fi接入点(它可能没有连接到互联网,但这并不重要)
  3. 启动模拟器(菜单:Xcode → 打开开发人员工具iOS模拟器),等待加载完成
  4. 切换到另一个Wi-Fi网络
  5. 获得利润

该漏洞在于模拟器尝试使用一个未连接的网络(IP?)。

在重新启动模拟器之前,它将没有互联网连接(即使您连接的第一个Wi-Fi网络已经连接到互联网),因此您可以运行(Cmd + R)和停止(Cmd + .)项目以在没有连接的情况下使用模拟器,但是您的Mac将保持连接状态。

然后,如果您需要运行连接的模拟器 - 只需退出并重新启动它。


0
如果您需要以不同的方式破坏网络连接,请查看以下实用工具:
- ipfw或pfctl(适用于FreeBSD / OSX)- 低级数据包过滤器。拒绝本地主机访问端口的示例。
要禁用网络,可以在终端中执行以下操作:
pfctl -e
(echo "block all"; pfctl -sr) | pfctl -f -

停止过滤:

pfctl -d

曾经有一个名为Throttle(Mac)的工具,可以通过共享无线网络模拟3G网络。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接