Cordova:启动特定的iOS模拟器图像

我正在开发一个使用Cordova的跨平台移动应用程序,主要侧重于iOS开发阶段。

对于我的开发过程,如果我可以直接从命令行启动我的Cordova应用程序并将其加载到指定的模拟器中,那将是理想的。 我可以通过从项目根目录运行以下内容来完成此操作:

$cordova run --debug --emulator iOS 

这工作正常,并导致iOS模拟器运行我的应用程序在iOS 7.0.3模拟iPhone 4视网膜

除了这个模拟设备,我还想testing一个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

和其中的许多变化,但没有运气。 每次在同一个模拟器中启动。

命令行工具的文档在这方面没有提供任何信息,广泛的Googlesearch也没有提供任何信息。 我错过了一些微不足道的东西吗? 还是我想做一些奇怪的事情? 我真的希望这里有人有这方面的经验,并可以提供一些答案。

首先十分感谢!

编辑:忘了提及明确; 我正在Mac上做所有这些。 如前所述,在Xcode中运行不同的模拟器/模拟器的应用程序工作正常。

要找出可用的模拟器图像,可以使用它们列出它们

 $ 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" 

重要在启动不同的目标模拟器之前退出模拟器(在菜单栏上selectSimulator->Quit

考虑到你可能需要通过菜单退出iOS模拟器,从3.5英寸切换到4英寸iPhone。

dynamic列表在platforms/ios/cordova/lib/list-emulator-images可用

就像csantanapr你可以使用:

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

但是,在这种情况下,将在iOS版本7.0.3的iPhone 4s模拟器上启动cordova(或PhoneGap或其他)项目。

如果你想在同一个模拟器上启动项目,但使用其他版本的iOS(7.1或8.0,如果它的版本存在于你的系统中)?

corse,你可以像cobberboy那样说:

启动一个特定的模拟器,并通过直接使用ios-simselect你的ios版本。

但是你可以改进 – cordova run命令的--target选项。

首先,您必须确保在您的系统上可用的iOS版本。

因为它使用cobberboy的答案:

 $ ios-sim showdevicetypes 

然后你需要打开文件your_project_dir/platforms/ios/cordova/lib/run.js并find如下所示的代码行:

 // 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 (或其他)简单地将其添加到数组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"将是有效的。

deployToSim的函数run.js

 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 for ios-sim

TL; DR

你可以启动一个特定的模拟器,并通过直接使用ios-simselect你的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. eg "com.apple.CoreSimulator.SimDeviceType.Resizable-iPhone6, 8.0" 

所以我做了它的build议,并用“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 

从Xcode 8.3.2开始

我知道,老线程,但也许,似乎答案稍有改变。 在这个线程的早期post的提示有所帮助,但是阅读代码中包含的文档<cordova-project>/platforms/ios/cordova/lib/run.js

执行./platforms/ios/cordova/lib/list-emulator-images列出可用的模拟器映像。 在所需的仿真器中运行cordova调用时,不要在最后包含版本号。

 cordova run ios --emulator --target="iPad-Air" 

查看更多

由于我的名誉低,我不能评论上面的答案,但目标列表可以从以下url获得:

 start-emulator 

 your platform/ios/cordova/lib/ 

话虽如此,我不能让ipad视网膜模拟器工作…

不要包含版本号

 cordova run ios --target="iPhone-6s" 

最快的设备输出列表: $ instruments -s devices

只需使用没有版本的设备名称。