是否可以在iOS Simulator中禁用网络?


430

我正在尝试调试在从互联网获取其主要数据的应用程序中看到的一些不一致的行为。我看不到模拟器中的问题,仅在设备上,所以我想在模拟器中重现网络和连接环境。

有什么方法可以在模拟器中禁用网络?

(我正在远程连接Mac进行编码,现在没有其他选择,因此不能选择禁用OS网络)。


我认为您也可以使用CharlesProxy进行类似的测试
蜂蜜

Answers:


273

恐怕没有,模拟器共享操作系统正在使用的任何网络连接。不久前,我提交了一份Radar错误报告,内容涉及模拟网络条件。您可能会考虑这样做。


52
不确定是否响应此雷达错误,但是开发人员工具现在包括网络链接调节器工具。
samvermette 2012年

7
Network Link Conditioner允许您指定要丢弃的数据包的百分比,但是据我所知,遗憾的是无法禁用所有连接。
modocache

11
当前,网络链接调节器允许设置100%的数据包丢失,并且它似乎可以正常工作。
加布里埃尔·彼得罗内拉

4
由于模拟器共享主机的网络连接,因此您可以关闭主机上的Internet以模拟“网络已禁用”。不理想,但是可以。
阿迪尔·侯赛因

5
等等,网络链接调节器适用于整个主机,而不仅仅是模拟器。这有什么用?如果需要,我可以拔掉我的以太网。
sudo

1734

使用简单的法拉第笼来阻止或限制外部RF信号电平。

您可以用铝箔制作自己的。如果这是您要阻止的,则开口应小于数据服务的波长

800 Mhz的波长为37厘米(14英寸),1900 Mhz的波长为16厘米(6英寸)。

与Mac相比,这在实际设备上比在模拟器上更有效,因为在法拉第笼中时Mac很难操作;-)

enter image description here


179
只是一个快速的建议,如果您创建一个带有桌子的步入式法拉第笼,则Mac使用起来会容易得多。
Kevin Laity

86
即使他要求模拟器,您的回答也很有趣
vignesh kumar,

76
既然问题是关于模拟器的,我想我将在Photoshop中制作其中一个并将其设置为我的桌面背景。那可能会起作用,对吧?
蒂莫西·李·罗素

8
这个“窍门”已经被专业人员真正使用:)回到我使用第一代智能手机时,我们曾经使用粗壮的饼干罐。并非所有品牌都能奏效,但那些品牌都完美。
2015年

11
应该被接受为正确答案!(我宁愿使用铅盒包装iKryptonite)
gaussblurinc

309

是。在Xcode中,您可以转到Xcode菜单项-> Open Developer Tools-> More Developer Tools并下载“ Xcode的其他工具 ”,它将带有网络链接调节器。

使用此工具,您可以模拟不同的网络场景(例如100%丢失,3G,高延迟DNS等),还可以创建自己的自定义场景。


7
如果您在开发人员站点上,则位于HARDWARE IO TOOLS FOR XCODE软件包中。
液体

156
不知何故,我更喜欢将设备包装在铝箔中的想法。
Michael Robinson

14
从Xcode 8开始,Network Link Conditioner位于“ 用于Xcode的其他工具 ”包中。
ElegyD

6
而且,100%的损耗会限制主机的连接,因此不是可行的解决方案。如果您准备在没有互联网的情况下进行开发,那么只需拔下开发人员机器上的插头,就会比此解决方案更好。
Jannie Theunissen

7
它正在影响所有的mac。我只想退出模拟器的互联网连接,因为我正在远程使用mac ...
JCarlosR

48

我知道在iOS模拟器上禁用网络的唯一方法是使用Little SnitchHands Off之类的工具。使用它们,您可以拒绝/阻止任何传入和传入的网络连接。您可以对其进行设置,使其仅阻止来自模拟器应用程序的连接。像防火墙一样工作。


11
但这不会使模拟器的行为像您处于脱机状态一样。这只会使您的服务器不可用,这是完全不同的事情。
Blitz

1
实际上,LordT,这可能足以满足我的特定情况……!
保罗·哈蒙德

phix23-在这两个建议的工具之间您有偏好吗?
Paul Hammond

不,我没有。我只尝试过Hands off,因为它具有更多功能。
菲利克斯(Felix)

2
+1:我已经使用Little Snitch来实现此目的,进行测试以确保在网络连接断开的情况下,“模拟”应用程序可以正常工作。
2011年

18

只需在Mac OSX中关闭您的WiFi,就可以了!


1
明确表示这不是一个选择的OP对此没有帮助,但这对我来说是一个完美的简单解决方案。
约翰诺


11

只需将答案更新为当前日期即可。从Xcode 4(?)开始,有一个/Applications/Utilities名为的首选项窗格Network Link Conditioner。您可以使用现有配置文件之一,也可以创建自己的自定义配置文件,其中上/下行链接为0 Kbps,下线百分比为100%。


1
只需添加一下,如果您创建带宽为0的自定义网络设置,它将自动将其设置为最大值。丢掉100%的数据包很重要。
丹尼斯·库特卢巴耶夫

另外,我想补充一点,这种方法不仅可以消除模拟器,还可以消除一切。完全关闭互联网可能更容易。但尽管如此,它还是非常方便的工具,因为您可以模拟不同质量的E和3G互联网。
丹尼斯·库特鲁巴耶夫

这肯定是最好的答案,因为Network Link Conditioner它是Apple的官方工具,与Little Snitch或相比,它是完全免费的Hands Off
fatuhoku 2014年

嗯,看来这个工具确实关闭了所有网络。我还发现它不会触发可达性通知(我使用了github.com/stefanomondino/STMReactiveReachability)。
fatuhoku 2014年

4
警告-NETWORK LINK CONDITIONER工具不仅会影响iPhone模拟器,还会影响整个机器。如果像我使用Xamarin Build Host一样远程访问Mac进行开发,它将终止您的连接。
John Kocktoasten'2

10

由于Xcode不提供此类功能,因此您肯定会选择某些第三方应用程序/工具。关闭MAC网络也将有助于关闭iOS Simulator网络。

您可以从“ System Preferences...”>“ Network” 关闭您的MAC互联网,然后关闭所需的网络源。

要关闭您的MAC以太网Internet源: EtherNet网络源

要关闭您的MAC WiFi Internet源(如果您的MAC在Wifi Internet上): 在此处输入图片说明



6

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

只需切换网络可达性标志

这是我用来通过触发“模拟器内存​​警告”及其完全安全来切换标志运行时的 代码,只需确保代码仅应处于调试模式即可

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

1
我有一个带有静态功能的全局类,用于检查Internet连接。回报false是一个好主意。没有安装,我可以继续远程工作!谢谢。
JCarlosR

在哪里isInternetAvailable定义?
CSawy

@CSawy它的标志,用于在可达性类中发送Internet连接的当前状态。
Darshit Shah

3

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


3

使用Xcode 8.3和iOS 10.3:

XCUIDevice.shared().siriService.activate(voiceRecognitionText: "Turn off wifi")
XCUIDevice.shared().press(XCUIDeviceButton.home)

确保将其包含@available(iOS 10.3, *)在测试套件文件的顶部。

如果愿意,您也可以选择“打开飞行模式”。

一旦Siri关闭wifi或打开“飞行模式”,您将需要关闭Siri对话,说Siri需要互联网。这可以通过按“主页”按钮来完成,该按钮可以取消对话框并返回到您的应用程序。


它可能无法在iOS11GM上运行。我在模拟器中找不到Wifi设置。
Bill Chan

2
现在,可以激活多个应用程序,使用Siri并不是Xcode 9的唯一选择。现在也可以激活iOS设置应用以打开wifi。
brandenbyers


3

如果您的应用程序正在连接到特定域,则只需将其添加到/etc/hosts文件中,然后将其路由到本地网络中不存在的IP ...对于该应用程序,就好像没有互联网连接或服务器无法访问。

sudo nano /etc/hosts

添加以下行:

192.168.1.123   example.com

127.0.0.1如果您不在本地计算机上运行Web服务器,请使用。



1

一个简单的解决方案是为Mac创建飞行模式。这是如何执行此操作:

  • 在系统偏好设置中进入网络
  • 点击位置下拉菜单
  • 单击加号图标以添加新位置
  • 将新位置命名为“飞行模式”或类似名称,然后单击“完成”
  • 从位置下拉菜单中选择刚刚创建的位置
  • 依次单击窗口左侧列表中的每个可用网络接口,禁用每个接口
  • 单击“配置iPv4”菜单,然后选择“关闭”
  • 对于Wi-Fi,只需单击“关闭Wi-Fi”按钮
  • 单击“应用”,此位置将阻止所有网络活动

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


1

我建议您使用Charles Proxy在Mac上应用

它允许您使用 Bandwidth Throttle仅为调整网络连接而创建的功能

星号/停止 油门⌘ command+ T
油门设置... ⌘ command+ T+⇧ shift


0

您可以改为禁用主机的网络!


7
在调试应用程序的连接问题时无法看到StackOverflow是不方便的!
fatuhoku 2014年

阅读问题的最后一行:“(我正在远程连接Mac进行编码,现在没有其他选择,因此禁用OS网络是不可行的)”。此外,本帕尔默(Benpalmer)已经在两年前提出了您的建议。
ToolmakerSteve

0

如果您至少有2个wifi网络可连接,则一种非常简单的方法是使用iOS模拟器中的错误:

  1. 如果模拟器(cmd-q)已打开,请退出
  2. 将Mac连接到一个wifi(没关系,它可能没有连接到互联网)
  3. 启动模拟器(菜单:xCode-> Open Developer Tool-> iOs Simulator)并等待其加载
  4. 切换wifi网络到另一个
  5. 利润

错误是模拟器试图使用尚未连接的网络(IP?)。

在重新启动模拟器之前-它将没有互联网(即使您连接的第一个wifi网络已建立互联网连接),因此您可以运行(cmd-R)和停止(cmd-。)项目以使用没有连接的模拟器,但是您的Mac将被连接。

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


0

您可以在Mac上使用网络链接调节器。您可以从Apple开发人员网站下载它。在获得旧版本的Xcode和iOS的地方应该可以使用它。使用此网络调节器,您可以将网络强度从wifi更改为无网络。

同样,当您安装网络调节器时,它也会安装在系统偏好设置中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.