我正在调试从Internet获取主数据的应用程序中看到的一些不一致的行为。我在模拟器中没有看到问题,只是在设备上,所以我想在模拟器中重现网络和连接环境。
在模拟器中是否有禁用网络的方法?
(我正在远程连接到Mac上编写代码,目前没有其他选择,所以不能禁用操作系统网络)。
我正在调试从Internet获取主数据的应用程序中看到的一些不一致的行为。我在模拟器中没有看到问题,只是在设备上,所以我想在模拟器中重现网络和连接环境。
在模拟器中是否有禁用网络的方法?
(我正在远程连接到Mac上编写代码,目前没有其他选择,所以不能禁用操作系统网络)。
据我所知,在iOS模拟器上禁用网络的唯一方法是使用Little Snitch或Hands Off等工具。有了它们,您可以拒绝/阻止任何传出和传入的网络连接。
你可以设置它,让它只阻止来自模拟器应用程序的连接。它的工作原理就像防火墙一样。
自Xcode 4(?)以来,在/Applications/Utilities中有一个名为Network Link Conditioner的首选项窗格。您可以使用现有的配置文件之一,也可以创建自己的自定义配置文件,使用0 kbit/s的up/downlink和100%的drop。
是的。在Xcode中,你可以打开“打开开发人员工具→更多开发人员工具”菜单,下载“额外的Xcode工具”,其中有网络链接调节器。
使用此工具,您可以模拟不同的网络场景(例如100%丢失、3G、高延迟DNS等),还可以创建自己的自定义场景。
使用一个简单的法拉第笼来阻止或限制外部射频信号电平。
你可以用铝箔纸自己制作。如果您想要阻塞数据服务,那么开口应该小于数据服务的波长。
800兆赫有一个37厘米(14”)的波长 1900兆赫有一个16厘米(6”)的波长。
这在实际设备上比在模拟器上工作得更好,因为Mac在法拉第笼内很难工作;-)
如果你有至少两个Wi-Fi网络连接,一个非常简单的方法是使用iOS模拟器中的一个bug:
退出模拟器(Cmd + Q)如果它是打开的 将Mac连接到一个Wi-Fi接入点(可能没有连接到互联网,但没关系) 启动模拟器(菜单:Xcode→Open Developer Tool→iOS simulator),等待加载 切换Wi-Fi网络到另一个 利润
这个错误是模拟器试图使用一个尚未连接的网络(IP?)。
直到您重新启动模拟器-它将没有互联网连接(即使您连接的第一个Wi-Fi网络有互联网连接),所以您可以运行(Cmd + R)和停止(Cmd + .)项目(s)在没有连接的情况下使用模拟器,但您的Mac将被连接。
然后,如果你需要运行模拟器连接-退出并启动它。
你可以在你的Mac上使用网络链接调节器。你可以从苹果开发者网站下载它。它应该可以在旧版本的Xcode和iOS中使用。有了这个网络调节器,你可以改变网络的强度,从Wi-Fi到无网络。
此外,当您安装网络调节器时,它会安装在系统首选项中。
由于Xcode没有提供这样的功能,你肯定会去找一些第三方应用程序/工具。 关闭Mac网络也将有助于关闭iOS模拟器网络。
你可以在系统设置中关闭你的Mac网络连接…→网络并关闭所需的网络源。
关闭你的Mac以太网Internet源:
关闭你的Mac Wi-Fi网络源(如果你的Mac有Wi-Fi网络连接):
一个可能是疯狂的想法或补丁:
只需切换网络可达性标志
这是我用来在运行时通过触发“模拟器内存警告”切换我的标志的代码,它是完全安全的。只要确保代码应该只处于调试模式
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
#ifdef DEBUG
isInternetAvailable = !isInternetAvailable;
#endif
}
在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需要上网的对话框。这是通过按home键来完成的,这将取消对话并返回到应用程序。
如果你的应用程序连接到一个特定的域,你可以简单地将它添加到你的/etc/hosts文件中,并将它路由到本地网络中不存在的IP地址……对于应用程序来说,就像没有任何Internet连接或服务器不可达一样。
sudo nano /etc/hosts
增加如下一行:
192.168.1.123 example.com
如果您在本地机器上没有运行web服务器,则使用127.0.0.1。
一个简单的解决方案是为你的Mac创建一个飞行模式。 以下是如何做到这一点:
go into Network in System Preferences click on Location dropdown menu click on plus icon to add a new location name the new location 'Airplane Mode' or similar, and click 'Done' select the location you just created from the Location dropdown menu click on each available network interface in the list at the left of the window in turn, disabling each one click on the Configure iPv4 menu, and choose Off for Wi-Fi, just click on the Turn Wi-Fi Off button click Apply, and this location will block all network activity
当您想重新启动网络时,只需从“位置”下拉菜单中选择“自动”,然后单击“应用”
此解决方案的信誉:http://hints.macworld.com/article.php?story=20130325002258846
iOS禁用网络
我建议你使用Mac上的Charles Proxy应用。
它允许您使用仅为调整网络连接而创建的带宽节流功能。
启动/停止节流⌘命令+ T 节流设置…⌘命令+ T + shift
*如果您通过添加带宽为0和0的预设来创建自己的预设用于下载和上传,您可以模拟没有互联网连接。此外,只对某些特定的主机启用它是非常有用的。
作为一种替代方法,你可以禁用Mac上的连接,因为所有来自模拟器的流量都要经过你的计算机。
如果你需要破坏你的网络连接是不同的方式,看看这些utils:
ipfw或pfctl (FreeBSD/OSX) -低级包过滤。拒绝从本地主机访问端口的示例 要关闭网络,可以在终端执行:
pfctl -e
(echo "block all"; pfctl -sr) | pfctl -f -
停止过滤:
pfctl -d
曾经有通过共享无线网络模拟3G网络的Throttle (Mac)。