Очистка симулятора iPhone


107

Есть ли простой способ очистить каталог, в котором xcode развертывает приложение при сборке для симулятора iPhone? У меня есть база данных sqlite, которая при необходимости копируется в папку Documents при запуске. Проблема в том, что я могу изменить свою схему, но новая база данных не будет скопирована, потому что она уже существует.

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


Поддерживает ли симулятор AppleScript?
Rog

Да, это так. Я написал AppleScript для перебора всех симуляторов iOS для каждого устройства и версии ОС и сброса их содержимого и настроек: github.com/michaelpatzer/ResetAllSimulators
mpatzer

Ответы:


91

Симулятор устанавливает приложения в:

"$HOME/Library/Application Support/iPhone Simulator/User/Applications"

Также проверьте:

"$HOME/Library/Developer/CoreSimulator/Devices"

Файлы и каталоги GUID соответствуют установленным приложениям симулятора.

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

Я знаю, что есть способ добавить скрипты в процесс сборки в XCode.

Кроме того, похоже, что XCode изменяет GUID, который он использует для каждой сборки (каталог, в котором находится мое приложение, изменяется между сборками в XCode), поэтому попытки удалить один и тот же каталог все время не будут работать. Если вы работаете только над одним приложением за раз, можно будет очистить весь каталог.


2
Обязательно ознакомьтесь с ответом @idStar ниже. Он содержит обновленную информацию о Lion / Xcode4 и приятный небольшой скрипт, помогающий автоматизировать работу.
PyjamaSam 04

Я тестировал добавление / удаление календарных подписок. На реальном устройстве вы можете удалить подписку на календарь в «Настройки»> «Учетные записи», но этого меню нет в симуляторе iOS, и я не хотел сбрасывать весь симулятор. Итак, я закончил локальное управление версиями моей папки устройства с помощью git и выполнил, git reset HEAD --hard && git clean -fчтобы удалить подписку на календарь после того, как я ее добавил.
Тибо Д.

132

Из ресурсов для разработчиков Apple:

Чтобы вернуть пользовательский контент и настройки симулятора к их заводскому состоянию и удалить установленные вами приложения, выберите iPhone Simulator> Сбросить содержимое и настройки .

Это похоже на:

Сброс iOS


3
Этот, похоже, не очищает SQLite
Asped

1
например, это не очищает кеш браузера
Мау,

1
Теперь эта настройка находится вHardware > Reset Content and Settings
Haseeb Eqx

22

Я делаю это, просто нажимая и удерживая значок моего приложения в симуляторе, а затем, когда оно начинает покачиваться, щелкните черно-белое изображение (x). Появится сообщение с вопросом, действительно ли вы хотите удалить, и вы просто нажмите «Да». В следующий раз, когда вы создадите и развернете свое приложение, оно будет без проблем использовать новую базу данных sqlite, и вам не придется возиться с файловой системой.


Похоже, это не работает - ДЕЙСТВИТЕЛЬНО не удаляет данные из симулятора?
Adam

1
Моя ошибка - это работает нормально (подтверждено чтением каталога в принятом ответе. Я просто забыл недружелюбный к пользователю дизайн NSUserDefaults от Apple (неустановленные значения не сообщаются каким-либо разумным образом)
Адам

@quadelirus, я считаю, что ваш ответ наиболее уместен в данной ситуации.
datnt 07

Это именно то, что я сделал, но я не уверен, как закрыть приложение, которое уже открыто в симуляторе. Пока я не закрою приложение, я не смогу управлять симулятором.
Wanna Coffee


12

После iOS 5 в Mac OS X Lion вы можете попробовать:

  1. Создайте сценарий с именем, RemoveSimulatorApps.commandкоторый содержит:
    rm -rf "$ HOME / Библиотека / Поддержка приложений / iPhone Simulator / 5.0 / Приложения / *"
    
  2. Сохраните этот сценарий в каталоге в вашем PATH.
  3. Сделайте файл исполняемым, например:
    chmod + x RemoveSimulatorApps.command

Предположения

  • Вы можете вызвать его из кнопок избранного на клавиатуре, например, на клавиатуре Logitech или Microsoft с программируемыми клавишами (следовательно, сохраняя его как файл .command вместо, скажем, .sh)
  • Вы можете сдуть все в симуляторе iOS (идеально, если вы просто активно работаете над одним приложением)
  • Все примечания от других относятся к тому, что это хорошее обновляемое приложение и т. Д. (Я лично нашел это полезным, тем не менее, b / c у меня есть переключатели режима разработки, которые перезагружают базу данных в определенном состоянии, в котором я пытался сделать некоторую последовательную надежность / обработку ошибок)

1
Этот работает отлично, просто не забудьте добавить свою правильную версию IOS в путь :)
Asped

1
Имеет ли смысл добавлять ~ вместо абсолютного пути?
Никита Леонов

8

это может быть излишним, но ..

вы также можете использовать меню и «Сбросить содержимое и настройки ...»


7

Что вы действительно пытаетесь сделать, так это очистить свою базу данных, если вы изменили схему. Один из способов сделать это, и он сделает вас более счастливым в долгосрочной перспективе, когда вы начнете выпускать версию своего приложения 2.0, 3.0 и т. Д., - это проверить версию своей таблицы sqlite, и, если она изменилась, отбросить старый файл и используйте тот, который есть в вашем комплекте.

Поиск способа очистки симулятора не поможет решить реальную проблему очистки iPhone клиента, когда вы отправляете новую версию с новой схемой.

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


В целом, я согласен с вами, когда вы говорите об обновлениях выпуска, но в процессе разработки любой конкретной версии это намного больше накладных расходов, чем необходимо. Схема базы данных может меняться для каждой сборки, и необходимость писать код преобразования для каждой сборки просто неправильно.
Трэвис Дженсен,

7

для Xcode> = 6

xcrun simctl list | grep -oh '[A-Z0-9]\{8\}-[A-Z0-9]\{4\}-[A-Z0-9]\{4\}-[A-Z0-9]\{4\}-[A-Z0-9]\{12\}' | xargs -n1 xcrun simctl erase


5

Начиная с Xcode 6, вы можете сделать это из командной строки с помощью: xcrun simctl erase

Кроме того, приложение iOS Simulator (как версия Xcode 6, так и более ранние версии) имеет пункт меню под названием «Сбросить содержимое и настройки», который можно использовать для стирания текущего загруженного устройства.


но он может выполняться автоматически при каждой сборке? например для тестов?
Даниэль Гомес Рико

Предполагая, что вы проводите свои тесты с использованием сценария, вы, безусловно, можете просто добавить к этому сценарию 'xcrun simctl erase <UDID>', где это необходимо ...
Джереми Хаддлстон Секвойя

Да, это именно то, что я сказал.
Джереми Хаддлстон Секвойя

5

Это работает с Xcode 6:

xcrun simctl list | grep -oh '[A-Z0-9]\{8\}-[A-Z0-9]\{4\}-[A-Z0-9]\{4\}-[A-Z0-9]\{4\}-[A-Z0-9]\{12\}' | xargs -I{} xcrun simctl erase {}

Для .bash_profile

alias cleansim="xcrun simctl list | grep -oh '[A-Z0-9]\{8\}-[A-Z0-9]\{4\}-[A-Z0-9]\{4\}-[A-Z0-9]\{4\}-[A-Z0-9]\{12\}' | xargs -I{} xcrun simctl erase {}"


1

Очистить кеш Xcode;

Command + Option + Shift + K

Command + Shift + K

(Используйте их оба, потому что они имеют разную функциональность)

Очистить содержимое производных данных;

Строка меню -> Окно -> Органайзер -> Проекты -> Выберите свой проект

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

Очистить кэш симулятора;

Строка меню -> Симулятор iOS -> Сбросить содержимое и настройки


1

Как я объяснял в комментарии под подтвержденным ответом :

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

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

$ git reset HEAD --hard
$ git clean -f

Итак, шаги следующие:

  1. Установите свое приложение на iOS Simulator и делайте то, что вам нужно.
  2. Определите свое устройство ~/Library/Developer/CoreSimulator/Devices/и выполните cdс ним операцию, а затем git initсоздайте репозиторий git.
  3. Если вы хотите сохранить состояние, выполните git commit -a "Message"
  4. Сделайте все, что изменит настройки (например, добавление подписки на календарь), и проведите тесты.
  5. Выключите симулятор
  6. Делать git reset --hard HEAD
  7. Запустите симулятор, все изменения, сделанные после git commitнего, исчезнут.

1

В XCode перейдите в пункт меню «Окно», выберите «Устройства», а затем вы можете просто удалить те, которые вам больше не нужны.


0

Для Xcode <= 5

Я добавил в свой ~/.bash_profile

alias cleansim='rm -r ~/Library/Application\ Support/iPhone\ Simulator/5.1/Applications/*'

Он просто уничтожает все приложения на симуляторе.


1
Это больше не применимо с Xcode 6 и выше.
Джереми Хаддлстон Секвойя
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.