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

103

Я хочу запустить симулятор 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 позволяет вам управлять запущенным симулятором.

run, 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
<app identifier> - это идентификатор вашего пакета приложений
Хьюго,
Не то, чтобы я видел, кроме некоторых известных проблем , как уже упоминалось, при запуске xcrun simctlперечисляются команды. На мой взгляд, они говорят сами за себя.
daniellmb 04
1
Мне не удалось заставить его работать xcrun simctl boot <device id>вместоxcrun instruments -w...
CambridgeMike
почему-то я все время получаю: simctl [23846: 459252] *** Завершение работы приложения из-за неперехваченного исключения 'NSInvalidArgumentException', причина: '*** - [__ NSPlaceholderDictionary initWithObjects: forKeys: count:]: попытка вставить нулевой объект из объектов [0] при установке simctl загружена
Пуджа Шах
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 (учитывая его ID) я получаю симулятор iPad Air.
Майкл Тепер,
Хм, у нас он надежно не работает на 3 разных машинах. Могу ли я предоставить любую другую информацию для устранения неполадок?
Майкл Тепер
Я понял, что происходит. Мы установили бета-версию Xcode 6.2, но не сделали ее Xcode по умолчанию. Итак, /usr/bin/xcrun simctl listперечисляем симуляторы, доступные для обычного Xcode. Тем не менее, open -a "iOS Simulator"запускается бета-симулятор 6.2, который ожидает идентификаторы устройств из бета-симулятора. Как я могу указать, какой симулятор запускаю (обычный или бета-версию)?
Майкл Тепер
1
open /path/to/Xcode.app/Contents/Developer/Applications/iOS \ Simulator.app
Джереми Хаддлстон Секвойя,
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>

Получите свой симулятор udid's от xcrun simctl list

TinyTimZamboni
источник
13

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

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

Вы получите доступные комбинации аппаратного обеспечения и iOS, используя instruments -w help команду.

Neenu
источник
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>

Итак, если бы я хотел запустить Симулятор, описанный выше, я бы сделал это.

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 приложение имеет только один экземпляр на каждого вошедшего в систему пользователя. Это одноэкземплярное приложение, размещенное как единый процесс, само по себе может содержать множество «документов» (в данном случае - симуляторов).
Мотти Шнеор
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.
Мотти Шнеор