我正在使用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中的不同仿真器/模拟器中运行应用程序可以正常工作。
答案 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)
您可以直接使用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)
旧线程,我知道,但似乎答案可能略有改变。此线程中早期帖子的提示有所帮助,但阅读代码中包含的文档<cordova-project>/platforms/ios/cordova/lib/run.js
执行./platforms/ios/cordova/lib/list-emulator-images
列出可用的模拟器图像。在使cordova调用在所需的模拟器中运行时,请不要在最后包含版本号。
cordova run ios --emulator --target="iPad-Air"
答案 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模拟器
cordova运行ios --list
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 中