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
只需使用没有版本的设备名称。