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

时间:2014-03-10 20:23:19

标签: ios iphone cordova

我正在使用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中的不同仿真器/模拟器中运行应用程序可以正常工作。

11 个答案:

答案 0 :(得分:323)

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

$ 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英寸切换到4英寸iPhone。

动态列表位于platforms/ios/cordova/lib/list-emulator-images

答案 1 :(得分:17)

正如csantanapr所说,你可以使用:

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

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

如果您希望在同一模拟器上启动项目,但使用其他版本的iOS(7.1或8.0,如果您的系统中存在该版本)?

对于科西嘉,你可以这样说cobberboy

  

启动特定的模拟器并直接使用ios-sim选择您的ios版本。

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

首先,您必须确保系统上可用的目标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"有效。

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的有效参数ios-sim

答案 2 :(得分:10)

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

答案 3 :(得分:7)

不包含版本号

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

答案 4 :(得分:4)

自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

答案 5 :(得分:3)

由于声誉不佳,我无法对上述答案发表评论,但目标列表可从以下网址获取:

start-emulator 

下的

your platform/ios/cordova/lib/

话虽如此,我无法让ipad视网膜仿真器工作......

答案 6 :(得分:3)

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

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

答案 7 :(得分:0)

基于已为Cordova应用程序生成的内部版本,通过Web请求运行iOS模拟器。 从浏览器执行此请求将在Mac上打开iPhone 8Plus版本的模拟器: http://hostname:3000/cordova/build/[xxxx-buildnumber]/emulate?target=iPhone-8-Plus

答案 8 :(得分:0)

不同的iphone和ipad模拟器

  1. cordova运行ios --list

  2. cordova模拟ios --target“ iPhone-7”

答案 9 :(得分:0)

@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"使用上面的任何目标。要在模拟器中运行。

答案 10 :(得分:0)

现在是:

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 中