Кордова: запуск конкретного зображення емулятора iOS


120

Я розробляю кросплатформенний мобільний додаток, використовуючи Кордову, орієнтуючись переважно на 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 також нічого не зміг знайти. Невже я пропускаю щось тривіальне? Або я намагаюся зробити щось дивне? Я дуже сподіваюся, що хтось тут має досвід цього, і може дати відповіді.

Дякую заздалегідь!

редагувати: забув чітко згадати; Я все це роблю на Mac. Як вже згадувалося раніше, запуск програми в різних емуляторах / симуляторах у Xcode працює добре.

Відповіді:


335

Щоб дізнатися, які наявні зображення імітатора, ви можете використовувати їх для їх переліку

$ 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


3
Дякую, це допомогло. Що було для вас джерелом? Просто цікаво , як я міг би зрозумів це сам ... Відповідь на це питання також допомогло: stackoverflow.com/questions/13877840 / ... Мабуть «Cordova емулювати» є оболонкою пакета КСН-сім, який ви також можете говорити безпосередньо. Це те, що я закінчив, тому я можу створити та запустити свій код безпосередньо з мого вибору IDE.
EggMeister

Я щойно запустив цю команду і можу підтвердити, що емулятори 4,7 та 5,5 дюйма не вказані, навіть із встановленим Xcode 6 :-(
Бен Клейтон

Привіт, я спробував цю команду ". проблема? Дякую
користувач2120121

10
Я не знаю, чому, але для мене Cordova CLI би кидав, "Error: Cannot read property 'name' of undefined"коли вказував ціль цитатами, я міг би змусити її працювати, виконавши її так cordova run ios --target=iPhone-6. Сподіваюсь, це позбавить когось іншого неприємності!
Гіффорд Н.

1
У мене такий же проблемний результат, як у Гіффорда Н. Я використовую cordova 7.0.0
Террі Вілкінсон

18

Як кажуть, csantanapr ви можете використовувати:

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

але, у цьому випадку, проект на кордоні (або PhoneGap чи іншому) буде запущений на тренажері iPhone 4s із версією iOS версії 7.0.3 .

Якщо ви хочете запустити проект на тому ж симуляторі, але з іншою версією iOS (7.1 або 8.0, якщо такі версії існують у вашій системі)?

З корса, ви можете зробити так, як сказати ковбас :

запустіть певний емулятор і виберіть версію ios, безпосередньо використовуючи ios-sim.

Але ви можете вдосконалити --targetваріант runкомандування cordova .

Спочатку ви повинні переконатися, яка цільова версія iOS доступна у вашій системі.

Для цього скористайтеся відповіддю на паутину :

$ 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.


Це прекрасно працює і дозволило мені використовувати ionic run ios --target='iPhone-6, 9.0'під час використання Ionic Framework.
jorisw

Гарна знахідка 👍. Я просто закомментировать блок , який перевіряє validTargetsі я був в стані вказати повні платформи, приклад: "--target="iPhone-6, 8.4"". Було б дуже добре, якби Кордова делегувала перевірку цілі на ios-sim.
Кайл Фокс

Це не працює для мене. Я набрав сміття в run.js, і це було проігноровано. Чи кешує npm це чи щось таке? Як я можу оновити кеш npm?
Рандгальт

Ви також можете запустити "ionic update platform ios", і ви зможете запустити нещодавно встановлені емулятори
Benjamin Piette

10

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

Як це працює для зміни симулятора за замовчуванням? Ви тут обминаєте шнур кордового і просто запускаєте безпосередньо, правда?
mix3d


4

Станом на Xcode 8.3.2 ...

Я знаю стару тему, але, мабуть, відповідь трохи змінилася. Підказки з попередніх публікацій у цій темі допомагали, але читання документації, включеної в код,<cordova-project>/platforms/ios/cordova/lib/run.js

Виконати, ./platforms/ios/cordova/lib/list-emulator-imagesщоб перелічити доступні зображення емулятора. Не включайте номер версії в кінці під час здійснення дзвінка за допомогою шнура для запуску в потрібному емуляторі.

cordova run ios --emulator --target="iPad-Air"

Побачити більше


слава богу за ваш коментар! Він не працював після останнього оновлення і не міг знайти жодної інформації. Щойно надійшло повідомлення про помилку: "Помилка: Неможливо прочитати властивість 'name' undefined", яке було виправлено після НЕ, включаючи версію ios.
Марко Рінк

@MarcoRinck перевірити коментар до відповіді, там є швидке виправлення, набравши:cordova run ios --target=iPhone-6
Кіра Хао

3

Я не можу коментувати відповідь вище через мою низьку репутацію, але список цілей доступний:

start-emulator 

під

your platform/ios/cordova/lib/

Сказавши це, я не можу змусити емулятор сітківки ipad працювати ...


3

найшвидший вихід списку пристроїв: $ instruments -s devices

Просто використовуйте назву пристрою без версії.



0

Різні імітатор iphone та ipad

  1. cordova run ios --list

  2. емуляція кордової емуляції ios --цільовий "iPhone-7"


0

@ Відповідь Біржі працює зараз, але команда запуску, яку він, нарешті, використала, як і раніше, помиляється, тож правильна відповідь:

Щоб перелічити всі пристрої, наявні в тренажері 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"Використовуйте будь-яку ціль із зазначеного вище. Бігати в тренажері.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.