ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

(我正在远程连接到 Mac 以进行编码,目前没有其他选择,因此无法选择禁用 OS 网络)。

我想你也可以使用 CharlesProxy 来运行类似的测试

P
Peter Mortensen

使用简单的 Faraday cage 来阻止或限制外部 RF 信号电平。

你可以用铝箔自己做。如果您想要阻止,则开口应小于数据服务的 wavelength

800 MHz 的波长为 37 cm (14")

1900 MHz 的波长为 16 cm (6")。

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

https://i.stack.imgur.com/w6ehv.png


只是一个快速的建议,如果你创建一个里面有桌子的步入式法拉第笼,Mac 会更容易使用。
即使他要求模拟器,您的回答也很有趣
由于问题是关于模拟器的,我想我会在 Photoshop 中制作其中一个并将其设置为我的桌面背景。这可能会奏效,对吧?
这个“技巧”已经被专业人士真正使用过 :) 当我在第一代智能手机上工作时,我们曾经使用粗饼干罐。并非所有品牌都有效,但有效的品牌都很完美。
应该被接受为正确答案! (我宁愿为 iKryptonite 使用铅盒)
P
Peter Mortensen

是的。在 Xcode 中,您可以转到菜单 Open Developer ToolsMore Developer Tools 并下载“Additional Tools for Xcode”,其中将包含 Network Link Conditioner。

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


如果您在开发人员站点上,它位于 XCODE 的硬件 IO 工具包中。
不知何故,我更喜欢用箔纸包裹我的设备的想法。
从 Xcode 8 开始,网络链接调节器位于“Additional Tools for Xcode”包中。
此外,100% 的丢失会限制主机的连接,因此不是一个实际的解决方案。如果您准备在没有互联网的情况下进行开发,那么只需拔下开发人员机器上的插头就比这个解决方案更好。
它影响了所有的mac。我只想为模拟器退出互联网连接,因为我正在远程使用mac ...
N
Noah Witherspoon

恐怕不会——模拟器共享操作系统使用的任何网络连接。不久前,我提交了一份关于模拟网络条件的Radar bug report;你可以考虑做同样的事情。


不确定它是否是针对此雷达错误,但开发者工具现在包含一个 Network Link Conditioner 工具。
Network Link Conditioner 允许您指定要丢弃的数据包的百分比,但据我所知,不幸的是,没有办法禁用所有连接。
目前 Network Link Conditioner 允许设置 100% 的丢包率,而且它似乎可以工作。
由于模拟器共享主机的网络连接,您可以关闭主机上的互联网以模拟“网络禁用”。不理想,但它有效。
等等,Network Link Conditioner 适用于整个主机,而不仅仅是模拟器。这有什么用?如果我愿意,我可以拔掉我的以太网。
P
Peter Mortensen

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

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


但这不会使模拟器表现得像您离线一样。它只会使您的服务器不可用,这是完全不同的事情。
实际上,LordT,对于我的具体情况,这可能就足够了……!
phix23 - 你对这两个建议的工具有偏好吗?
不,我没有。我只试过Hands off,因为它有更多的功能。
+1:我已经为此目的使用了 Little Snitch,测试以确保模拟应用程序在网络连接中断时可以正常工作。
P
Peter Mortensen

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


对明确表示这不是一个选项的 OP 没有帮助,但这对我来说是一个完美的简单解决方案。
当你也被硬连线时这是一个问题,那么你必须禁用两者。即使连接了 AirPlay 之类的东西,Wifi 也经常被启用。
N
Nike Kov

下载 Additional tools package(网络链接调节器)

Description

https://i.stack.imgur.com/Z81B2.png

https://i.stack.imgur.com/lTAIK.png


这也限制了主机的连接,所以它并不比拔掉你的开发机器上的插头好——没有协作或互联网参考。所以,不是一个实际的解决方案。
P
Peter Mortensen

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

您可以从 System Preferences... → Network 关闭 Mac Internet 连接并关闭所需的网络源。

https://i.stack.imgur.com/b4aQr.png

https://i.stack.imgur.com/8iXqt.png


P
Peter Mortensen

由于 Xcode 4 (?) 在 /Applications/Utilities 中有一个名为 Network Link Conditioner 的首选项窗格。要么使用现有配置文件之一,要么创建自己的自定义配置文件,上行/下行链路 0 kbit/s 和 100% 丢弃。


只想补充一点,如果您创建一个带宽为 0 的自定义网络设置,它会自动将其假定为最大值。将 100% 的数据包丢失是很重要的。
另外,我想补充一点,这种方法可以从所有东西中删除互联网,而不仅仅是模拟器。完全关闭互联网可能更容易。但它仍然是非常方便的工具,因为您可以模拟不同质量的 E 和 3G 互联网。
这无疑是最佳答案,因为 Network Link Conditioner 是 Apple 官方工具,与 Little SnitchHands Off 相比,它是完全免费的。
嗯,看起来这个工具确实为所有东西关闭了网络。我还发现它不会触发可达性通知(我使用了 github.com/stefanomondino/STMReactiveReachability)。
请注意 - NETWORK LINK CONDITIONER 工具会影响整个机器,而不仅仅是 iPhone 模拟器。如果您像我使用 Xamarin Build Host 一样远程访问您的 Mac 以进行开发,它将终止您的连接。
P
Peter Mortensen

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

sudo nano /etc/hosts

添加以下行:

192.168.1.123   example.com

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


不错,很棒的技巧!
y
yoAlex5

iOS禁用网络

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

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

开始/停止节流 ⌘ 命令 + T 节流设置... ⌘ 命令 + T + ⇧ shift

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

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


P
Peter Mortensen

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

在 Mac 上按 Command + Shift + T 来设置节流。


P
Peter Mortensen

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

只需切换网络可达性的标志

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

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

我有一个带有静态函数检查互联网连接的全局类。返回 false 是个好主意。无需安装,我可以继续远程工作!谢谢你。
这个 isInternetAvailable 在哪里定义?!
@CSawy 它的标志在可达性类中发送互联网连接的当前状态。
P
Peter Mortensen

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


P
Peter Mortensen

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


它可能不适用于 iOS11GM。我在模拟器中找不到 Wifi 设置。
使用 Siri 并不是 Xcode 9 的唯一选择,因为它可以激活多个应用程序。现在也可以激活 iOS 设置应用程序以关闭 wifi。
P
Peter Mortensen

有两种方法可以禁用 iOS Simulator 的 Internet 连接:

拔下您的网络连接

关闭 Wi-Fi

这是最简单的方法。


m
mwhuss

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


u
ut9081

一个简单的解决方案是为您的 Mac 创建飞行模式。以下是如何做到这一点:

在系统偏好设置中进入网络

点击位置下拉菜单

单击加号图标以添加新位置

将新位置命名为“飞行模式”或类似名称,然后单击“完成”

从位置下拉菜单中选择您刚刚创建的位置

依次单击窗口左侧列表中的每个可用网络接口,禁用每个

单击配置 iPv4 菜单,然后选择关闭

对于 Wi-Fi,只需单击关闭 Wi-Fi 按钮

单击应用,此位置将阻止所有网络活动

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

此解决方案的功劳:http://hints.macworld.com/article.php?story=20130325002258846


P
Peter Mortensen

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

退出模拟器(Cmd + Q)如果它是打开的 将你的Mac连接到一个Wi-Fi接入点(它可能没有连接到互联网,但没关系)启动模拟器(菜单:Xcode→Open Developer Tool → iOS Simulator) 并等待它加载切换 Wi-Fi 网络到另一个利润

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

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

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


P
Peter Mortensen

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

此外,当您安装网络调节器时,它会安装在系统首选项中。


P
Paul B

如果您需要破坏您的网络连接,请查看以下工具:

ipfw or pfctl (FreeBSD/OSX) - 低级数据包过滤器。 denying access to a port from localhost 示例 要禁用网络,您可以在终端中执行:

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

停止过滤:

pfctl -d

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


P
Peter Mortensen

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


调试应用的连接问题时看不到 StackOverflow 很不方便!
阅读问题的最后一行:“(我正在远程连接到 Mac 进行编码,目前没有其他选择,因此无法禁用操作系统网络)。”此外,您的建议已经在两年前由本帕尔默提出。