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 100

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

Не включать номер версии

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

начиная с 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"

Посмотреть подробнее

Я не могу прокомментировать ответ выше из-за моей низкой репутации, но в списке задач доступно из:

start-emulator 

под

your platform/ios/cordova/lib/

сказав это, я не могу заставить работать эмулятор iPad retina...

быстрый вывод списка устройств: $ instruments -s devices

просто используйте имя устройства без версии.