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

Is it possible to disable the network in iOS Simulator?

提问人:Paul Hammond 提问时间:1/27/2011 最后编辑:Peter MortensenPaul Hammond 更新时间:3/20/2022 访问量:346088

问:

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

有没有办法在模拟器中禁用网络?

(我正在远程连接到 Mac 进行编码,现在没有任何其他选择,因此禁用操作系统网络不是一种选择)。

ios iphone 调试 网络 ios-simulator

评论

0赞 mfaani 9/24/2019
我认为您也可以使用 CharlesProxy 来运行类似的测试
0赞 jeff ayan 11/17/2022
另一个选项是在网络检查 util 函数中返回 false。

答:

304赞 Noah Witherspoon 1/27/2011 #1

恐怕不是 - 模拟器共享操作系统正在使用的任何网络连接。不久前,我提交了一份关于模拟网络条件的雷达错误报告;您可以考虑做同样的事情。

评论

56赞 samvermette 4/6/2012
不确定它是否是为了响应此雷达错误,但开发人员工具现在包括一个网络链接调节器工具。
8赞 Brian Gesiak 4/9/2012
Network Link Conditioner 允许您指定要丢弃的数据包百分比,但据我所知,不幸的是,没有办法禁用所有连接。
11赞 Gabriele Petronella 10/24/2013
目前,Network Link Conditioner 允许设置 100% 丢包,并且似乎有效。
6赞 Adil Hussain 7/21/2016
由于模拟器共享主机的网络连接,因此您可以关闭主机上的互联网以模拟“网络禁用”。不理想,但它有效。
12赞 sudo 5/25/2017
等等,Network Link Conditioner 适用于整个主机,而不仅仅是模拟器。这有什么用?如果我想的话,我可以拔掉我的以太网。
49赞 Felix 1/27/2011 #2

在我所知道的 iOS 模拟器上禁用网络的唯一方法是使用 Little SnitchHands Off 等工具。有了它们,您可以拒绝/阻止任何传出和传入的网络连接。

您可以对其进行设置,使其仅阻止来自模拟器应用的连接。它就像防火墙一样工作。

评论

15赞 Blitz 1/27/2011
但这不会使模拟器表现得像您处于离线状态。它只会使您的服务器不可用,这是完全不同的事情。
1赞 Paul Hammond 1/27/2011
实际上,LordT,对于我所拥有的特定情况来说,这可能已经足够了......!
0赞 Paul Hammond 1/27/2011
phix23 - 你对这两个建议的工具有偏好吗?
0赞 Felix 1/27/2011
不,我没有。我只尝试过 Hands off,因为它具有更多功能。
2赞 hotpaw2 1/27/2011
+1 : 我正是出于这个目的使用了 Little Snitch,测试以确保模拟应用程序在网络连接中断时正常工作。
25赞 benpalmer 5/12/2011 #3

只需在 Mac OS X 中关闭 Wi-Fi 即可。这是一种享受!

评论

2赞 Johno 2/28/2013
对 OP 没有帮助,他明确表示这不是一个选项,但这对我来说是一个完美的简单解决方案。
0赞 grego 7/1/2020
当您也是硬连线时,这是一个问题,然后您必须禁用两者。即使有线以使 AirPlay 等功能正常工作,Wifi 也经常启用。
10赞 user207616 3/1/2012 #4

从 Xcode 4 (?) 开始,有一个名为 .您可以使用现有的配置文件之一,也可以创建自己的自定义配置文件,上行/下行链路速率为 0 kbit/s,丢弃率为 100%。/Applications/UtilitiesNetwork Link Conditioner

评论

1赞 Denis Kutlubaev 8/29/2012
只想补充一点,如果您创建带宽为 0 的自定义网络设置,它会自动将其假定为最大值。放置 100% 的数据包丢失很重要。
0赞 Denis Kutlubaev 8/29/2012
另外,我想补充一点,这种方法从所有东西中删除了互联网,而不仅仅是模拟器。也许完全关闭互联网会更容易。但尽管如此,它仍然是非常方便的工具,因为您可以模拟不同质量的 E 和 3G 互联网。
0赞 fatuhoku 9/9/2014
这肯定是最好的答案,因为它是Apple的官方工具,并且与或相比,它是完全免费的。Network Link ConditionerLittle SnitchHands Off
0赞 fatuhoku 9/9/2014
嗯,看起来这个工具确实关闭了所有东西的网络。我还发现它不会触发可访问性通知(我用 github.com/stefanomondino/STMReactiveReachability)。
6赞 John Kocktoasten 2/11/2015
警告 - NETWORK LINK CONDITIONER 工具会影响整个机器,而不仅仅是 iPhone 模拟器。如果你远程进入你的 mac 进行开发,就像我使用 Xamarin Build Host 所做的那样,它将终止你的连接。
422赞 swathy valluri 5/31/2012 #5

是的。在 Xcode 中,您可以转到菜单“打开开发人员工具”→“更多开发人员工具”并下载“Xcode 的其他工具”,其中将具有网络链接调节器。

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

评论

7赞 liquid 7/22/2012
如果你在 developersite 上,它位于 HARDWARE IO TOOLS FOR XCODE 包中。
2赞 Gobe 2/16/2016
这是一个很好的工具,但不幸的是,我发现在使用该工具的“100% Loss”配置文件时包含该标志;而不是真正的断开连接状态。SCNetworkReachabilityFlags.Reachable
20赞 ElegyD 3/14/2017
从 Xcode 8 开始,Network Link Conditioner 位于“Additional Tools for Xcode”软件包中。
10赞 Jannie Theunissen 5/16/2017
此外,100% 的损失会限制主机的连接,因此不是一个实用的解决方案。如果您准备在没有互联网的情况下进行开发,那么只需拔掉开发人员计算机上的插头就比此解决方案更好。
18赞 JCarlosR 5/21/2017
它正在影响所有 mac。我只想退出模拟器的互联网连接,因为我正在远程使用 mac ......
2193赞 progrmr 12/12/2012 #6

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

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

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

这在实际设备上比在模拟器上效果更好,因为 Mac 在法拉第笼内很难工作;

Enter image description here

评论

279赞 Kevin Laity 4/16/2013
只是一个快速的建议,如果你创建一个带有桌子的步入式法拉第笼,Mac将更容易使用。
143赞 vignesh kumar 5/30/2013
你的回答很有趣,即使他要求模拟器
147赞 Timothy Lee Russell 10/27/2014
由于问题是关于模拟器的,我想我只需在 Photoshop 中制作其中一个并将其设置为我的桌面背景。这可能会奏效,对吧?
16赞 Will 12/15/2015
这个“伎俩”已被专业人士真正使用:)当我研究第一代智能手机时,我们曾经使用粗壮的饼干罐。并非所有品牌都有效,但那些成功了的品牌是完美的。
21赞 gaussblurinc 3/5/2016
应该被接受为正确答案!(我宁愿使用铅盒来表示氪石)
-2赞 wshcdr 6/3/2013 #7

您可以禁用主机的网络!

评论

10赞 fatuhoku 9/9/2014
在调试应用的连接问题时看不到 StackOverflow 很不方便!
0赞 ToolmakerSteve 12/7/2015
阅读问题的最后一行:“(我正在远程连接到 Mac 进行编码,现在别无选择,因此禁用操作系统网络不是一种选择)”。此外,你的建议在两年前就已经由benpalmer给出了。
0赞 Farid 1/13/2023
实际上还有 5 个答案,就像这个一样,但它们都至少有 2 个赞成票。看来你只是运气不好,哈哈
7赞 mabounassif 11/13/2013 #8

您可以使用第三方应用程序(如 Charles)限制 Internet 连接。

在 Mac 上按 + + 设置限制。CommandShiftT

2赞 mwhuss 5/15/2014 #9

您可以使用 OHHTTPStubs 并将网络请求存根到特定 URL 以失败。

0赞 iGore 1/28/2015 #10

如果您至少有两个Wi-Fi网络要连接,一个非常简单的方法是在iOS模拟器中使用错误:

  1. 如果模拟器处于打开状态,则退出模拟器 ( + )CmdQ
  2. 将 Mac 连接到一个 Wi-Fi 接入点(它可能未连接到互联网,但没关系)
  3. 启动模拟器(菜单:Xcode → Open Developer TooliOS Simulator)并等待加载
  4. 将 Wi-Fi 网络切换到另一个网络
  5. 利润

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

在重新启动模拟器之前 - 它将没有 Internet 连接(即使您连接的第一个 Wi-Fi 网络有 Internet 连接),因此您可以运行 (+) 和停止 (+) 项目以在没有连接的情况下使用模拟器,但您的 Mac 将连接。CmdRCmd.

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

5赞 Eran Goldin 2/9/2016 #11

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

1赞 Astha Trivedi 2/14/2016 #12

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

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

15赞 Ali 2/24/2016 #13

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

您可以从“系统偏好设置...”“网络”中关闭 Mac Internet 连接,然后关闭所需的网络源。

要关闭 Mac 以太网 Internet 源: Ethernet Network Source

要关闭 Mac Wi-Fi 互联网源(如果您的 Mac 处于 Wi-Fi 互联网连接中): Enter image description here

5赞 Darshit Shah 9/8/2016 #14

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

只需切换网络可访问性的标志

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

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

评论

1赞 JCarlosR 5/21/2017
我有一个全局类,带有检查互联网连接的静态函数。退货是个好主意。无需安装,我可以继续远程工作!谢谢。false
1赞 CSawy 8/10/2019
这是在哪里定义的?!isInternetAvailable
0赞 Darshit Shah 9/6/2019
@CSawy 它的标志,在可访问性类中发送互联网连接的当前状态。
26赞 Nike Kov 3/17/2017 #15

下载其他工具包(网络链路调节器)

描述

Sierra的例子:enter image description here

enter image description here

评论

24赞 Jannie Theunissen 5/16/2017
这也限制了主机的连接,因此它并不比拔掉开发人员机器上的插头更好 - 没有协作或互联网参考。所以,不是一个实际的解决方案。
1赞 Nike Kov 9/2/2023
@JannieTheunissen您似乎更喜欢法拉第笼:) 这是问题的答案,它有效。
1赞 Jannie Theunissen 9/3/2023
你有一个很好的答案,并从我这里投赞成票。我的评论只对拥有 mac 的人有帮助(比如我来这里寻找解决方案),但对于 OP 的具体情况 - 致敬!
3赞 brandenbyers 3/28/2017 #16

在 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 需要互联网。这是通过按下主页按钮来完成的,该按钮会关闭对话框并返回到您的应用程序。

评论

1赞 Bill Chan 9/19/2017
它可能不适用于 iOS11GM。我在模拟器中找不到 Wifi 设置。
2赞 brandenbyers 9/28/2017
使用 Siri 并不是 Xcode 9 的唯一选择,因为现在可以激活多个应用程序。激活 iOS 设置应用程序以关闭 wifi 现在也可以。
1赞 Daniel Beltrami 9/29/2018 #17

有两种方法可以禁用 iOS 模拟器的 Internet 连接:

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

这是最简单的方法。

评论

7赞 Farid 1/13/2023
欢迎来到幼儿园
10赞 Dion 3/18/2019 #18

如果您的应用程序正在连接到特定域,您只需将其添加到您的文件中,然后将其路由到本地网络中不存在的 IP 地址...对于应用程序,它将与没有任何 Internet 连接或无法访问服务器相同。/etc/hosts

sudo nano /etc/hosts

添加以下行:

192.168.1.123   example.com

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

评论

1赞 Mohammad Reza Koohkan 8/15/2020
很好,很棒的黑客!
1赞 ut9081 7/18/2019 #19

一个简单的解决方案是为您的 Mac 创建飞行模式。 操作方法如下:

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

如果要重新打开网络,只需从“位置”下拉菜单中选择“自动”,然后单击“应用”

8赞 yoAlex5 5/11/2020 #20

iOS 禁用网络

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

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

启动/停止节流 +
节流设置...
⌘ commandT⌘ command + T + ⇧ shift

*如果您创建自己的预设,带宽为 0 和 0 用于下载和上传,您可以模拟没有互联网连接。此外,仅为某些特定主机启用它也非常有用。Add Preset

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

0赞 Paul B 3/20/2022 #21

如果你需要破坏你的网络连接是不同的方式,看看这些工具:

ipfw 或 pfctl (FreeBSD/OSX) - 低级数据包过滤器。拒绝从 localhost 访问端口的示例 要禁用网络,您可以在终端中执行:

pfctl -e
(echo "block all"; pfctl -sr) | pfctl -f -

要停止筛选,请执行以下操作:

pfctl -d

曾经有Throttle(Mac)通过共享无线网络模拟3G网络。