【问题标题】:Is it possible to disable the network in iOS Simulator?是否可以在 iOS 模拟器中禁用网络?
【发布时间】:2011-06-16 01:23:36
【问题描述】:

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

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

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

【问题讨论】:

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

标签: ios iphone debugging networking ios-simulator


【解决方案1】:

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

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

  • 800 MHz 的波长为 37 cm (14")
  • 1900 MHz 的波长为 16 cm (6")。

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

【讨论】:

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

是的。在 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 ...
【解决方案3】:

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

【讨论】:

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

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

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

【讨论】:

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

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

【讨论】:

  • 对特别声明这不是一个选项的 OP 没有帮助,但这对我来说是一个完美的简单解决方案。
  • 当你也被硬连线时这是一个问题,那么你必须禁用两者。 Wifi 通常是启用的,即使在连接 AirPlay 之类的东西时也能正常工作。
【解决方案6】:

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

Description

Sierra 中的示例:

【讨论】:

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

从 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 以进行开发,它将终止您的连接。
【解决方案8】:

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

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

要关闭 Mac 以太网 Internet 源:

要关闭您的 Mac Wi-Fi 互联网源(如果您的 Mac 连接到 Wi-Fi 互联网):

【讨论】:

    【解决方案9】:

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

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

    【讨论】:

      【解决方案10】:

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

      只需切换网络可达性标志

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

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

      【讨论】:

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

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

      sudo nano /etc/hosts
      

      添加以下行:

      192.168.1.123   example.com
      

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

      【讨论】:

      • 不错,很棒的 hack!
      【解决方案12】:

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

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

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

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

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

      【讨论】:

        【解决方案13】:

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

        【讨论】:

          【解决方案14】:

          使用 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。
          【解决方案15】:

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

          【讨论】:

            【解决方案16】:

            两种方法可以禁用 iOS Simulator 的互联网连接:

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

            这是最简单的方法。

            【讨论】:

              【解决方案17】:

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

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

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

              【讨论】:

                【解决方案18】:

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

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

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

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

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

                【讨论】:

                  【解决方案19】:

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

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

                  【讨论】:

                    【解决方案20】:

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

                    【讨论】:

                    • 调试应用连接问题时看不到StackOverflow很不方便!
                    • 阅读问题的最后一行:“(我正在远程连接到 Mac 进行编码,目前没有其他选择,因此无法禁用操作系统网络)。”此外,你的建议早在两年前就被本帕尔默提出了。
                    猜你喜欢
                    • 1970-01-01
                    • 2020-11-11
                    • 1970-01-01
                    • 1970-01-01
                    • 2011-12-19
                    • 2020-05-27
                    • 1970-01-01
                    • 2019-07-11
                    • 2013-10-08
                    相关资源
                    最近更新 更多