Czyszczenie symulatora iPhone'a

107

Czy istnieje prosty sposób na wyczyszczenie katalogu, w którym xcode wdraża aplikację podczas tworzenia symulatora iPhone'a? Mam bazę danych sqlite, która w razie potrzeby jest kopiowana do folderu Dokumenty podczas uruchamiania. Problem polega na tym, że mogę zmienić schemat, ale nowa baza danych nie zostanie skopiowana, ponieważ taka już istnieje.

Idealnie byłoby, gdyby za każdym razem, gdy budowałem, niszczyłoby to poprzednią zawartość. Czy to możliwe, czy muszę to zrobić ręcznie?

Travis Jensen
źródło
Czy symulator obsługuje AppleScript?
Rog,
Tak. Napisałem AppleScript, aby przejść przez wszystkie symulatory iOS dla każdego urządzenia i wersji systemu operacyjnego oraz zresetować ich zawartość i ustawienia: github.com/michaelpatzer/ResetAllSimulators
mpatzer

Odpowiedzi:

91

Symulator instaluje aplikacje w:

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

Sprawdź również:

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

Pliki i katalogi GUID pasują do zainstalowanych aplikacji symulatora.

Ręcznie usuń wszystkie te pliki / katalogi, aby usunąć wszystkie aplikacje z symulatora.

Wiem, że istnieje sposób na dodanie skryptów do procesu kompilacji w XCode.

Wygląda również na to, że XCode zmienia identyfikator GUID, którego używa przy każdej kompilacji (katalog, w którym moja aplikacja przechowuje zmiany między kompilacjami w XCode), więc próba usunięcia tego samego katalogu przez cały czas nie zadziała. Jeśli pracujesz tylko nad jedną aplikacją naraz, opcją byłoby wyczyszczenie całego katalogu.

PyjamaSam
źródło
2
Koniecznie sprawdź poniżej odpowiedź @ idStar. Zaktualizował informacje dotyczące Lion / Xcode4 i ładny mały skrypt, który pomaga zautomatyzować.
PyjamaSam
Testowałem dodawanie / usuwanie subskrypcji kalendarza. Na prawdziwym urządzeniu możesz usunąć subskrypcję kalendarza w Ustawienia> Konta, ale to menu nie istnieje w Symulatorze iOS i nie chciałem resetować całego symulatora. Skończyło się więc na tym, że lokalnie wersjonowałem mój folder urządzenia za pomocą git i wykonałem polecenie, git reset HEAD --hard && git clean -faby usunąć subskrypcję kalendarza po dodaniu go.
Thibault D.
132

Z zasobów deweloperskich firmy Apple:

Aby przywrócić zawartość użytkownika i ustawienia symulatora do stanu fabrycznego oraz usunąć zainstalowane aplikacje, wybierz opcję Symulator iPhone'a> Resetuj zawartość i ustawienia .

To przypomina:

Reset iOS

j7nn7k
źródło
3
Ten wydaje się nie czyścić SQLite
Asped
1
to nie czyści pamięci podręcznej przeglądarki na przykład
Mau
1
Teraz to ustawienie znajduje się wHardware > Reset Content and Settings
Haseeb Eqx
22

Sposób, w jaki to robię, to po prostu kliknięcie i przytrzymanie ikony mojej aplikacji w symulatorze - a gdy zacznie się poruszać, kliknij czarno-biały (x). Pojawi się komunikat z pytaniem, czy naprawdę chcesz usunąć i po prostu kliknij Tak. Następnym razem, gdy będziesz budować i wdrażać swoją aplikację, użyje ona nowej bazy danych sqlite bez żadnych problemów i nie musisz grzebać w systemie plików.

Jan
źródło
Wydaje się, że to nie działa - NAPRAWDĘ nie usuwa danych z symulatora?
Adam
1
Mój błąd - to działa dobrze (potwierdzone przez przeczytanie katalogu w zaakceptowanej odpowiedzi. Właśnie zapomniałem o nieprzyjaznym dla użytkownika projekcie Apple NSUserDefaults (nieustawione wartości nie są zgłaszane w żaden rozsądny sposób)
Adam
@quadelirus, myślę, że twoja odpowiedź jest najbardziej odpowiednia w tej sytuacji.
data
Dokładnie to zrobiłem, ale nie jestem pewien, jak zamknąć aplikację, która została już otwarta w symulatorze. Dopóki nie zamknę aplikacji, nie mogę uzyskać kontroli na symulatorze.
Wanna Coffee
1
@WannaCoffee Zobacz stackoverflow.com/questions/18519799/…
John
12

Po iOS 5 na Mac OS X Lion możesz spróbować:

  1. Utwórz skrypt o nazwie, RemoveSimulatorApps.commandktóry zawiera:
    rm -rf "$ HOME / Library / Application Support / iPhone Simulator / 5.0 / Applications / *"
    
  2. Zapisz ten skrypt w katalogu w swoim PATH.
  3. Spraw, aby plik był wykonywalny, na przykład:
    chmod + x RemoveSimulatorApps.command

Założenia

  • Możesz wywołać to z przycisków ulubionych na klawiaturze, takich jak na klawiaturze Logitech lub Microsoft z programowalnymi klawiszami (stąd zapisywanie go jako plik .command zamiast powiedzieć .sh)
  • Nie przeszkadza Ci zdmuchnięcie wszystkiego w symulatorze iOS (idealne, jeśli aktywnie pracujesz nad jedną aplikacją)
  • Wszystkie uwagi od innych dotyczą bycia dobrą aplikacją, którą można aktualizować itp. (Osobiście uważam, że jest to przydatne, ale b / c Mam przełączniki trybu programistycznego, które przeładowują bazę danych w określonym stanie, w którym próbowałem wykonać pewną spójną niezawodność / obsługę błędów)
idStar
źródło
1
Ten działa idealnie, pamiętaj tylko, aby dodać właściwą wersję IOS do ścieżki :)
Asped
1
Czy miałoby sens dodanie ~ zamiast ścieżki bezwzględnej?
Nikita Leonov
8

może to być przesada, ale ...

możesz także skorzystać z menu i opcji „Resetuj zawartość i ustawienia ...”

Sznurowadło
źródło
7

To, co naprawdę próbujesz zrobić, to wyczyścić bazę danych, jeśli zmieniłeś schemat. Jednym ze sposobów, aby to zrobić, i uczyniłoby cię szczęśliwszym na dłuższą metę, gdy zaczniesz sprzedawać wersję 2.0, 3.0 itd. Swojej aplikacji, jest sprawdzenie wersji tabeli sqlite, a jeśli się zmieniła, odrzuć stary plik i użyj tego z pakietu.

Znalezienie sposobu na wyczyszczenie symulatora nie rozwiąże rzeczywistego problemu, jak wyczyścić iPhone'a klienta, gdy wysyłasz nową wersję z nowym schematem.

Aby uzyskać dodatkowe punkty, po ustaleniu, że napotkałeś stary schemat, możesz skopiować nową bazę danych bez niszczenia starej i załadować wszelkie interesujące dane ze starej bazy danych do nowej. Następnie usuń starą bazę danych. W ten sposób możesz zachować dodatki użytkownika do bazy danych.

mahboudz
źródło
Generalnie zgadzam się z tobą, kiedy mówisz o uaktualnieniach wydania, ale w trakcie opracowywania jakiejkolwiek konkretnej wersji jest to o wiele większe obciążenie, niż jest to konieczne. Schemat bazy danych może się zmieniać w zależności od kompilacji, a konieczność pisania kodu konwersji dla każdej kompilacji jest po prostu błędna.
Travis Jensen
7

dla 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
jia tian
źródło
6

Jeśli używasz Xcode 9 -> Pasek menu -> Sprzęt -> Usuń całą zawartość i ustawienia

Xcode -> Sprzęt -> Wymaż całą zawartość i ustawienia

Harald
źródło
5

Począwszy od Xcode 6, możesz to zrobić z wiersza poleceń za pomocą: xcrun simctl erase

Ponadto aplikacja iOS Simulator (zarówno wersja Xcode 6, jak i starsze wersje) zawiera element menu o nazwie „Resetuj zawartość i ustawienia”, za pomocą którego można wymazać aktualnie uruchomione urządzenie.

Jeremy Huddleston Sequoia
źródło
ale może być wykonywany automatycznie na każdej kompilacji? na przykład do testów?
Daniel Gomez Rico
Zakładając, że wykonujesz testy za pomocą skryptu, z pewnością możesz po prostu dodać „xcrun simctl erase <UDID>” do tego skryptu tam, gdzie jest to konieczne ...
Jeremy Huddleston Sequoia,
Tak, dokładnie to powiedziałem.
Jeremy Huddleston Sequoia
5

Działa to z 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 {}

W przypadku .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 {}"
Thomas T.
źródło
3

Od Xcode 6:

xcrun simctl erase <sim udid> <- resetuje symulator.

TinyTimZamboni
źródło
1

Wyczyść pamięć podręczną Xcode;

Command + Option + Shift + K.

Command + Shift + K.

(Użyj obu z nich, ponieważ mają różne funkcje)

Zawartość Clear Derived Data;

Pasek menu -> Okno -> Organizator -> Projekty -> Wybierz swój projekt

Prawy panel pokazuje nazwę folderu, a także przycisk usuwania po prawej stronie umożliwia usunięcie całej zawartości danych pochodnych.

Wyczyść pamięć podręczną symulatora;

Pasek menu -> Symulator iOS -> Zresetuj zawartość i ustawienia

Huseyin
źródło
1

Jak wyjaśniłem w komentarzu pod zweryfikowaną odpowiedzią :

Testowałem dodawanie i usuwanie subskrypcji kalendarza. Na prawdziwym urządzeniu możesz usunąć subskrypcję kalendarza w Ustawieniach , Konta, ale to menu nie istnieje w Symulatorze iOS i nie chciałem resetować całego symulatora.

Skończyło się na tym, że lokalnie wersjonowałem mój folder urządzenia za pomocą git i wykonałem następujące polecenia, aby usunąć subskrypcję kalendarza po jej dodaniu:

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

Oto kroki:

  1. Zainstaluj aplikację na symulatorze iOS i rób to, co musisz
  2. Zidentyfikuj swoje urządzenie w programie ~/Library/Developer/CoreSimulator/Devices/i zrób cdto, a następnie git initutwórz repozytorium git
  3. Gdy chcesz zapisać stan, wykonaj git commit -a "Message"
  4. Zrób wszystko, co spowoduje zmianę ustawień (np. Dodanie subskrypcji kalendarza) i przeprowadź testy
  5. Wyłącz symulator
  6. Robić git reset --hard HEAD
  7. Uruchom symulator, wszystkie zmiany wprowadzone później git commitznikną.
Thibault D.
źródło
1

W XCode przejdź do opcji menu Okno, wybierz Urządzenia, a następnie możesz po prostu usunąć te, których już nie potrzebujesz.

Szymon
źródło
0

Dla Xcode <= 5

Dodałem do mojego ~/.bash_profile

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

Po prostu niszczy wszystkie aplikacje na karcie SIM.

wfbarksdale
źródło
1
Nie dotyczy to już Xcode 6 i nowszych.
Jeremy Huddleston Sequoia