我正在尝试调试在从 Internet 获取其主要数据的应用程序中看到的一些不一致的行为。我在模拟器中看不到问题,只是在设备上,所以我想在模拟器中重现网络和连接环境。
有没有办法在模拟器中禁用网络?
(我正在远程连接到 Mac 以进行编码,目前没有其他选择,因此无法选择禁用 OS 网络)。
使用简单的 Faraday cage 来阻止或限制外部 RF 信号电平。
你可以用铝箔自己做。如果您想要阻止,则开口应小于数据服务的 wavelength。
800 MHz 的波长为 37 cm (14")
1900 MHz 的波长为 16 cm (6")。
这在实际设备上比在模拟器上效果更好,因为 Mac 在法拉第笼内很难工作;-)
https://i.stack.imgur.com/w6ehv.png
是的。在 Xcode 中,您可以转到菜单 Open Developer Tools → More Developer Tools 并下载“Additional Tools for Xcode”,其中将包含 Network Link Conditioner。
使用此工具,您可以模拟不同的网络场景(例如 100% 丢失、3G、高延迟 DNS 等),您也可以创建自己的自定义场景。
恐怕不会——模拟器共享操作系统使用的任何网络连接。不久前,我提交了一份关于模拟网络条件的Radar bug report;你可以考虑做同样的事情。
我知道在 iOS 模拟器上禁用网络的唯一方法是使用 Little Snitch 或 Hands Off 等工具。有了它们,您可以拒绝/阻止任何传出和传入的网络连接。
您可以对其进行设置,使其仅阻止来自模拟器应用程序的连接。它像防火墙一样工作。
只需在 Mac OS X 中关闭 Wi-Fi。这是一种享受!
下载 Additional tools package(网络链接调节器)
https://i.stack.imgur.com/Z81B2.png
https://i.stack.imgur.com/lTAIK.png
由于 Xcode 不提供这样的功能,您肯定会选择一些第三方应用程序/工具。关闭 Mac 网络也有助于关闭 iOS Simulator 网络。
您可以从 System Preferences... → Network 关闭 Mac Internet 连接并关闭所需的网络源。
https://i.stack.imgur.com/b4aQr.png
https://i.stack.imgur.com/8iXqt.png
由于 Xcode 4 (?) 在 /Applications/Utilities
中有一个名为 Network Link Conditioner
的首选项窗格。要么使用现有配置文件之一,要么创建自己的自定义配置文件,上行/下行链路 0 kbit/s 和 100% 丢弃。
Network Link Conditioner
是 Apple 官方工具,与 Little Snitch
或 Hands Off
相比,它是完全免费的。
如果您的应用程序连接到特定域,您只需将其添加到 /etc/hosts
文件并将其路由到本地网络中不存在的 IP 地址...没有任何 Internet 连接或服务器无法访问。
sudo nano /etc/hosts
添加以下行:
192.168.1.123 example.com
或者,如果您没有在本地计算机上运行 Web 服务器,请使用 127.0.0.1
。
iOS禁用网络
我建议您在 Mac 上使用 Charles Proxy 应用程序。
它允许您使用仅为调整网络连接而创建的带宽限制功能。
开始/停止节流 ⌘ 命令 + T 节流设置... ⌘ 命令 + T + ⇧ shift
*如果您通过 Add Preset
创建您自己的预设,带宽为 0 和 0 用于下载和上传,您可以模拟没有 Internet 连接。此外,仅对某些特定主机启用它也非常有用。
作为替代方案,您可以在 Mac 上禁用连接,因为来自 Simulator 的所有流量都通过您的计算机。
一个可能很疯狂的想法或补丁:
只需切换网络可达性的标志
这是我用来在运行时通过触发“模拟器内存警告”来切换我的标志的代码,它是完全安全的。只需确保代码应仅处于调试模式
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
#ifdef DEBUG
isInternetAvailable = !isInternetAvailable;
#endif
}
false
是个好主意。无需安装,我可以继续远程工作!谢谢你。
isInternetAvailable
在哪里定义?!
使用 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 需要互联网。这是通过按下主页按钮来完成的,该按钮会关闭对话并返回到您的应用程序。
有两种方法可以禁用 iOS Simulator 的 Internet 连接:
拔下您的网络连接
关闭 Wi-Fi
这是最简单的方法。
一个简单的解决方案是为您的 Mac 创建飞行模式。以下是如何做到这一点:
在系统偏好设置中进入网络
点击位置下拉菜单
单击加号图标以添加新位置
将新位置命名为“飞行模式”或类似名称,然后单击“完成”
从位置下拉菜单中选择您刚刚创建的位置
依次单击窗口左侧列表中的每个可用网络接口,禁用每个
单击配置 iPv4 菜单,然后选择关闭
对于 Wi-Fi,只需单击关闭 Wi-Fi 按钮
单击应用,此位置将阻止所有网络活动
当您想重新打开网络时,只需从位置下拉菜单中选择自动,然后单击应用
此解决方案的功劳:http://hints.macworld.com/article.php?story=20130325002258846
如果你至少有两个 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 将被连接。
然后,如果您需要运行已连接的模拟器 - 只需退出并启动它。
您可以在 Mac 上使用网络链接调节器。您可以从 Apple 开发者网站下载它。它应该在我们获得旧版本的 Xcode 和 iOS 的地方可用。使用此网络调节器,您可以将网络强度从 Wi-Fi 更改为无网络。
此外,当您安装网络调节器时,它会安装在系统首选项中。
如果您需要破坏您的网络连接,请查看以下工具:
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 网络。
您可以改为禁用主机的网络!