simctl command-line tool
t.me/qa_chillout
Intro
simctl – инструмент командной строки для взаимодействия с симулятором iOS. Она очень похоже на adb для Android. Увы, simctl плохо задокументирована Apple, поэтому в этой статье разберемся со всеми нюансами работы с ней.
Справка по командам
Сам двоичный файл утилиты доступен нам по следующему пути: /Applications/Xcode.app/Contents/Developer/usr/bin/simctl. Просмотр справки по командам доступен, если выполнить команду:
$ xcrun simctl

Например, мы хотим узнать подробнее про команду list , которая выводит список всех установленных устройств. Для этого необходимо использовать команду help с нашей искомой командой:
$ xcrun simctl help list

Или мы хотим узнать подробнее про команду сlone , которая позволяет клонировать существующее устройств:
$ xcrun simctl help clone

Список доступных устройств
Уже знакомая команда list отобразит нам список доступных симуляторов.
$ xcrun simctl list

Данный список довольно большой и разделен на следующие категории:
== Device Types ==
== Runtimes ==
== Devices ==
== Device Pairs ==
Согласитесь, не очень удобно. Давайте попробуем вывести только сами устройства:
$ xcrun simctl list devices

Разберем подробнее строку, например вот эту:
iPhone 12 Pro Max (CF4C4E14-F06D-4BB1-A515-B4CB43AA25B3) (Shutdown)
где:
Phone 12 Pro Max – наш симулятор,
CF4CE14-F06D-4BB1-A515-B4CB43AA25B3 – UDID устройства,iOS 14.5 – версия OS.
Также, например если нам удобно получить данные в формате JSON, можно с помощью параметра -j или --json вывести информацию по устройствам:

CRUD команды
Создание нового симулятора
Перейдем к созданию нового симулятора. Для этого есть команда create, после которой указываются имя устройства, его тип и версия OS (эти данные есть в выводе команды list).
$ xcrun simctl create iPhone-12-Pro-Max com.apple.CoreSimulator.SimDeviceType.iPhone-12-Pro-Max com.apple.CoreSimulator.SimRuntime.iOS-14-5
После выполнения команды отобразится UDID созданного симулятора.

Запуск устройства
Запустить устройство можно командой boot:
$ xcrun simctl boot 3D934826-1072-4F22-9CBD-77F2807EC0E8

Например мы закрыли симулятор, либо нам надо его открыть повторно через какое-то время, то можно выполнить следующую команду:
$ open /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app/

Выключение устройства
Выключить симулятор можно командой shutdown, например, когда завершите с ним работу:
$ xcrun simctl shutdown booted

Чтобы выключить все симуляторы, следует использовать команду shutdown all:
$ xcrun simctl shutdown all
Обновление OS
Представим, нам необходимо например повысить версию OS с 14.5 до 14.7.1. Командой upgrade это можно сделать, чтобы не пересоздавать устройство:
$ xcrun simctl upgrade 3D934826-1072-4F22-9CBD-77F2807EC0E8 com.apple.CoreSimulator.SimRuntime.iOS-14-7-1
Удаление устройств
Чтобы удалить неиспользуемые устройства, можно выполнить команду delete unavailable:
$ xcrun simctl delete unavailable
А чтобы удалить конкретный симулятор следует выполнить следующую команду:
$ xcrun simctl delete booted
Бывают и такие ситуации, когда следует удалить все устройства, в таком случае используется команда delete all:
$ xcrun simctl delete all
Дополнительные команды
Клонирование симулятора
Для создания копии созданного симулятора необходимо использовать команду clone:
$ xcrun simctl clone booted NewiPhone-12-Pro-Max
Восстановление симулятора к «заводским» настройкам
Чтобы сбросить симулятор к «заводским» настройкам используется команда erase:
$ xcrun simctl erase booted
⚠️Сначала выключите симулятор, а затем выполняйте команду, в противном случае возникнет ошибка.
А если необходимо сбросить несколько симуляторов? Допишите all:
$ xcrun simctl erase all
Изменение имени устройства
Имя симулятора можно изменить с помощью команды rename:
$ xcrun simctl rename booted NewiPhoneName
Работа с приложением
Установка приложения
Для установки приложения на симулятор есть несколько способов:
1) собрать проект и запустить на симуляторе:

2) установить файл .app, перетащив его на симулятор:

3) А также можно командой install, если знаете путь к файлу .app:
$ xcrun simctl install booted ~/Youla.app

Запуск приложения
Запустить приложение можно с помощью команды launch, передав bundle ID приложения:
⚠️узнать подробнее о получении bundle ID можно в статье: Bundle ID
$ xcrun simctl launch booted com.allgoritm.Youla

Информация о приложении
Команда appinfo выводит информацию о приложении, например:
$ xcrun simctl appinfo booted com.allgoritm.Youla

Закрыть приложение
Команда terminate закрывает приложение:
$ xcrun simctl launch terminate com.allgoritm.Youla
Удаление приложения
А с помощью команды uninstall можно удалить приложение:
$ xcrun simctl uninstall booted com.allgoritm.Youla

Полезности при тестировании
Скриншот экрана
Довольно часто приходится делать скриншоты. Есть два способа:
1) сделать скриншот всего симулятора (сочетание клавиш ⌘⇧4, далее навести курсор на симулятор и нажать пробел):

2) А если необходимо сделать скриншот только экрана? Для этого есть команда io, она идет вместе со screenshot. Вы сможете сохранить скриншот в форматах: .png,.jpeg,.gif:
$ xcrun simctl io booted screenshot ~/Desktop/image.png


Запись экрана
Запись видео экрана доступно с помощью команды recordVideo. Вы сможете сохранить видео в форматах: .mov,.mp4:
$ xcrun simctl io booted recordVideo ~/Desktop/video.mp4

⚠️ Чтобы завершить запись необходимо нажать control+C в терминале.
Отображение нажатий на экране
Отображение тапов на симуляторе можно включить с помощью команд:
defaults write com.apple.iphonesimulator ShowSingleTouches 0 defaults write com.apple.iphonesimulator ShowSingleTouches 1
Переход по URL
openurl – команда, которая служит для перехода по конкретному URL на симуляторе:
$ xcrun simctl openurl booted "https://www.youla.io/"

Также можно открывать и схемы вида app://:
$ xcrun simctl openurl booted youla://chat

Отправка push на симулятор
Сначала подготовим следующий файлик, который будет содержать заголовок и текст push-уведомления. Важно: структура файла – JSON, а его расширение – .apns (Apple Push Notification service):
{
"aps": {
"alert": {
"title": "Test",
"body": "My first message"
}
}
}

Не забудьте установить приложение, затем разрешите отправку push-уведомлений. После этого нужно выполнить команду push, указав устройство, bundle ID, а также путь до файла .apns:
$ xcrun simctl push booted com.allgoritm.Youla ~/Desktop/test.apns


Установка dark/light темы
Команда ui appearance поможет изменить тему симулятора:
$ xcrun simctl ui booted appearance dark $ xcrun simctl ui booted appearance light

⚠️ Сменить тему можно только на симуляторах с iOS 13.0 и выше.
Добавить фото/видео на симулятор
Добавить фото/видео/гиф на симулятор можно двумя способами:
1) просто перетащить из Finder на сам симулятор,
2) командой addmedia:
$ xcrun simctl addmedia booted ~/Desktop/one.png $ xcrun simctl addmedia booted ~/Desktop/video.mp4 $ xcrun simctl addmedia booted ~/Desktop/some.gif
Пермишены
Для работы с пермишенами существует команда privacy:
$ xcrun simctl privacy <device> <action> <service> <bundle ID>
где:device – наш симулятор,
action – действие:
- grant – предоставляет пермишен
- revoke – отбирает пермишен
- reset – сбрасывает пермишен
service – службы:
- photos – доступ к галереи
- microphone — доступ к микрофону
- location — доступ к гео
- siri — доступ к Siri
Например:
$ xcrun simctl privacy booted grant photos com.allgoritm.Youla $ xcrun simctl privacy booted reset photos com.allgoritm.Youla


Резюме
Пользуйтесь командами, экономьте время и шарьте знания =)
Обсудить статью, узнать больше можно в телеграм канале «Тестировщики нужны».