Очистка симулятора 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), поэтому попытки удалить один и тот же каталог все время не будут работать. Если вы работаете только над одним приложением за раз, можно будет очистить весь каталог.

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

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

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

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

Сброс iOS

j7nn7k
источник
3
Этот, похоже, не очищает SQLite
Asped
1
например, это не очищает кеш браузера
Мау,
1
Теперь эта настройка находится вHardware > Reset Content and Settings
Haseeb Eqx
22

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

Джон
источник
Похоже, это не работает - ДЕЙСТВИТЕЛЬНО не удаляет данные из симулятора?
Adam
1
Моя ошибка - это работает нормально (подтверждено чтением каталога в принятом ответе. Я просто забыл недружелюбный к пользователю дизайн NSUserDefaults от Apple (неустановленные значения не сообщаются каким-либо разумным образом)
Адам
@quadelirus, я считаю, что ваш ответ наиболее уместен в данной ситуации.
datnt 07
Это именно то, что я сделал, но я не уверен, как закрыть приложение, которое уже открыто в симуляторе. Пока я не закрою приложение, я не смогу управлять симулятором.
Wanna Coffee
1
@WannaCoffee См stackoverflow.com/questions/18519799/...
John
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 у меня есть переключатели режима разработки, которые перезагружают базу данных в определенном состоянии, в котором я пытался сделать некоторую последовательную надежность / обработку ошибок)
idStar
источник
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
цзя тянь
источник
6

Если вы используете Xcode 9 -> Menubar -> Hardware -> Erase All Content and Settings

Xcode -> Оборудование -> Стереть все содержимое и настройки

Харальд
источник
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 {}"
Томас Т
источник
3

Начиная с Xcode 6:

xcrun simctl erase <sim udid> <- перезагружает симулятор.

TinyTimZamboni
источник
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/*'

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

Wfbarksdale
источник
1
Это больше не применимо с Xcode 6 и выше.
Джереми Хаддлстон Секвойя