[英]Is it possible to disable the network in iOS Simulator?
我正在尝试调试我在从 Inte.net 获取其主要数据的应用程序中看到的一些不一致的行为。 我没有在模拟器中看到问题,只是在设备上,所以我想在模拟器中重现网络和连接环境。
有没有办法在模拟器中禁用 the.network?
(我正在远程连接到 Mac 进行编码,目前没有任何其他选择,因此禁用 OS.network 不是一个选项)。
是的。 在 Xcode 中,您可以转到菜单Open Developer Tools → More Developer Tools并下载“ Additional Tools for Xcode ”,其中将包含 Network Link Conditioner。
使用此工具,您可以模拟不同的网络场景(例如 100% 丢失、3G、高延迟 DNS 等),您也可以创建自己的自定义场景。
恐怕不会——模拟器共享操作系统正在使用的任何网络连接。 不久前,我提交了一份关于模拟网络条件的Radar 错误报告; 你可能会考虑做同样的事情。
我知道在 iOS 模拟器上禁用网络的唯一方法是使用Little Snitch或Hands Off等工具。 使用它们,您可以拒绝/阻止任何传出和传入的网络连接。
您可以将其设置为仅阻止来自模拟器应用程序的连接。 它像防火墙一样工作。
只需在 Mac OS X 中关闭您的 Wi-Fi。这很管用!
从 Xcode 4 (?) 开始, /Applications/Utilities
有一个名为Network Link Conditioner
的首选项窗格。 您可以使用现有配置文件之一,也可以使用 0 kbit/s 上行/下行链路和 100% 下降创建自己的自定义配置文件。
您可以使用Charles等第三方应用程序限制 Internet 连接。
在 Mac 上按Command + Shift + T来设置节流。
一个可能是疯狂的想法或补丁:
只需切换网络可达性标志
这是我用来在运行时通过触发“模拟器内存警告”来切换我的标志的代码,它是完全安全的。 只需确保代码应仅处于调试模式
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
#ifdef DEBUG
isInternetAvailable = !isInternetAvailable;
#endif
}
如果您的应用程序连接到特定域,您只需将其添加到/etc/hosts
文件并将其路由到本地网络中不存在的 IP 地址...没有任何 Internet 连接或无法访问服务器。
sudo nano /etc/hosts
添加以下行:
192.168.1.123 example.com
或者,如果您没有在本地计算机上运行 Web 服务器,请使用127.0.0.1
。
您可以使用Little Snitch切断任何单个进程的网络流量,包括在 iOS 模拟器上运行的进程。 这样您就可以保持 Internet 连接并断开正在运行的应用程序的连接。
我建议您在 Mac 上使用Charles Proxy应用程序。
它允许您使用仅为调整网络连接而创建的带宽限制功能。
开始/停止节流⌘ 命令+ T
油门设置... ⌘ command + T + ⇧ shift
*如果您通过为下载和上传Add Preset
带宽为 0 和 0 的预设来创建自己的预设,则可以模拟没有 Internet 连接。 仅对某些特定主机启用它也非常有用。
作为替代方案,您可以在 Mac 上禁用连接,因为来自模拟器的所有流量都通过您的计算机。
使用 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 连接:
这是最简单的方法。
您可以使用OHHTTPStubs并将网络请求存根到特定 URL 以失败。
一个简单的解决方案是为您的 Mac 创建飞行模式。 以下是如何执行此操作:
当您想重新打开网络时,只需从位置下拉菜单中选择自动,然后单击应用
如果您至少有两个 Wi-Fi 网络要连接,一个非常简单的方法是使用 iOS 模拟器中的一个错误:
错误在于模拟器尝试使用尚未连接的网络(IP?)。
在您重新启动模拟器之前 - 它不会有互联网连接(即使您连接的第一个 Wi-Fi 网络有互联网连接),因此您可以运行( Cmd + R )和停止( Cmd + . )项目以在没有连接的情况下使用模拟器,但您的 Mac 将被连接。
然后,如果您需要运行连接的模拟器 - 只需退出并启动它。
您可以在 Mac 上使用网络链接调节器。 您可以从 Apple 开发者网站下载。 它应该可以在我们获得旧版本的 Xcode 和 iOS 的地方使用。 使用此网络调节器,您可以将网络强度从 Wi-Fi 更改为无网络。
此外,当您安装网络调节器时,它会安装在系统首选项中。
如果您需要破坏您的网络连接,请使用不同的方式查看这些实用程序:
ipfw 或 pfctl (FreeBSD/OSX) - 低级数据包过滤器。 拒绝从本地主机访问端口的示例要禁用 .network,您可以在终端中执行:
pfctl -e
(echo "block all"; pfctl -sr) | pfctl -f -
要停止过滤:
pfctl -d
曾经有Throttle (Mac)通过共享无线网络模拟3G网络。
您可以改为禁用主机的网络!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.