Xcode 6 - запуск симулятора з командного рядка


102

Я хочу запустити симулятор iPhone з командного рядка.

до цих пір я використовував команду нижче

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Applications/iPhone Simulator.app/Contents/MacOS/iPhone Simulator -SimulateDevice

-SimulateDevice використовується для запуску певного типу пристрою

Тепер із Xcode 6 шлях та додаток змінено на

/Applications/Xcode.app/Contents/Developer/Applications/iOS Simulator.app/Contents/MacOS/iOS Simulator

але, на жаль, опціяSimulateDevice зараз не працює. Я можу запустити тренажер, але у вас немає можливості вказати, який саме запустити

Хтось знайшов альтернативи для цього за допомогою Xcode 6?

Відповіді:


210

Знайшов спосіб досягти того, що я хотів.

Apple представила цікавий інструмент з Xcode 6!

simctl

simclt дозволяє керувати тренажером, який працює.

запустіть, xcrun simctlщоб отримати список доступних підкоманд. Багато нових варіантів, з якими можна пограти.

Тепер, щоб зробити те, що я хотів, ось команда запустити тренажер:

xcrun instruments -w "iPhone 5 (8.0 Simulator)"

-w - надати тип пристрою та отримати список доступних пристроїв.

Просто виконайте це:

xcrun instruments -s

Після запуску тренажера ви можете керувати ним за допомогою simctl

Щоб встановити додаток:

xcrun simctl install booted <app path>

Щоб запустити додаток:

xcrun simctl launch booted <app identifier>

Сподіваюся, це допомагає.


8
<Додаток ідентифікатор> є додаток розшарування ID
Hugo

Не те, що я бачив, крім деяких відомих проблем , як згаданий біг xcrun simctlбуде перелічити команди. На мій погляд, вони досить пояснюють себе.
daniellmb

1
Я не зміг змусити його працювати, використовуючи xcrun simctl boot <device id>замістьxcrun instruments -w...
CambridgeMike

якось я продовжую отримувати: simctl [23846: 459252] *** Завершення програми через невиконаний виняток 'NSInvalidArgumentException', причина: '*** - [__ NSPlaceholderDeck initWithObjects: forKeys: count:]: спроба вставити нульовий об'єкт з об’єктів [0] на simctl install завантажився
Pooja Shah

2
Ви повинні вказати фактичний UDID або ім'я пристрою, а не bootedяк, як bootedтільки довільно вибрати один із завантажених пристроїв на тренажері.
devios1

63

З Xcode 6, якщо ви хочете, щоб під час запуску iOS Simulator.app завантажувався певний пристрій, ви можете запустити це з командного рядка:

open -a "iOS Simulator" --args -CurrentDeviceUDID <DEVICE UDID>

звідки ви можете розпізнати UDID пристрою, з якого потрібно завантажити:

xcrun simctl list

З Xcode 7 додаток було перейменовано на Simulator.app, тому вам слід оновити вищезгадане відповідно до:

open -a Simulator --args -CurrentDeviceUDID <DEVICE UDID>


У 6.2 бета-версії ця команда більше не працює. Наприклад, замість запуску симулятора iPhone 5s (з урахуванням його ідентифікатора) я отримую симулятор iPad Air.
Майкл Тепер

Хм, у нас це надійно не працює на трьох різних машинах. Будь-яку іншу інформацію, яку я можу надати, щоб допомогти вирішити проблеми?
Майкл Тепер

Я зрозумів, що відбувається. Ми встановили Xcode 6.2 beta, але не зробили його Xcode за замовчуванням. Отже, /usr/bin/xcrun simctl listперелічені тренажери, доступні для звичайного Xcode. Однак open -a "iOS Simulator"запускає 6.2-бета-симулятор, який очікує ідентифікаторів пристрою від бета-симулятора. Як я можу вказати, який тренажер я запускаю (звичайний та бета-версія)?
Майкл Тепер

1
відкрити /path/to/Xcode.app/Contents/Developer/Applications/iOS \ Simulator.app
Jeremy Huddleston Sequoia

2
@chrisco Немає документації. Ви можете перевірити параметри за замовчуванням через defaults read com.apple.iphonesimulatorі можете замінити будь-які з командних рядків. Simulator.app використовує лише UDID для унікальної ідентифікації пристроїв. Ви не можете використовувати ім'я.
Джеремі Хаддлстон Секвойя

17

Для xcode 7:

open /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app --args -CurrentDeviceUDID <DeviceUDID>

Отримайте свій симулятор удід xcrun simctl list


12

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

$ xcrun simctl list devices
== Devices ==
-- iOS 11.2 --
iPhone 5s (E3B6EA43-C805-49C2-9502-A44A465D8DF2) (Shutdown)
iPhone 6 (801E9E11-CA86-473A-9879-4B0742B827FB) (Shutdown)
iPhone 6 Plus (24013349-1A6F-489C-9A68-ABB00EBB4BBF) (Shutdown)
iPhone 6s (1A594D75-146C-4BEA-A250-1FADE7886114) (Shutdown)
iPhone 6s Plus (C2730FA0-11CB-49C9-A087-CB3C1BF1CC3D) (Shutdown)
iPhone 7 (F58B3749-3276-49E5-81C8-EBA1AEA7B242) (Shutdown)
iPhone 7 Plus (98167D8C-8F27-404C-AB02-588D9AAFD071) (Shutdown)
iPhone 8 (96322368-F763-4E0A-8576-ADE9F678211F) (Shutdown)
iPhone 8 Plus (E916D1EE-B67B-4C01-B3F5-C5C80CC4CDF8) (Shutdown)
iPhone SE (ABEFEDDF-7A7C-4B94-9E91-E065170FA47F) (Shutdown)
iPhone X (84DAB7AB-3CA2-4F5B-8C4E-A5B54CA15C31) (Shutdown)
iPad Air (DCD8CF4B-2C9F-4BA1-952A-ACB9CAD0A84D) (Shutdown)
iPad Air 2 (A47C9A05-233F-450F-9A39-318258E9ADEA) (Shutdown)
iPad (5th generation) (819C058E-64AC-4E73-8F41-2C0F919F8B56) (Booted)

ця команда виведе список доступних пристроїв із його UDID та статусами

Потім запускаю програму тренажера із зазначенням пристрою з опцією -CurrentDeviceUDID

/Applications/Xcode.app/Contents/Developer/Applications/Simulator.app/Contents/MacOS/Simulator -CurrentDeviceUDID <DEVICE-UDID>

ПРИМІТКА: замініть на допустимий UDID зі списку.

Наприклад, якщо ми хочемо запустити тренажер з Ipad (завантаження% покоління):

/Applications/Xcode.app/Contents/Developer/Applications/Simulator.app/Contents/MacOS/Simulator -CurrentDeviceUDID 84DAB7AB-3CA2-4F5B-8C4E-A5B54CA15C31

ОНОВЛЕННЯ 23.05.2018

З Xcode 9.3 CurrentDevice UDID опція не працює для мене, як спосіб вирішення, я повинен використовувати simctl для завантаження пристрою в тренажері, перш ніж відкрити його.

xcrun simctl boot 2BF01FC0-7E29-4AF1-ADD1-886DF129A9A9
open -a Simulator 

Ви можете створювати, стирати, видаляти, завантажувати, вимикати та модернізувати тренажери за допомогою simctl.

$ xcrun simctl create
Usage: simctl create <name> <device type id> <runtime id>

$ xcrun simctl delete
Usage: simctl delete <device> [... <device n>] | unavailable

Щоб отримати список дійсних типів пристроїв та час виконання

xcrun simctl list devicetypes

xcrun simctl list runtimes

10

Для завантаження тренажера:

xcrun simctl boot "iPhone X"

Він завантажиться як безголовий режим. Щоб зробити тренажер видимим:

open -a Simulator

xcrun simctl bootпростіше, ніж xcrun instruments -w. instrumentsпотрібне повне ім’я пристрою.


8

Ви можете вказати версію обладнання та iOS за допомогою прапора -w. Формат є

instruments -w "simulator-version"

Наприклад:

instruments -w "iPhone Retina (3.5-inch) - Simulator - iOS 7.1".

Ви отримаєте доступні комбінації hardvare-iOS, скориставшись instruments -w help командою.


2
Використовуйте instruments -s devicesдля отримання списку пристроїв. Однак, коли ви отримаєте назву пристрою, просто виклик instruments -w <device>, швидше за все, призведе до помилки, оскільки інструменти намагаються записати слід до кореня вашого диска. Ви можете вказати шлях для сліду, в який він буде успішно записаний.
Майкл Тепер

Щоб детальніше ознайомитись з коментарем @ MichaelTeper, використовуйте -Dдля вказівки вихідний каталог для .trace документів.
devios1

3

Перевірено в Xcode 9.4.1

Список пристроїв у НАДІЛЬНОХОРОЖНОМ ФОРМАТІ: ~/Library/Developer/CoreSimulator/Devices/device_set.plist

Root
    DefaultDevices
        com.apple.CoreSimulator.SimRuntime.iOS-8-4
             com.apple.CoreSimulator.SimDeviceType.iPad-Retina : AB335FAF-E3E3-4AE9-A0AF-D1C6AEB5FBD4

Потім потрібно запустити (відкрити) додаток Simulator і переконатися, що запускається новий екземпляр програми.

Додаток тут: /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app

А формат, який ви використовуєте, такий:

open -n -a <SimulatorPath> --args -CurrentDeviceUDID <SimDeviceTypeUDID>

Отже, якби я хотів запустити Simulator вище, я би зробив це.

open -n -a /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app --args -CurrentDeviceUDID AB335FAF-E3E3-4AE9-A0AF-D1C6AEB5FBD4

Гарячий чорт! Я щойно тестував його і він працює на Mac OS 10.11.6. Тепер наступний трюк - сказати симулятору відкрити встановлену програму. Я ще не там. Сподіваюся, це допомагає. Дякуємо https://stackoverflow.com/users/726106/jeremy-huddleston-sequoia за його детальне пояснення.


Не існує такого поняття, як "новий примірник програми". У програмі Macintosh програма має лише один примірник на кожного вхідного користувача. Цей одноаплікаційний додаток, що проходить як єдиний процес - може сам по собі розмістити безліч "документів" (в даному випадку - тренажерів).
Motti Shneor

1

Виконайте цю команду. Додаток буде перезапущено з подальшими змінами. Не потрібно її перебудовувати заново.

ios-sim "launch" "/Library/WebServer/Documents/testapp/build/iphone/build/Debug-iphonesimulator/test.app" "--devicetypeid" "iPad-2" "--exit";

Для списку devicetypeid:

ios-sim showdevicetypes

Для цього потрібно встановити iOS-sim (включаючи гумозний вузол), і він, на жаль, обмежений, порівняно з рідним командним рядком 'scrub simctl'.
Motti Shneor
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.