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

580

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

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

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


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

2188

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

您可以使用铝箔制作自己的法拉第笼。如果您想屏蔽数据服务,则开口应小于其波长

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

与模拟器相比,这在实际设备上运行效果更好,因为Mac在法拉第笼内难以操作 ;-)

Enter image description here


278
一个快速的建议,如果你在一个步入式法拉第笼内放置一张桌子,那么Mac将更容易使用。 - Kevin Laity
142
你的回答很有趣,尽管他请求的是模拟器。 - vignesh kumar
147
既然问题是关于模拟器的,我想我会在Photoshop中制作��个,并将其设置为桌面背景。那应该能行,对吧? - Timothy Lee Russell
16
这个“技巧”确实被专业人士使用过 :) 在我工作于第一代智能手机时,我们曾经使用结实的饼干锡罐。并非所有品牌都可用,但那些可用的是完美的选择。 - Will
21
应该被接受为正确答案!(我更愿意使用铅盒来存放iKryptonite) - gaussblurinc
显示剩余12条评论

421

可以。在 Xcode 中,您可以转到菜单 打开开发者工具更多开发者工具 ,并下载“Additional Tools for Xcode”,其中包含了网络链接限制器。

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


7
如果您在开发者网站上,该软件包位于“Xcode的硬件IO工具”中。 - liquid
265
我更喜欢用锡纸包裹我的设备这个想法。 - Michael Robinson
20
自从Xcode 8版本以后,“网络链接条件”工具被包含在“Xcode附加工具”中。 - ElegyD
10
同时,100% 的丢包率会限制主机的连接速度,因此这并不是一个实用的解决方案。如果你准备在没有网络的情况下进行开发,那么直接拔掉开发机的电源比使用这种解决方案要好。 - Jannie Theunissen
18
它正在影响所有的Mac电脑。我想仅针对模拟器退出互联网连接,因为我是远程使用这台Mac电脑... - JCarlosR
显示剩余12条评论

304

很抱歉,模拟器与操作系统使用的网络连接是共享的。我之前提交过一个关于模拟网络条件的Radar错误报告,你也可以考虑提交一个。


56
不确定是否是为了响应这个雷达漏洞,但是开发人员工具现在包括了一个网络链路调节器工具。 - samvermette
8
网络连接调节器允许你指定要丢弃的数据包的百分比,但据我所见,不幸的是目前没有办法完全禁用所有连接。 - Brian Gesiak
11
目前的 Network Link Conditioner 工具允许设置100%的数据包丢失,看起来它是有效的。 - Gabriele Petronella
6
由于模拟器共享主机机器的网络连接,您可以关闭主机机器上的互联网连接来模拟“网络禁用”。虽然不是理想情况,但它能够起作用。 - Adil Hussain
12
等等,网络连接调节器适用于整个主机而不仅仅是模拟器。这有什么用?如果我想要那样做,我可以只是拔掉以太网线。 - sudo
显示剩余6条评论

49

我所了解的禁用iOS模拟器网络的唯一方法是使用工具,例如Little SnitchHands Off。通过这些工具,您可以拒绝/阻止任何出站和入站网络连接。

您可以设置它仅阻止来自模拟器应用程序的连接。 它的工作方式类似于防火墙。


15
但这并不能使模拟器表现得像你离线一样。它只会使你的服务器不可用,这是完全不同的事情。 - Blitz
1
实际上,LordT,对于我所面临的具体情况来说,这可能已经足够了! - Paul Hammond
phix23 - 你对那两个建议的工具有偏好吗? - Paul Hammond
没有,我只尝试过Hands off,因为它有更多的功能。 - Felix
2
+1:我曾经使用过Little Snitch来测试模拟应用程序在网络连接中断的情况下是否正常工作。 - hotpaw2

26

24
这也会限制主机的连接,就像拔掉开发者电脑的插头一样,没有协作或互联网参考。因此,这不是一个实用的解决方案。 - Jannie Theunissen
1
@JannieTheunissen 你似乎喜欢法拉第笼:)这是问题的答案,而且它有效。 - Nike Kov
1
你的回答非常棒,我给你点赞。我的评论只对使用苹果电脑的人有帮助(就像我一样来这里寻找解决方案),但对于提问者的特定情况,向你致敬! - Jannie Theunissen

25

只需在 Mac OS X 中关闭 Wi-Fi 即可。这很有效!


2
不帮助那位明确表示这不是选项的OP,但对我来说,这是一个完美的简单解决方案。 - Johno
当你同时连接有线和无线网络时,禁用其中一个会导致问题。为了让AirPlay等功能正常工作,通常需要启用WiFi。 - grego

15

由于Xcode没有提供此功能,您肯定会选择一些第三方应用程序/工具。 关闭Mac网络也将有助于关闭iOS模拟器网络。

您可以从系统偏好设置...网络关闭Mac的Internet连接并关闭所需的网络源。

关闭Mac以太网互联网来源: Ethernet Network Source

关闭您的Mac Wi-Fi互联网源(如果您的Mac正在使用Wi-Fi互联网连接): Enter image description here


10

自从Xcode 4 (?)以来,在/Applications/Utilities中有一个名为Network Link Conditioner的首选项面板。您可以使用现有配置文件之一,或者创建自己的自定义配置文件,其中上下行链路速度为0 kbit/s,且100%数据包丢失。


1
只是想补充一下,如果您使用0带宽创建自定义网络设置,则会自动将其视为最大值。重要的是要设置100%的数据包丢失率。 - Denis Kutlubaev
另外,我想补充的是,这种方法可以从所有设备中移除互联网,而不仅仅是模拟器。也许完全关闭互联网可能更容易。但无论如何,这是非常方便的工具,因为您可以模拟不同质量的E和3G互联网。 - Denis Kutlubaev
这肯定是最佳答案,因为Network Link Conditioner是官方的苹果工具,而且完全免费,相比之下Little Snitch或者Hands Off就不同了。 - fatuhoku
嗯,看起来这个工具确实会关闭所有网络。我还发现它不会触发可达性通知(我使用了https://github.com/stefanomondino/STMReactiveReachability)。 - fatuhoku
6
请注意 - 网络链接调节工具会影响整台机器,而不仅仅是iPhone模拟器。如果像我一样通过Xamarin Build Host远程连接到您的Mac进行开发,它会中断您的连接。 - John Kocktoasten
@JohnKocktoasten 你用什么工具?我也在远程工作,无法只为模拟器关闭wifi。 - JCarlosR

10
如果你的应用程序正在连接到特定的域名,你可以将其添加到/etc/hosts文件中,并将其路由到本地网络中不存在的IP地址... 对于应用程序来说,这就像没有任何互联网连接或者服务器无法访问一样。
sudo nano /etc/hosts

请添加以下代码行:
192.168.1.123   example.com

如果您的本地计算机上没有运行Web服务器,则可以使用127.0.0.1


1
太棒了,厉害的技巧! - Mohammad Reza Koohkan

8

iOS禁用网络

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

它允许使用专门为调整网络连接而创建的带宽限制功能。

开始/停止限制 ⌘ command + T
限制设置... ⌘ command + T + ⇧ shift

*如果您通过添加预设创建自己的预设,下载和上传的带宽都设置为0,则可以模拟没有互联网连接。对于仅针对某些特定主机启用它非常有用。

作为替代方案,您可以在Mac上禁用连接,因为模拟器中的所有流量都通过您的计算机。


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