Cordova:启动特定的 iOS 模拟器图像
Posted
技术标签:
【中文标题】Cordova:启动特定的 iOS 模拟器图像【英文标题】:Cordova: start specific iOS emulator image 【发布时间】:2014-04-14 04:01:30 【问题描述】:我正在使用 Cordova 开发一个跨平台的移动应用程序,主要关注开发阶段的 ios。
对于我的开发过程,如果我可以直接从命令行启动我的 Cordova 应用程序并将其加载到指定的模拟器中,那将是理想的。我可以通过从项目根目录运行以下命令来做到这一点:
$cordova run --debug --emulator iOS
这工作正常,并导致 iOS 模拟器在带有 iOS 7.0.3 的模拟 iPhone 4 Retina 中运行我的应用程序
除了这个模拟设备,我还想在(例如)iPad 上进行测试。我安装了这些仿真图像,我可以在 Xcode 中手动启动我的应用程序。此外,命令list-emulator-images
(位于project_dir/platforms/ios/cordova/lib
)给出以下输出:
"iPhone Retina (3.5-inch)"
"iPhone Retina (4-inch)"
"iPhone Retina (4-inch 64-bit)"
"iPhone"
"iPad"
"iPad Retina"
但是,问题是:除了默认设置(似乎是iPhone Retina (4-inch)
仿真图像)之外,我似乎无法弄清楚如何启动仿真器。 cordova help
的相关输出给出了以下信息:
run [--debug|--release]
[--device|--emulator|--target=FOO]
[PLATFORM] ............................ deploys app on specified platform devices / emulators
我尝试过以下方法:
cordova run --debug --emulator=iPad iOS
还有很多变化,但没有运气。每次它在同一个模拟器中启动。
The documentation 的命令行工具没有提供这方面的任何信息,而且广泛的 Google 搜索也未能找到任何信息。我错过了一些微不足道的事情吗?还是我想做一些奇怪的事情?我真的希望这里有人有这方面的经验,并且可以提供一些答案。
提前非常感谢!
编辑:忘记明确提及;我在 Mac 上做这一切。如前所述,在 Xcode 中的不同模拟器/模拟器中运行应用程序可以正常工作。
【问题讨论】:
【参考方案1】:要找出可用的模拟器图像,您可以使用它们来列出它们
$ cordova emulate ios --list
Available iOS Virtual Devices:
iPhone-4s, 9.3
iPhone-5, 9.3
iPhone-5s, 9.3
iPhone-6, 9.3
iPhone-6-Plus, 9.3
iPhone-6s, 9.3
iPhone-6s-Plus, 9.3
iPad-2, 9.3
iPad-Retina, 9.3
iPad-Air, 9.3
iPad-Air-2, 9.3
iPad-Pro, 9.3
然后在 --target 参数中使用模拟器名称之一:
cordova emulate ios --target="iPhone-4s, 9.3"
cordova emulate ios --target="iPad-Air-2, 9.3"
cordova emulate ios --target="iPhone-6s, 9.3"
cordova emulate ios --target="iPhone-6-Plus, 9.3"
重要在启动不同的目标模拟器之前退出模拟器(在菜单栏上选择Simulator->Quit
)
考虑到您可能需要通过菜单退出 iOS 模拟器才能从 3.5 英寸 iPhone 切换到 4 英寸 iPhone。
动态列表在platforms/ios/cordova/lib/list-emulator-images
中可用
【讨论】:
谢谢,这有帮助。你的来源是什么?只是想知道我自己是如何解决这个问题的......这个问题的答案也很有帮助:***.com/questions/13877840/… 显然,'cordova emulate' 是 ios-sim 的包装器,您也可以直接与之交谈。这就是我最终要做的,所以我可以直接从我选择的 IDE 构建和启动我的代码。 我刚刚运行了这个命令,可以确认没有列出 4.7 和 5.5 英寸的模拟器,即使安装了 Xcode 6 :-( 嗨,我试过这个命令 "./platforms/ios/cordova/lib/list-emulator-images" 但我没有看到所有选项,没有 iPhone 6,没有 iPhone 6-Plus ,NO iPad-Air会是什么问题?谢谢 我真的不知道为什么,但对我来说,Cordova CLI 在用引号指定目标时会抛出"Error: Cannot read property 'name' of undefined"
,我只能通过像这样cordova run ios --target=iPhone-6
运行它来让它工作。希望这可以为其他人节省一些麻烦!
我的问题结果与 Gifford N 相同。我使用的是 cordova 7.0.0【参考方案2】:
如csantanapr 你可以使用:
cordova emulate ios --target="iPhone-4s"
但是,在这种情况下,cordova(或 PhoneGap 或其他)项目将在 iOS 版本 7.0.3 的 iPhone 4s 模拟器上启动。
如果您想在同一个模拟器上启动项目,但使用其他版本的 iOS(7.1 或 8.0,如果您的系统中存在该版本)?
当然,你可以说cobberboy:
启动特定的模拟器并直接使用 ios-sim 选择您的 ios 版本。
但是你可以改进cordova run
命令的--target
选项。
首先,您必须确保系统上可用的目标 iOS 版本。
为此使用cobberboy的答案:
$ ios-sim showdevicetypes
然后您需要打开文件your_project_dir/platforms/ios/cordova/lib/run.js
并找到如下代码行:
// 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',
'iPad-2', 'iPad-Retina', 'iPad-Air', 'Resizable-iPhone', 'Resizable-iPad'];
为了使用iPhone-4s, 7.1
(或其他一些),只需将其添加到数组validTargets
。
var validTargets = ['iPhone-4s', 'iPhone-4s, 7.1', 'iPhone-5', 'iPhone-5s', 'iPhone-6-Plus', 'iPhone-6',
'iPad-2', 'iPad-Retina', 'iPad-Air', 'Resizable-iPhone', 'Resizable-iPad'];
在
cordova emulate ios --target="iPhone-4s, 7.1"
您的--target="iPhone-4s, 7.1"
将是有效的。
和run.js
的函数deployToSim
:
function deployToSim(appPath, target)
// Select target device for emulator. Default is 'iPhone-6'
if (!target)
target = 'iPhone-6';
console.log('No target specified for emulator. Deploying to ' + target + ' simulator');
var logPath = path.join(cordovaPath, 'console.log');
var simArgs = ['launch', appPath,
'--devicetypeid', 'com.apple.CoreSimulator.SimDeviceType.' + target,
// We need to redirect simulator output here to use cordova/log command
// TODO: Is there any other way to get emulator's output to use in log command?
'--stderr', logPath, '--stdout', logPath,
'--exit'];
return spawn('ios-sim', simArgs);
将iPhone-4s, 7.1
转换为com.apple.CoreSimulator.SimDeviceType.iPhone-4s, 7.1
的有效参数ios-sim
。
【讨论】:
这很好用,让我在使用 Ionic 框架时可以使用ionic run ios --target='iPhone-6, 9.0'
。
好发现?。我只是注释掉了验证validTargets
的块,我能够指定完整的平台,例如:"--target="iPhone-6, 8.4""
。如果 Cordova 将目标验证委托给 ios-sim
,那就太好了。
这对我不起作用。我在 run.js 中输入了垃圾,但它被忽略了。 npm 缓存这个还是什么?如何刷新 npm 的缓存?
你也可以运行“ionic platform update ios”,你就可以运行最近安装的模拟器了【参考方案3】:
TL;DR
您可以启动特定的模拟器并直接使用 ios-sim 选择您的 ios 版本。
export appname="./platforms/ios/build/emulator/Hello World.app"
ios-sim launch "$appname" --devicetypeid "com.apple.CoreSimulator.SimDeviceType.iPad-2, 8.0" --stderr ./platforms/ios/cordova/console.log --stdout ./platforms/ios/cordova/console.log
详情
当我运行这个时:
cordova emulate ios --target="iPad"
并查看了正在运行的进程,我看到了这个(在一行上):
ios-sim launch ./platforms/ios/build/emulator/HelloWorld.app
--stderr ./platforms/ios/cordova/console.log
--stdout ./platforms/ios/cordova/console.log
--family ipad
--exit
进一步调查ios-sim,似乎有一些更具体的选项,特别是:
--devicetypeid <device type> The id of the device type that should be simulated (Xcode6+). Use 'showdevicetypes' to list devices.
e.g "com.apple.CoreSimulator.SimDeviceType.Resizable-iPhone6, 8.0"
所以我按照它的建议做了,并使用“showdevicetypes”参数运行 ios-sim 并得到了这个:
$ ios-sim showdevicetypes
com.apple.CoreSimulator.SimDeviceType.iPhone-4s, 7.1
com.apple.CoreSimulator.SimDeviceType.iPhone-5, 7.1
com.apple.CoreSimulator.SimDeviceType.iPhone-5s, 7.1
com.apple.CoreSimulator.SimDeviceType.iPad-2, 7.1
com.apple.CoreSimulator.SimDeviceType.iPad-Retina, 7.1
com.apple.CoreSimulator.SimDeviceType.iPad-Air, 7.1
com.apple.CoreSimulator.SimDeviceType.iPhone-4s, 8.0
com.apple.CoreSimulator.SimDeviceType.iPhone-5, 8.0
com.apple.CoreSimulator.SimDeviceType.iPhone-5s, 8.0
com.apple.CoreSimulator.SimDeviceType.iPhone-6-Plus, 8.0
com.apple.CoreSimulator.SimDeviceType.iPhone-6, 8.0
com.apple.CoreSimulator.SimDeviceType.iPad-2, 8.0
com.apple.CoreSimulator.SimDeviceType.iPad-Retina, 8.0
com.apple.CoreSimulator.SimDeviceType.iPad-Air, 8.0
com.apple.CoreSimulator.SimDeviceType.Resizable-iPhone, 8.0
com.apple.CoreSimulator.SimDeviceType.Resizable-iPad, 8.0
【讨论】:
这对更改默认模拟器有何作用?您在这里绕过了cordova位并直接启动,对吗?【参考方案4】:不包括版本号
cordova run ios --target="iPhone-6s"
【讨论】:
【参考方案5】:从 Xcode 8.3.2 开始...
旧线程,我知道,但似乎答案似乎略有变化。该线程中早期帖子的提示有所帮助,但阅读代码中包含的文档<cordova-project>/platforms/ios/cordova/lib/run.js
执行./platforms/ios/cordova/lib/list-emulator-images
列出可用的模拟器镜像。进行 cordova 调用以在所需的模拟器中运行时,不要在末尾包含版本号。
cordova run ios --emulator --target="iPad-Air"
See more
【讨论】:
感谢上帝的评论!最新更新后它不起作用,找不到任何信息。刚刚收到错误消息:“错误:无法读取未定义的属性'名称'”,在不包括 ios 版本后已修复。 @MarcoRinck 检查答案的评论,可以通过键入快速修复:cordova run ios --target=iPhone-6
【参考方案6】:
由于我的声誉低,我无法对上述答案发表评论,但目标列表可从以下位置获得:
start-emulator
下
your platform/ios/cordova/lib/
话虽如此,我无法让 ipad 视网膜模拟器工作......
【讨论】:
【参考方案7】:设备列表的最快输出:
$ instruments -s devices
只使用设备名称而不使用版本。
【讨论】:
【参考方案8】:现在是:
cordova run ios --list
Available ios devices:
Available ios virtual devices:
Apple-TV-1080p, tvOS 14.3
Apple-TV-4K-4K, tvOS 14.3
Apple-TV-4K-1080p, tvOS 14.3
Apple-Watch-Series-5-40mm, watchOS 7.2
Apple-Watch-Series-5-44mm, watchOS 7.2
Apple-Watch-Series-6-40mm, watchOS 7.2
Apple-Watch-Series-6-44mm, watchOS 7.2
iPhone-8, 14.3
iPhone-8-Plus, 14.3
iPhone-11, 14.3
iPhone-11-Pro, 14.3
iPhone-11-Pro-Max, 14.3
iPhone-SE--2nd-generation-, 14.3
iPhone-12-mini, 14.3
iPhone-12, 14.3
iPhone-12-Pro, 14.3
iPhone-12-Pro-Max, 14.3
iPod-touch--7th-generation-, 14.3
iPad-Pro--9-7-inch-, 14.3
iPad-Pro--11-inch---2nd-generation-, 14.3
iPad-Pro--12-9-inch---4th-generation-, 14.3
iPad--8th-generation-, 14.3
iPad-Air--4th-generation-, 14.3
还有:
cordova run ios --target="iPad-Pro--12-9-inch---4th-generation-, 14.3"
在科尔多瓦 10.0.0 中
【讨论】:
【参考方案9】:不同的 iphone 和 ipad 模拟器
cordova 运行 ios --list
cordova emulate ios --target "iPhone-7"
【讨论】:
【参考方案10】:根据已为cordova 应用程序生成的构建运行带有Web 请求的iOS 模拟器。 从浏览器执行此请求会在 Mac 上使用 iPhone 8Plus 版本打开模拟器: http://hostname:3000/cordova/build/[xxxx-buildnumber]/emulate?target=iPhone-8-Plus
【讨论】:
【参考方案11】:@Birja 的答案现在有效,但他最终使用的运行命令仍然是错误的,所以这里是正确的答案:
列出模拟器中所有可用的设备cordova run ios --list
它会导致这样的结果:
Available ios devices:
Available ios virtual devices:
Apple-TV-1080p, tvOS 12.2
Apple-Watch-Series-2-38mm, watchOS 5.2
iPhone-5s, 12.2
iPhone-6, 12.2
iPad-Air-2, 12.2
iPad--5th-generation-, 12.2
iPad-Pro--9-7-inch-, 12.2
iPad-Pro, 12.2
iPad-Pro--12-9-inch---2nd-generation-, 12.2
iPad-Pro--10-5-inch-, 12.2
iPad--6th-generation-, 12.2
iPad-Pro--11-inch-, 12.2
iPad-Pro--12-9-inch---3rd-generation-, 12.2
cordova run ios --target "iPad-Pro, 12.2"
使用上述任意目标。在模拟器中运行。
【讨论】:
以上是关于Cordova:启动特定的 iOS 模拟器图像的主要内容,如果未能解决你的问题,请参考以下文章