Кордова: запустите конкретное изображение эмулятора 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 отлично работает.

Ответ 1

Чтобы узнать, какие изображения симулятора доступны, вы можете их перечислить

$ 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-симулятора через меню, чтобы переключиться с iPhone на 3,5 дюйма на 4 дюйма.

динамический список доступен в platforms/ios/cordova/lib/list-emulator-images

Ответ 2

Как говорят csantanapr, вы можете использовать:

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

но в этом случае проект cordova (или PhoneGap или другой) будет запущен на симулете iPhone 4s с iOS версии 7.0.3.

Если вы хотите запустить проект на том же симуляторе, но с другой версией iOS (7.1 или 8.0, если она существует в вашей системе)?

Из корса вы можете сделать, например, cobberboy:

запустите специальный эмулятор и выберите версию ios, используя ios-sim.

Но вы можете улучшить опцию --target команды cordova 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 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.

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

Подробнее

Ответ 6

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

start-emulator 

под

your platform/ios/cordova/lib/

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

Ответ 7

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

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

Ответ 9

Отличный симулятор iphone и ipad

  1. Cordova Run IOS --list

  2. Cordova подражать IOS --target "iPhone-7"

Ответ 10

Ответ @Birja работает прямо сейчас, но команда run, которую он использовал, наконец, все еще не верна, поэтому здесь правильный ответ:

Чтобы перечислить все устройства, доступные в симуляторе 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" Используйте любую цель из вышеперечисленного. Бежать в симуляторе.