如何在 Cordova / Ionic 命令行中选择 iOS 模拟器

66

在使用ionic模拟命令行时(我假设它与cordova phoengap相同),如何选择设备,例如iPad或iPhone高屏幕。它总是默认为3.5英寸屏幕。

6个回答

123

使用Ionic和Cordova的较新版本,可以使用以下任何命令列出可用的模拟器。以下命令已在Ionic v3.20.0和Cordova 8.0.0上进行了测试:

ionic cordova emulate --list # List any OS
cordova run --list           # List any OS
cordova run ios --list       # List specific OS

他们产生类似这样的结果:

Available ios virtual devices:
iPhone-5s, 11.2
iPhone-6, 11.2
iPhone-6-Plus, 11.2
iPhone-6s, 11.2
iPhone-6s-Plus, 11.2
iPhone-7, 11.2
iPhone-7-Plus, 11.2
iPhone-8, 11.2
iPhone-8-Plus, 11.2
iPhone-SE, 11.2
iPhone-X, 11.2
iPad-Air, 11.2
iPad-Air-2, 11.2
iPad--5th-generation-, 11.2
iPad-Pro--9-7-inch-, 11.2
iPad-Pro, 11.2
iPad-Pro--12-9-inch---2nd-generation-, 11.2
iPad-Pro--10-5-inch-, 11.2
Apple-Watch-38mm, watchOS 4.2
Apple-Watch-42mm, watchOS 4.2
Apple-Watch-Series-2-38mm, watchOS 4.2
Apple-Watch-Series-2-42mm, watchOS 4.2
Apple-Watch-Series-3-38mm, watchOS 4.2
Apple-Watch-Series-3-42mm, watchOS 4.2
Apple-TV-1080p, tvOS 11.2

要使用特定的操作系统启动模拟器,请使用:

ionic cordova emulate ios --target "iPhone-X"

参见: https://cordova.apache.org/docs/en/latest/reference/cordova-cli/#cordova-run-command

对于旧版Ionic和Cordova的安装,我使用RipTheJacker答案中提到的语法选择要模拟的设备,即:

ionic emulate ios --target="iPhone-4s"

然而,要找出可用的仿真模式,我运行了以下命令:

ios-sim showdevicetypes

这个命令将返回一个列表,类似于这样:

iPhone-4s, 8.4
iPhone-5, 8.4
iPhone-5s, 8.4
iPhone-6-Plus, 8.4
iPhone-6, 8.4
iPad-2, 8.4
iPad-Retina, 8.4
iPad-Air, 8.4
Resizable-iPhone, 8.4
Resizable-iPad, 8.4

7
您可以尝试从 Cordova 项目的根目录运行 ./platforms/ios/cordova/lib/list-emulator-images 命令,以查看可用的 iOS 模拟器映像。 - Tod Thomson
1
在最新的ionic cordova emulate --list上运行得很好。 ios-sim showdevicetypes对我没有作用。 - Shane Loveland
@ShaneLoveland 谢谢你的回复,我查看了新的命令并更新了答案。 - John P
Ionic Cordova模拟iOS --target "iPhone-X, 11.2"无法工作,移除该版本。 - Milad
注意:在某些设置中,命令“ionic cordova emulate ios --list”将生成一个包含标点符号的列表,这不会直接用于目标设备。如果你遇到这种情况,只需将所有空格和括号转换为破折号即可。例如:“ionic cordova emulate ios -l --target =“iPad-第7代-”--no-native-run”。 - JoshuaDavid

46
cordova emulate ios --target="TARGET"
或者
ionic emulate ios --target="TARGET"

其中TARGET是以下之一:iPad、iPhone、iPad (Retina)、iPhone (Retina 3.5英寸)、iPhone (Retina 4英寸)

例如:ionic emulate ios --target="iPhone-5"


1
这只能使用 cordova 命令完成吗?或者如果我使用 ionic 命令,这也可以工作吗?例如:ionic emulate ios --target="TARGET" - Mauker

16

2018年5月更新

运行

ionic cordova run ios --target="iPhone-X"

您可以将iPhone-X替换为列表中的任何内容。

./platforms/ios/cordova/lib/list-emulator-images

从项目的根目录开始(如Tod Thomson的评论中所说)

对于我来说,这个列表是

iPhone-5s, 11.3
iPhone-6, 11.3
iPhone-6-Plus, 11.3
iPhone-6s, 11.3
iPhone-6s-Plus, 11.3
iPhone-7, 11.3
iPhone-7-Plus, 11.3
iPhone-8, 11.3
iPhone-8-Plus, 11.3
iPhone-SE, 11.3
iPhone-X, 11.3
iPad-Air, 11.3
iPad-Air-2, 11.3
iPad--5th-generation-, 11.3
iPad-Pro--9-7-inch-, 11.3
iPad-Pro, 11.3
iPad-Pro--12-9-inch---2nd-generation-, 11.3
iPad-Pro--10-5-inch-, 11.3
Apple-TV-1080p, tvOS 11.3
Apple-TV-4K-4K, tvOS 11.3
Apple-TV-4K-1080p, tvOS 11.3
Apple-Watch-38mm, watchOS 4.2
Apple-Watch-42mm, watchOS 4.2
Apple-Watch-Series-2-38mm, watchOS 4.2
Apple-Watch-Series-2-42mm, watchOS 4.2
Apple-Watch-Series-3-38mm, watchOS 4.2
Apple-Watch-Series-3-42mm, watchOS 4.2

操作系统版本(例如11.3)可能会因您下载的镜像和XCode版本而有所更改。因此,如果此列表中的设备无法使用,请运行命令并获取自己的列表。


对于给我点踩的人:您能否解释一下原因,这样我就可以改进我的回答了吗? - Hugo H
1
嘿,伙计。当我运行“list-emulator-images”命令时,我得不到任何结果,但是当我运行“ios-sim showdevicetypes”或“xcrun simctl list”时,我会得到很多设备..这是怎么回事? - user4079725

14

我不知道为什么这些答案对我不起作用。但它所做的是执行以下操作:

native-run --list

Virtual Devices:

  iPad (5th generation) 12.2 11904882-5E5A-4941-B291-5D38F3B51E98
  iPad (6th generation) 12.2 82079A1A-87C1-47EC-BEC2-69BA97FC440C
  iPad Air 12.2 7E90921D-D166-4CE1-956F-0193EF6E972F
  ...
这将为我提供设备的ID,使我能够执行下一步操作:
ionic cordova run ios --livereload --target "BA4986B3-9102-4250-91BF-7DDF7D7BC60D"

1
也许这里的区别在于“运行”与“模拟”。对我来说,使用UID有效,而设备名称则无效。 - Tim Jones
三年了,仍然在使用这种方法,它就是有效的。 - Daniel S.

2
根据2020年6月的最新版本,发生了一些变化,现在--target命令不再考虑设备名称,而是需要放置目标模拟器设备的UDID。
步骤1: ionic cordova run ios --list
虚拟设备:
[native-run] iPhone 11 Pro Max 13.6 0C6BD29C-7507-XXXX-XXXX-2CE2XXXX [native-run] iPhone 8 13.6 CEAE9A99-703F-XXXX-XXXX-10647A9XXXX
步骤2: 仅复制特定设备的UDID,例如“0C6BD29C-7507-XXXX-XXXX-2CE2XXXX”
步骤3: 运行以下命令 ionic cordova emulate ios -l --external --target="0C6BD29C-7507-XXXX-XXXX-2CE2XXXX"
在以下版本上成功运行
Ionic:
Ionic CLI : 6.10.0 (/usr/local/lib/node_modules/@ionic/cli) Ionic Framework : @ionic/angular 5.0.7 @angular-devkit/build-angular : 0.803.26 @angular-devkit/schematics : 8.3.26 @angular/cli : 8.3.26 @ionic/angular-toolkit : 2.2.0
Cordova:
Cordova CLI : 9.0.0 (cordova-lib@9.0.1) Cordova Platforms : android 8.1.0, ios 5.1.1 Cordova Plugins : cordova-plugin-ionic-keyboard 2.2.0, cordova-plugin-ionic-webview 5.0.0, (and 22 other plugins)
系统:
Android SDK工具:26.1.1(/Users/kushal/Library/Android/sdk) ios-deploy : 1.10.0 ios-sim : 8.0.2 NodeJS : v12.18.0 (/usr/local/bin/node) npm : 6.14.6 操作系统 :macOS Catalina Xcode :Xcode 11.6 Build version 11E708

2

自从ionic2以来,我一直遇到同样的问题。看起来ionic/cordova忽略了ios-sim并在仿真运行时分配了自己的仿真器,请参考您安装的平台例如ios (platforms/ios/cordova/lib/run.js):

要查看可用的仿真器,请运行

ios-sim showdevicetypes

/ validate target device for ios-sim
// Valid values for "--target" (case sensitive):
var validTargets = ['iPhone-4s', 'iPhone-5', 'iPhone-5s', 'iPhone-6-Plus', 'iPhone-6',
    'iPhone-6s-Plus', 'iPhone-6s', 'iPad-2', 'iPad-Retina', 'iPad-Air', 'iPad-Air-2',
    'iPad-Pro', 'Resizable-iPhone', 'Resizable-iPad'];
if (!(runOptions.device) && runOptions.target && validTargets.indexOf(runOptions.target.split(',')[0]) < 0 ) {
    return Q.reject(runOptions.target + ' is not a valid target for emulator');
}

只要在列表中运行正确的模拟器,您就应该没有问题:

ionic emulate ios --target="iPhone-6s-Plus, 10.2"

请注意保留HTML标签。

如果你想把模拟器添加到列表中,可以按照这些说明操作:https://dzone.com/articles/important-note-for-targeting-ios-emulators-in-cord。 - Rodrigo Rubio
感谢您指定iOS版本。 - iphondroid
1
在最新的Ionic版本中对我不起作用。 首先,我使用“ionic cordova emulate ios --list”列出了所有可用设备。 接下来,我从列表中选择了一个并尝试了“ionic cordova emulate ios --target="iPhone-6, 10.3"”,但构建崩溃并出现错误... 但是,“ionic cordova emulate ios --target="iPhone-6"”可以工作,并弹出带有iOS 8.4的模拟器。 如何启动具有特定iOS版本的模拟器? - Федор Усаков
你真的修改了这个文件 "platforms/ios/cordova/lib/run.js" 吗?你需要手动修改它。正如之前提到的,Cordova 似乎忽略了它。 - Rodrigo Rubio

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