Xcode 6-从命令行启动模拟器


102

我想从命令行启动iPhone模拟器。

到目前为止,我一直在使用以下命令

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Applications/iPhone Simulator.app/Contents/MacOS/iPhone Simulator -SimulateDevice

-SimulateDevice用于启动特定的设备类型

现在,使用Xcode 6,路径和应用已更改为

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

但可悲的是-SimulateDevice选项现在无法使用。我可以启动模拟器,但是没有指定要启动哪个模拟器的选项

有人用Xcode 6找到了替代方法吗?

Answers:


210

找到了实现我想要的方法。

苹果已经在Xcode 6中引入了一个有趣的工具!

simctl

simclt允许您控制正在运行的模拟器。

运行xcrun simctl以获取可用子命令的列表。有很多新的选择可以玩。

现在要做我想做的,这是启动模拟器的命令:

xcrun instruments -w "iPhone 5 (8.0 Simulator)"

-w用于提供设备类型并获取可用设备的列表。

只需执行以下命令:

xcrun instruments -s

启动模拟器后,您可以使用 simctl

要安装您的应用,请执行以下操作:

xcrun simctl install booted <app path>

要启动该应用程序:

xcrun simctl launch booted <app identifier>

希望这可以帮助。


8
<app identifier>是您的应用程序捆绑包ID
Hugo 2014年

除了提到的一些已知问题外,我没有看到,运行xcrun simctl将列出命令。我认为它们是很自我解释的。
daniellmb 2014年

1
我是不是能够得到它使用的工作xcrun simctl boot <device id>,而不是xcrun instruments -w...
CambridgeMike

我一直以某种方式不断得到:simctl [23846:459252] ***由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'***-[__ NSPlaceholderDictionary initWithObjects:forKeys:count:]:尝试从对象中插入nil对象[0]已在simctl安装上启动-Pooja
Shah

2
您应该指定实际的设备UDID或名称,而不是bootedbooted在模拟器上随意选择启动的设备之一那样指定。
devios1

63

使用Xcode 6,如果要让iOS Simulator.app在启动时启动特定设备,可以从命令行运行该设备:

open -a "iOS Simulator" --args -CurrentDeviceUDID <DEVICE UDID>

您可以在其中找出要从中引导的设备的UDID:

xcrun simctl list

使用Xcode 7,该应用程序被重命名为Simulator.app,因此您应该相应地将以上内容更新为:

open -a Simulator --args -CurrentDeviceUDID <DEVICE UDID>


在6.2 beta中,该命令不再起作用。例如,我没有启动iPhone 5s模拟器(给出其ID),而是获得了iPad Air模拟器。
Michael Teper

嗯,我们确信它不能在3台不同的机器上工作。我可以提供其他任何信息来帮助解决问题吗?
Michael Teper

我已经知道发生了什么事。我们安装了Xcode 6.2 beta,但没有将其设置为默认Xcode。因此,/usr/bin/xcrun simctl list列出了常规Xcode可用的模拟器。但是,open -a "iOS Simulator"启动6.2 beta模拟器,该模拟器期望beta模拟器提供设备ID。如何指定我启动的模拟器(常规版与Beta版)?
Michael Teper

1
打开/path/to/Xcode.app/Contents/Developer/Applications/iOS \ Simulator.app
Jeremy Huddleston Sequoia 2015年

2
@chrisco没有任何文档。您可以通过检查默认值defaults read com.apple.iphonesimulator,也可以覆盖命令行中的任何默认值。Simulator.app仅使用UDID来唯一标识设备。您不能使用该名称。
杰里米·哈德斯顿红杉

17

对于xcode 7:

open /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app --args -CurrentDeviceUDID <DeviceUDID>

从中获取模拟器udid xcrun simctl list


12

要使用引导的特定设备启动模拟器,请使用list devices子命令获取所有可用设备的列表

$ xcrun simctl list devices
== Devices ==
-- iOS 11.2 --
iPhone 5s (E3B6EA43-C805-49C2-9502-A44A465D8DF2) (Shutdown)
iPhone 6 (801E9E11-CA86-473A-9879-4B0742B827FB) (Shutdown)
iPhone 6 Plus (24013349-1A6F-489C-9A68-ABB00EBB4BBF) (Shutdown)
iPhone 6s (1A594D75-146C-4BEA-A250-1FADE7886114) (Shutdown)
iPhone 6s Plus (C2730FA0-11CB-49C9-A087-CB3C1BF1CC3D) (Shutdown)
iPhone 7 (F58B3749-3276-49E5-81C8-EBA1AEA7B242) (Shutdown)
iPhone 7 Plus (98167D8C-8F27-404C-AB02-588D9AAFD071) (Shutdown)
iPhone 8 (96322368-F763-4E0A-8576-ADE9F678211F) (Shutdown)
iPhone 8 Plus (E916D1EE-B67B-4C01-B3F5-C5C80CC4CDF8) (Shutdown)
iPhone SE (ABEFEDDF-7A7C-4B94-9E91-E065170FA47F) (Shutdown)
iPhone X (84DAB7AB-3CA2-4F5B-8C4E-A5B54CA15C31) (Shutdown)
iPad Air (DCD8CF4B-2C9F-4BA1-952A-ACB9CAD0A84D) (Shutdown)
iPad Air 2 (A47C9A05-233F-450F-9A39-318258E9ADEA) (Shutdown)
iPad (5th generation) (819C058E-64AC-4E73-8F41-2C0F919F8B56) (Booted)

该命令将输出可用设备的列表及其UDID和状态

然后,我启动模拟器应用程序,并使用-CurrentDeviceUDID选项指定设备

/Applications/Xcode.app/Contents/Developer/Applications/Simulator.app/Contents/MacOS/Simulator -CurrentDeviceUDID <DEVICE-UDID>

注意:用列表中的有效UDID替换。

例如,如果我们要使用Ipad(已引导%generation)启动模拟器:

/Applications/Xcode.app/Contents/Developer/Applications/Simulator.app/Contents/MacOS/Simulator -CurrentDeviceUDID 84DAB7AB-3CA2-4F5B-8C4E-A5B54CA15C31

更新23/05/2018

使用Xcode 9.3 CurrentDevice UDID选项对我不起作用,作为一种解决方法,我必须使用simctl在模拟器中启动设备,然后再打开它。

xcrun simctl boot 2BF01FC0-7E29-4AF1-ADD1-886DF129A9A9
open -a Simulator 

您可以使用simctl创建,擦除,删除,引导,关闭和升级模拟器。

$ xcrun simctl create
Usage: simctl create <name> <device type id> <runtime id>

$ xcrun simctl delete
Usage: simctl delete <device> [... <device n>] | unavailable

获取有效设备类型运行时的列表

xcrun simctl list devicetypes

xcrun simctl list runtimes

10

要启动模拟器:

xcrun simctl boot "iPhone X"

它将以无头模式启动。使模拟器可见:

open -a Simulator

xcrun simctl bootxcrun instruments -w。更简单。instruments需要完整的设备名称。


8

您可以使用-w标志指定硬件和iOS版本。格式是

instruments -w "simulator-version"

例如:

instruments -w "iPhone Retina (3.5-inch) - Simulator - iOS 7.1"

您将通过使用instruments -w help 命令获得可用的hardvare-iOS组合。


2
使用instruments -s devices来获得设备的列表。但是,一旦有了设备名称,instruments -w <device>由于仪器尝试将跟踪写入驱动器的根目录,简单地调用可能会产生错误。您可能想要为将成功写入的跟踪指定路径。
Michael Teper's 2015年

要详细说明@MichaelTeper的注释,请使用-D为.trace文档指定输出目录。
devios1 2015年

3

在Xcode 9.4.1中验证

真正漂亮的格式中的设备列表: ~/Library/Developer/CoreSimulator/Devices/device_set.plist

Root
    DefaultDevices
        com.apple.CoreSimulator.SimRuntime.iOS-8-4
             com.apple.CoreSimulator.SimDeviceType.iPad-Retina : AB335FAF-E3E3-4AE9-A0AF-D1C6AEB5FBD4

然后,您要运行(打开)Simulator应用程序,并确保启动了该应用程序的新实例。

该应用程序在这里: /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app

您将使用的格式如下:

open -n -a <SimulatorPath> --args -CurrentDeviceUDID <SimDeviceTypeUDID>

因此,如果我想启动上面的模拟器,则可以这样做。

open -n -a /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app --args -CurrentDeviceUDID AB335FAF-E3E3-4AE9-A0AF-D1C6AEB5FBD4

该死的!我刚刚对其进行了测试,它可以在Mac OS 10.11.6上运行。现在,下一个技巧是告诉模拟器打开我们已安装的应用程序。我还没到 希望这可以帮助。感谢https://stackoverflow.com/users/726106/jeremy-huddleston-sequoia的详细解释。


没有“应用程序的新实例”之类的东西。在Macintosh上,每个登录用户一个应用程序只有一个实例。这个作为单一进程托管的单实例应用程序本身可以托管许多“文档”(在本例中为模拟器)。
Motti Shneor '19

1

运行此命令。该应用将重新启动,然后进行更改。无需再次重建它。

ios-sim "launch" "/Library/WebServer/Documents/testapp/build/iphone/build/Debug-iphonesimulator/test.app" "--devicetypeid" "iPad-2" "--exit";

对于devicetypeid列表:

ios-sim showdevicetypes

为此,必须安装iOS-sim(包括humungous Node),与本地命令行“ scrub simctl”相比,它受到限制。
Motti Shneor '19
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.