【问题标题】:Can i create an iOS simulator programatically on demand like in android(emulator)我可以像在android(模拟器)中那样按需以编程方式创建iOS模拟器吗
【发布时间】:2016-12-09 13:20:07
【问题描述】:

在 android 中,我可以使用 android create avd 和我想要的所有属性创建一个模拟器。有没有办法通过命令在 MacOs/Xcode 中做到这一点,或者我只能解决 xcode 提供的内置模拟器? 如果没有,有没有办法在 MACOs 中多次启动模拟器?

背景是自动化测试和按需构建环境。 更清楚地说:需要一组设备(模拟器/模拟器)来并行运行测试。所以我需要知道是否有办法让多个模拟器运行我需要的任何实例。 因此,当我想测试“iPhone 6”时,我需要有 10 个实例来并行运行我的测试,以便在敏捷的持续交付背景中获得快速反馈。

我在互联网上没有找到任何东西,所以我猜答案是否定的。

编辑:至少在投票时发表评论会很好

【问题讨论】:

    标签: ios xcode ios-simulator


    【解决方案1】:

    除了已经接受的答案:从 Xcode 8.2 开始,还可以使用 xcrun simctl io booted screenshot 截屏和使用 xcrun simctl io booted recordVideo <filename>.<file extension> 截屏。另见Apple Xcode 8.2 Release Notes

    【讨论】:

      【解决方案2】:

      是的,自 Xcode 6 以来,您想要执行的操作已通过 simctl 命令得到支持。看看:

      $ xcrun simctl 创建 用法:simctl create &ltname> &ltdevice type id> &ltruntime id>

      你可以通过运行获取设备类型ID和运行时ID的列表:

      xcrun simctl list devicetypes runtimes

      然后您可以使用xcrun simctl boot <device UDID> 引导它们。使用 Xcode 6.x 和 7.x,此类引导的范围有限(无法安装和启动应用程序,但您可以生成进程),但从最近的 Xcode 8 测试版开始,它们将引导至完整会话(尽管您无法使用 Simulator.app 与它们交互,它们非常适合用于自动化测试和构建环境)。

      【讨论】:

      • 好的,我正在路上..,不知何故。还有一些问题。如果我以相同的名称创建设备会发生什么。我发现它给了我另一个 UUID。此外,当我尝试启动它不会出现。当我再次尝试在控制台中启动相同的内容时,它给了我: xcrun simctl boot 84712E71-8D64-4C82-8E9C-5181D4C32B7C 处理命令时遇到错误(域=com.apple.CoreSimulator.SimError,代码=159):当前状态下无法启动设备:已启动 ....,表示已启动,但未显示
      • 我可以关闭它并再次启动它,但没有任何显示。这是定义的行为吗?
      • “出现”是什么意思?你希望它出现在 Simulator.app 中吗?这不是它的工作原理。设备已启动,您可以以纯粹的无头方式与它们进行交互(您可以生成进程、安装应用程序、启动应用程序、运行测试等,但您不能在屏幕上与之交互)。这设计用于具有自动化测试且无头的测试中心。如果您需要与之交互,目前您只能在 Simulator.app 中使用一个(但如果需要,您可以生成多个 Simulator.app 实例)。
      • 啊,好的。这对我来说也可以。所以我想对这个无头模拟器进行截图是不可能的,对吧?
      • 如何生成多个 Simulator.app?我尝试过,EricS 也尝试过,但它导致错误
      【解决方案3】:

      您可以使用xcodebuild test 针对特定模拟器进行测试。例如:

      > xcodebuild test -project MyAppProject.xcodeproj -scheme MyApp -destination 'platform=Simulator,name=iPhone,OS=8.1'
      

      Testing With Xcode

      【讨论】:

      • 问题不是要运行一个模拟器,而是要创建一个或至少多次使用一个模拟器,或者我的答案是否错误
      • 您不会像 Android 模拟器那样为 iOS“创建模拟器”。有一个模拟器应用程序,它可以模拟任何最近的 iOS 设备。您无法指定 RAM、屏幕尺寸、分辨率等 - 您只需选择要模拟的设备,例如 iPhone 6s+。您可以使用命令行在其上运行您的应用程序,并在测试完成后使用不同的设备设置运行您的应用程序。
      • 好的,谢谢您的回复。答案还是“不”,我不能像在高性能并行测试环境中要求的那样同时运行多个设备。或者你有没有看到任何机会。我编辑我的问题更清楚。我不希望单一的模拟器方法弄乱我的测试时间。我想定义一个设备多次启动以对其进行测试。这意味着我需要让那些模拟器实例并行运行。我不想单线程等待 20 次测试 1 小时,我想让它们并行。
      • 我不确定是否支持多个模拟器。我尝试了open -n path-to-simulator,但产生了错误。在这里查看一些可能的答案:github.com/facebook/FBSimulatorControl
      【解决方案4】:

      AFAIK 你只能使用 Xcode 提供的模拟器 - 但这应该就是你所需要的。 iOS 中的硬件变化少于 Android,因此不应应用任何设置或属性。

      只要你想运行模拟器应用程序,你当然可以做到。模拟器是您计算机上的一个应用程序,就像其他任何东西一样。

      我的位于这里(我也相信这是默认路径):

      /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app

      我将我的模拟器应用添加到我的 Dock 中,以便我可以随时启动它(也有助于调试移动设备的网站布局)

      希望这会有所帮助。

      编辑:如果需要从命令行打开:

      open /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app

      会做的

      【讨论】:

      • 这意味着我可以不受任何限制地多次运行这个模拟器应用程序并使用它!?我会尝试并接受,如果工作,谢谢!
      • 是的,你应该可以毫无问题地。如果您需要命令行选项,请参阅我的编辑。
      • 因此可以从该位置启动模拟器一次,但不能启动两次。我试图复制它并开始,但这给了我一个错误。我会尝试用命令打开
      • 是的,据我所知,您一次只能运行 1 个模拟器应用程序实例。
      猜你喜欢
      • 1970-01-01
      • 2015-02-25
      • 2023-04-04
      • 2011-05-01
      • 1970-01-01
      • 2019-02-07
      • 2019-11-01
      • 2021-04-04
      • 1970-01-01
      相关资源
      最近更新 更多