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

104
我想要从命令行启动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的替代方案吗?
9个回答

210

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

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

simctl

simctl使您能够控制正在运行的模拟器。

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

现在,为了实现我的目标,这是启动模拟器的命令:

xcrun instruments -w“iPhone 5(8.0模拟器)”

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

只需执行此操作:

xcrun instruments -s

启动模拟器后,您可以使用simctl来控制它。

安装您的应用程序:

xcrun simctl install booted<app path>

启动应用程序:

xcrun simctl launch booted<app identifier>


8
<app identifier> 是您的应用程序包标识。 - Hugo
1
我无法使用“xcrun simctl boot <device id>”而不是“xcrun instruments -w…”使其工作。 - CambridgeMike
非常直接和精确,以确保您正在处理预期的内容。干得好! - Laser Hawk
我刚刚使用这个工具在模拟器上安装了我们的应用程序,以便向我们的项目经理展示。谢谢! - rein
2
你应该指定实际设备的UDID或名称,而不是使用“booted”,因为“booted”只会随意选择模拟器上已启动的设备之一。 - devios1
显示剩余5条评论

65

使用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版本中,该命令不再起作用。例如,我使用ID启动iPhone 5s模拟器时,会弹出iPad Air模拟器。 - 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
鉴于它是在Xcode 6中操作的(请参见最初的问题),您不应该期望这一点,但是如果需要,您可以轻松地调整您的脚本。 - Jeremy Huddleston Sequoia
2
@chrisco 没有文档。您可以通过 defaults read com.apple.iphonesimulator 检查默认值,并可以在命令行上覆盖其中任何一个。Simulator.app 仅使用 UDID 来唯一标识设备。您不能使用名称。 - Jeremy Huddleston Sequoia
显示剩余5条评论

17

针对Xcode 7版本:

open /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app --args -CurrentDeviceUDID <设备UDID>

xcrun simctl list中获取模拟器的UDID。


13

为了启动一个特定设备的模拟器,我使用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替换为有效的UDID。

例如,如果我们想启动带有iPad(%生成引导)的模拟器:

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

更新:2018年5月23日

在使用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

13

启动模拟器:

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英寸) - 模拟器 - iOS 7.1"

您可以使用instruments -w help命令获取可用的硬件-iOS组合。


2
使用 instruments -s devices 获取设备列表。但是,一旦您拥有设备名称,仅调用 instruments -w <device> 很可能会产生错误,因为instruments尝试将跟踪写入驱动器的根目录。 您可能需要指定一个成功写入跟踪的路径。 - Michael Teper
为了详细说明@MichaelTeper的评论,请使用“-D”来指定.trace文档的输出目录。 - devios1

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

然后,您需要运行(打开)模拟器应用程序,并确保启动了该应用程序的新实例。应用程序位于此处:/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

1
运行此命令。应用程序将重新启动,并进行更改。无需再次构建。
ios-sim "launch" "/Library/WebServer/Documents/testapp/build/iphone/build/Debug-iphonesimulator/test.app" "--devicetypeid" "iPad-2" "--exit";

设备类型ID列表:

ios-sim showdevicetypes

必须安装iOS-sim(包括巨大的Node),但与本机命令行“scrub simctl”相比,它很遗憾受到限制。 - Motti Shneor

0

如果有人遇到这个问题,这个命令可以从命令提示符打开iOS模拟器

open -a simulator

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接