Cordova: запустите конкретный образ эмулятора iOS
Я разрабатываю кросс-платформенное мобильное приложение с использованием Cordova, фокусируясь в основном на iOS на стадии разработки.
для моего процесса разработки было бы идеально, если бы я мог запустить свое приложение Cordova непосредственно из командной строки и загрузить его в указанный эмулятор. Я могу сделать это, запустив следующее из корневого каталога проекта:
$cordova run --debug --emulator iOS
это работает нормально, и результаты в iOS-симуляторе работает мое приложение в моделируемом iPhone 4 Retina с iOS 7.0.3
помимо этого моделируемого устройства, я также хотел бы протестировать (например) 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
и многие его вариации, но не повезло. Каждый раз он запускается в одном и том же эмуляторе.
документация для инструмента командной строки не предлагает никакой информации в этом отношении, и обширный поиск Google также не удалось ничего найти. Я упускаю что-то тривиальное? Или я пытаюсь сделать что-то странное? Я действительно надеюсь, что кто-то здесь имеет опыт с этим и может дать некоторые ответы.
заранее большое спасибо!
edit: забыл упомянуть явно; я делаю все это на Mac. Как упоминалось ранее, запуск приложения в разных эмуляторах/симуляторах в Xcode работает нормально.
7 ответов:
чтобы узнать, какие изображения симулятора доступны вы можете использовать, чтобы перечислить их
$ 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
как сказать csantanapr вы можете использовать:
cordova emulate ios --target="iPhone-4s"
но, в этом случае Кордова (или PhoneGap или другой) проект будет запущен на симулятор iPhone 4s с iOS версии 7.0.3.
если вы хотите запустить проект на том же симуляторе, но с другой версией iOS (7.1 или 8.0, если его версии существуют в вашей системе)?
Корс, вы можете сделать, как сказать cobberboy:
начать конкретные эмулятор и выбрать версию ios непосредственно с помощью ios-sim.
но вы можете улучшить Кордова .
сначала вы должны убедиться, что целевая версия 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
: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
.
TL; DR
вы можете запустить конкретный эмулятор и выбрать свою версию ios непосредственно с помощью ios-sim.
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"
так что я сделал, как он предложил и побежал ios-sim с аргументом "showdevicetypes" и получил это:
$ 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...
старая нить, я знаю, но кажется, возможно, что ответ немного изменился. Подсказки из более ранних сообщений в этом потоке помогли, но также и чтение документации, включенной в код,
<cordova-project>/platforms/ios/cordova/lib/run.js
выполнить
./platforms/ios/cordova/lib/list-emulator-images
список доступных образов эмулятора. Не включайте номер версии в конце при выполнении вызова cordova для запуска в нужном эмуляторе.cordova run ios --emulator --target="iPad-Air"