Ответ 1
Я представляю,
Окончательный iOS Simulator Reset Script (ссылка)
Основанный на Oded Regev code из этого SO-вопроса (который был основан на Код "menu_click" кода Jacob Rus)
Есть ли какая-либо опция для reset содержимого и настроек всех симуляторов? В одном событии или одной команде через командную строку?
Я представляю,
Основанный на Oded Regev code из этого SO-вопроса (который был основан на Код "menu_click" кода Jacob Rus)
Основываясь на ответе Джереми Хаддлстона Секвойи, я написал оболочку script, которая будет reset всех симуляторов.
Для Xcode 7 вы можете использовать:
#!/bin/sh
instruments -s devices \
| grep "(\d[.0-9]\+) \[[0-9A-F]\{8\}-[0-9A-F]\{4\}-[0-9A-F]\{4\}-[0-9A-F]\{4\}-[0-9A-F]\{12\}\]" \
| grep -o "[0-9A-F]\{8\}-[0-9A-F]\{4\}-[0-9A-F]\{4\}-[0-9A-F]\{4\}-[0-9A-F]\{12\}" \
| while read -r line ; do
echo "Reseting Simulator with UDID: $line"
xcrun simctl erase $line
done
Для предыдущих версий используйте:
#!/bin/sh
instruments -s devices \
| grep Simulator \
| grep -o "[0-9A-F]\{8\}-[0-9A-F]\{4\}-[0-9A-F]\{4\}-[0-9A-F]\{4\}-[0-9A-F]\{12\}" \
| while read -r line ; do
echo "Reseting Simulator with UDID: $line"
xcrun simctl erase $line
done
С помощью Xcode 6 вы можете использовать служебную программу командной строки simctl:
xcrun simctl erase <device UDID>
С помощью Xcode 7 вы можете стереть все сразу:
xcrun simctl erase all
Вдохновленный ответом Даниэля Вуда, я придумал этот.
Решает проблему, что делать с работающим симулятором. Наша среда CI оставляет симулятор запущенным после того, как тесты выполняются, и что становится все более испорченным с течением времени.
Обнаружение направляющих не так точно, но я думаю, что компромисс с читабельностью стоит.
#!/bin/bash
xcrun simctl list | grep Booted | grep -e "[0-9A-F\-]\{36\}" -o | xargs xcrun simctl shutdown
xcrun simctl erase all
Протестировано с помощью XCode 7.
С помощью последней версии инструментов командной строки Xcode вы можете вызвать xcrun simctl erase all
Обязательно покидайте сим каждый раз, когда вы вызываете эту функцию, или вы получите сообщение об ошибке An error was encountered processing the command (domain=com.apple.CoreSimulator.SimError, code=159):
Unable to erase contents and settings in current state: Booted
вы можете запустить эту команду
xcrun simctl erase all
С Xcode 10:
#!/usr/bin/env sh
xcrun simctl shutdown all
xcrun simctl erase all
Просто перейдите к ~/Library/Application Support/iPhone Simulator
и удалите все содержимое. Вышеуказанные методы не работают на iOS 7, поэтому это, похоже, сработало для меня.
Я написал script, который будет reset содержимым и настройками всех версий и устройств для iOS Simulator. Он захватывает имена устройств и номера версий из меню, поэтому он будет включать в себя любые новые устройства или версии iOS, которые Apple выпускает для симуляторов.
Легко запускается вручную или используется в build- script. Я бы предложил добавить его в качестве предварительного действия script перед сборкой.
Он в значительной степени основывался на Stian script выше, но не устарел от новых версий iOS и устраняет диалоговое окно (лучше для скриптов сборки автоматизации).
Вы можете вызвать эту команду:
rm -rf ~/Library/Application Support/iPhone Simulator
Есть инструмент xctool - https://github.com/facebook/xctool, который является заменой xcodebuild. Он позволяет создавать приложения из командной строки, а также запускать тесты для него. Помимо запуска тестов, он позволяет предоставлять такие аргументы, как -freshSimulator и -freshInstall, которые перезагружают контент для целевого симулятора перед выполнением тестов. Это упрощает перезагрузку симулятора, поскольку вы избегаете различной магии с помощью скриптов bash и т.д. Все инкапсулируется внутри инструмента.
xcrun simctl erase all
xcrun simctl delete unavailable
Чтобы установить пользовательский контент и настройки симулятора в состояние factory и удалить установленные приложения, выберите iPhone Simulator > Reset Содержание и настройки.