Как мне сбросить iOS Simulator из командной строки? - PullRequest
58 голосов
/ 26 февраля 2011

Мне нужно много раз сбросить iPhone Simulator, и я не нашел способа сделать это без использования мыши. Это мелочь, но я очень устал от этого и хотел бы иметь способ сделать это с помощью сочетания клавиш.

Еще лучше был бы способ восстановить его из командной строки, чтобы я мог встроить сброс в сценарий развертывания.

Я не очень знаком с iOS или MacOS.

Ответы [ 17 ]

75 голосов
/ 09 июля 2015

Просто запустите это в терминале:

xcrun simctl erase all

улучшение, предложенное @txulu, просто убейте симулятор перед выполнением очистки:

killall "Simulator" 2> /dev/null; xcrun simctl erase all
55 голосов
/ 11 сентября 2014

В Xcode 6 НЕ ПРОСТО УДАЛЯЙТЕ ПАПКУ ДЛЯ СИМУЛЯТОРА!Это БУДЕТ испортить вещи, и это вызовет у вас головную боль.

В Xcode 6 на самом деле есть инструмент для управления симулятором из командной строки.

Убедитесь, что ваши параметры командной строкиустановить в Xcode 6

xcrun simctl

В Xcode 6 каждому устройству присвоен GUID / UUID, для сброса определенного устройства вам необходим GUID.

Команда

xcrun simctl list

покажет вам все устройства, которые вы настроили.Вывод будет выглядеть следующим образом:

== Devices ==
-- iOS 7.0 --
iPhone 4s (F77DC0AE-6A6D-4D99-9936-F9DB07BBAA82) (Shutdown)
iPhone 5 (5B78FC0D-0034-4134-8B1F-19FD0EC9D581) (Shutdown)
iPhone 5s (569E5910-E32D-40E2-811F-D2E8F04EA4EF) (Shutdown)
iPad 2 (451DBBD8-A387-4E77-89BF-2B3CD45B4772) (Shutdown)
iPad Retina (2C58366B-5B60-4687-8031-6C67383D793F) (Shutdown)
iPad Air (50E03D3B-3456-4C49-85AD-60B3AFE4918B) (Shutdown)
-- iOS 7.1 --
-- iOS 8.0 --
iPhone 4s (27818821-A0BB-496E-A956-EF876FB514C2) (Shutdown)
iPhone 5 (6FBAA7E2-857C-432A-BD03-980D762DA9D2) (Shutdown)
iPhone 5s (7675C82B-DE49-45EB-A28D-1175376AEEE9) (Shutdown)
iPad 2 (836E7C89-B9D6-4CC5-86DE-B18BA8600E7B) (Shutdown)
iPad Retina (EFDD043D-2725-47DC-A3FF-C984F839A631) (Shutdown)
iPad Air (9079AD6C-E74D-4D5F-9A0F-4933498B852E) (Shutdown)
Resizable iPhone (943CFEDE-A03C-4298-93E3-40D0713652CB) (Shutdown)
Resizable iPad (DBA71CA5-6426-484B-8E9B-13FCB3B27DEB) (Shutdown)

Просто скопируйте GUID из скобок и запустите xcrun simctl erase

, например,

xcrun simctl erase 5B78FC0D-0034-4134-8B1F-19FD0EC9D581

сотретустройство iOS 7.0, iPhone 5

36 голосов
/ 26 февраля 2011

Думал, что выложу это для тех, кто сталкивается с такой же нуждой. Кто-то на Reddit дал мне это решение (которое я тестировал, и оно прекрасно работает). Обратите внимание, что на этот раз вам понадобится многоточие после «Настройки», а не три периода (странно).

Это AppleScript, который можно вызвать из командной строки для сброса симулятора:

tell application "iPhone Simulator"
    activate
end tell

tell application "System Events"
    tell process "iPhone Simulator"
        tell menu bar 1
            tell menu bar item "iOs Simulator"
                tell menu "iOs Simulator"
                    click menu item "Reset Content and Settings…"
                end tell
            end tell
        end tell
        tell window 1
            click button "Reset"
        end tell
    end tell
end tell

Сохранить как /path/to/script и вызвать с помощью:

osascript /path/to/script
16 голосов
/ 23 октября 2014

ОТВЕТ НА COPY-PASTE - примечание: сбросит содержимое и настройки всех доступных симуляторов.

Спасибо @Alpine за вдохновение и знания.Если вы запустите это в командной строке, вы сможете сбросить все доступные симы.Это работает с Xcode 6.

# Get the sim list with the UUIDs
OUTPUT="$(xcrun simctl list)"
# Parse out the UUIDs and saves them to file
echo $OUTPUT | awk -F "[()]" '{ for (i=2; i<NF; i+=2) print $i }' | grep '^[-A-Z0-9]*$' > output.txt
# Iterate through file and reset sim
for UUID in `awk '{ print $1 }' output.txt`
do
xcrun simctl erase $UUID
done
11 голосов
/ 23 сентября 2011

Удалить содержимое

~/Library/Application Support/iPhone Simulator/<sdk revision>

И ты в порядке.

7 голосов
/ 28 апреля 2018

Я проверил это с помощью XCode 9. Чтобы закрыть все активные симуляторы, выполните:

xcrun simctl shutdown all

Для сброса всех симуляторов выполните:

xcrun simctl erase all

Вы можете отфильтровать, какой симулятор закрыть / сброснапример:

xcrun simctl shutdown F36B238F-3ED6-4E10-BB5A-0726151916FA
xcrun simctl erase F36B238F-3ED6-4E10-BB5A-0726151916FA

Найдите все доступные симуляторы (и их GUID) на вашем компьютере следующим образом:

xcrun instruments -s

Чтобы запустить любой симулятор по GUID:

xcrun instruments -w F36B238F-3ED6-4E10-BB5A-0726151916FA -t Blank

Чтобы установить приложение в загруженный симулятор:

xcrun simctl install booted /path/to/your.app

Чтобы удалить приложение из загруженного симулятора:

xcrun simctl uninstall booted /path/to/your.app

Чтобы запустить приложение в загруженном симуляторе:

xcrun simctl launch booted "com.app.bundleIdentifier"

"com.app.bundleIdentifier" - это ваш CFBundleIdentifier в Info.plist

4 голосов
/ 03 марта 2016

После установки Xcode я всегда создаю сочетание клавиш для «Сбросить содержимое и настройки» в симуляторе. Очень полезная экономия времени.

System Preferences > Keyboard > Shortcuts > App Shortcuts > "+"

В окне выбора приложений выберите «Другое ...», чтобы открыть диалоговое окно выбора приложения.

В этом диалоговом окне вы не можете "Показать содержимое пакета", чтобы изучить .app, поэтому вам нужно будет использовать Go to Folder через Cmd - Shift - G . (Сначала откройте раскрывающееся приложение и выберите Other)

В текущей версии Xcode перейдите по пути:

/Applications/Xcode/Contents/Developer/Applications

Выберите Simulator.app и нажмите «Добавить»

Для Menu Title введите Reset Content and Settings...

Для Keyboard Shortcut, нажмите CMD - Shift - R

Reset Content and Settings

4 голосов
/ 11 февраля 2013

Решение для быстрого доступа к клавишам больше не актуально, и, к сожалению, решение @Cameron у меня тоже не сработало (я безуспешно пытался его отладить)

Вот что у меня работает:

#!/bin/bash

# `menu_click`, by Jacob Rus, September 2006
# 
# Accepts a list of form: `{"Finder", "View", "Arrange By", "Date"}`
# Execute the specified menu item.  In this case, assuming the Finder 
# is the active application, arranging the frontmost folder by date.

osascript <<SCRIPT

on menu_click(mList)
    local appName, topMenu, r

    -- Validate our input
    if mList's length < 3 then error "Menu list is not long enough"

    -- Set these variables for clarity and brevity later on
    set {appName, topMenu} to (items 1 through 2 of mList)
    set r to (items 3 through (mList's length) of mList)

    -- This overly-long line calls the menu_recurse function with
    -- two arguments: r, and a reference to the top-level menu
    tell application "System Events" to my menu_click_recurse(r, ((process appName)'s ¬
        (menu bar 1)'s (menu bar item topMenu)'s (menu topMenu)))
end menu_click

on menu_click_recurse(mList, parentObject)
    local f, r

    -- `f` = first item, `r` = rest of items
    set f to item 1 of mList
    if mList's length > 1 then set r to (items 2 through (mList's length) of mList)

    -- either actually click the menu item, or recurse again
    tell application "System Events"
        if mList's length is 1 then
            click parentObject's menu item f
        else
            my menu_click_recurse(r, (parentObject's (menu item f)'s (menu f)))
        end if
    end tell
end menu_click_recurse

application "iPhone Simulator" activate    
menu_click({"iPhone Simulator", "iOS Simulator", "Reset Content and Settings…"})

tell application "System Events"
    tell process "iPhone Simulator"
        tell window 1
            click button "Reset"
        end tell
    end tell
end tell

SCRIPT
1 голос
/ 16 декабря 2015

Я нашел этот очень полезный инструмент под названием «SimulatorManager»: http://tue -savvy.github.io Он сбросит все ваши симуляторы с помощью виджета строки меню (не уверен, так ли это называется), но, кроме того, он даст вам быстрый доступ ко всем данным вашего приложения. Я действительно не могу жить без этого больше. Распространите слово!

1 голос
/ 18 октября 2013

Я написал скрипт, который будет сбрасывать содержимое и настройки всех версий и устройств для симулятора iOS. Он захватывает названия устройств и номера версий из меню, поэтому он будет включать любые новые устройства или версии iOS, для которых Apple выпускает симуляторы.

Легко запустить вручную или использовать в build-скрипте. Я бы предложил добавить его в качестве сценария запуска перед действием перед сборкой.

Он в значительной степени основан на приведенном выше сценарии Стия, но не устарел с новыми версиями iOS и исключает диалоговое окно (лучше для сценариев автоматической сборки и работы из командной строки).

https://github.com/michaelpatzer/ResetAllSimulators

...