Ripulire il simulatore di iPhone


107

Esiste un modo semplice per ripulire la directory in cui xcode distribuisce un'app durante la creazione per il simulatore iPhone? Ho un database sqlite che viene copiato nella cartella Documenti all'avvio, se necessario. Il problema è che potrei cambiare il mio schema, ma il nuovo database non verrà copiato, perché ne esiste già uno.

Idealmente, ogni volta che costruisco, bombarderebbe i contenuti precedenti. È possibile o devo farlo manualmente?


Il simulatore supporta AppleScript?
Rog

Sì lo fa. Ho scritto un AppleScript per scorrere tutti i simulatori iOS per ogni dispositivo e versione del sistema operativo e ripristinarne i contenuti e le impostazioni: github.com/michaelpatzer/ResetAllSimulators
mpatzer

Risposte:


91

Il simulatore installa app in:

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

Controlla anche:

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

I file e le directory GUID corrispondono alle app installate del simulatore.

Elimina manualmente tutti quei file / directory per rimuovere tutte le applicazioni dal simulatore.

So che esiste un modo per aggiungere script al processo di compilazione in XCode.

Inoltre sembra che XCode cambi il GUID che utilizza ogni build (la directory in cui si trova la mia app cambia tra le build in XCode), quindi provare a eliminare la stessa directory tutto il tempo non funzionerà. Se stai lavorando solo su un'app alla volta, la cancellazione dell'intera directory sarebbe un'opzione.


2
Assicurati di controllare la risposta di @ idStar in basso. Ha informazioni aggiornate su Lion / Xcode4 e un piccolo script per aiutare ad automatizzare le cose.
PyjamaSam

Stavo provando ad aggiungere / rimuovere iscrizioni al calendario. Su un dispositivo reale, puoi rimuovere un abbonamento al calendario in Impostazioni> Account ma questo menu non esiste su iOS Simulator e non volevo ripristinare l'intero simulatore. Quindi ho finito per creare una versione locale della mia cartella Dispositivo con git ed eseguire un git reset HEAD --hard && git clean -fper rimuovere un abbonamento al calendario dopo averlo aggiunto.
Thibault D.

132

Dalle risorse di sviluppo di Apple:

Per riportare il contenuto utente e le impostazioni del simulatore allo stato di fabbrica e rimuovere le applicazioni installate, scegli iPhone Simulator> Ripristina contenuto e impostazioni .

Questo assomiglia a:

Ripristino iOS


3
Questo non sembra pulire SQLite
Asped

1
questo non cancella la cache del browser, ad esempio
Mau

1
Ora questa impostazione si trova inHardware > Reset Content and Settings
Haseeb Eqx

22

Il modo in cui lo faccio è semplicemente fare clic e tenere premuta l'icona della mia app nel simulatore, quindi quando inizia a dimenarsi, fai clic sul bianco e nero (x). Apparirà un messaggio che ti chiederà se vuoi davvero eliminare e fai semplicemente clic su Sì. La prossima volta che creerai e distribuirai la tua app, utilizzerà il nuovo db sqlite senza intoppi e non dovrai andare in giro nel filesystem.


Questo non sembra funzionare - non cancella REALMENTE i dati dal simulatore?
Adam

1
Errore mio: funziona bene (confermato dalla lettura della directory nella risposta accettata. Avevo appena dimenticato il design non user-friendly di Apple di NSUserDefaults (i valori non impostati non sono riportati in alcun modo sensato)
Adam

@quadelirus, penso che la tua risposta sia la più appropriata in questa situazione.
datnt

Questo è esattamente quello che ho fatto, ma non sono sicuro di come chiudere l'app che è già aperta nel simulatore. Fino a quando non chiudo l'app, non riesco a ottenere il controllo sul simulatore.
Wanna Coffee


12

Dopo iOS 5 su Mac OS X Lion, puoi provare:

  1. Crea uno script chiamato RemoveSimulatorApps.commandche contenga:
    rm -rf "$ HOME / Libreria / Supporto applicazioni / Simulatore iPhone / 5.0 / Applicazioni / *"
    
  2. Salva questo script in una directory nel tuo file PATH.
  3. Rendi il file eseguibile, ad esempio:
    chmod + x RemoveSimulatorApps.command

ipotesi

  • Potresti voler richiamare questo da una tastiera pulsanti preferiti, come su una tastiera Logitech o Microsoft con tasti programmabili (quindi, salvarlo come file .command invece di dire, .sh)
  • Stai bene spazzando via tutto nel simulatore iOS (ideale se stai solo lavorando attivamente su un'app)
  • Tutte le note di altri si applicano sull'essere una buona app aggiornabile, ecc. (Personalmente l'ho trovato utile, tuttavia ho interruttori della modalità di sviluppo che ricaricano un database in uno stato specifico su cui stavo cercando di fare una certa robustezza / gestione degli errori coerente)

1
Questo funziona perfettamente, ricorda solo di aggiungere la tua versione IOS corretta nel percorso :)
Asped

1
Avrebbe senso aggiungere ~ invece di percorso assoluto?
Nikita Leonov

8

potrebbe essere eccessivo ma ...

puoi anche utilizzare il menu e "Ripristina contenuto e impostazioni ..."


7

Quello che stai veramente cercando di fare è cancellare il tuo database, se hai cambiato lo schema. Un modo per farlo, e ti renderebbe più felice a lungo termine quando inizi a distribuire la versione 2.0, 3.0, ecc. Della tua app, è controllare la versione della tua tabella sqlite e, se è cambiata, quindi eliminare il vecchio file e usa quello nel tuo bundle.

Trovare un modo per ripulire il simulatore non aiuterà il problema del mondo reale di come ripulire l'iPhone di un cliente quando spedisci una nuova versione con un nuovo schema.

Per punti extra, dopo aver determinato di aver incontrato un vecchio schema, potresti voler copiare il nuovo database senza distruggere quello vecchio e caricare tutti i dati interessanti dal vecchio database in quello nuovo. Quindi spazzare via il vecchio database. In questo modo puoi preservare le aggiunte dei tuoi utenti al database.


In generale, sono d'accordo con te quando parli di aggiornamenti di rilascio, ma nel bel mezzo dello sviluppo di una particolare versione, questo è molto più sovraccarico del necessario. Lo schema del database può cambiare in base alla build e la necessità di scrivere codice di conversione per ogni build è semplicemente sbagliato.
Travis Jensen

7

per 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

Se stai usando Xcode 9 -> Menubar -> Hardware -> Cancella tutto il contenuto e le impostazioni

Xcode -> Hardware -> Cancella tutto il contenuto e le impostazioni


5

A partire da Xcode 6, puoi farlo dalla riga di comando con: xcrun simctl erase

Inoltre, l'app iOS Simulator (sia la versione Xcode 6 che le versioni precedenti) ha una voce di menu chiamata "Ripristina contenuto e impostazioni" che può essere utilizzata per cancellare il dispositivo attualmente avviato.


ma può essere eseguito automaticamente su ogni build? ad esempio per i test?
Daniel Gomez Rico

Supponendo che tu stia facendo i tuoi test usando uno script, potresti certamente aggiungere 'xcrun simctl erase <UDID>' a quello script, se appropriato ...
Jeremy Huddleston Sequoia

Sì, è esattamente quello che ho detto.
Jeremy Huddleston Sequoia

5

Funziona con 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 {}

Per .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

A partire da Xcode 6:

xcrun simctl erase <sim udid> <- ripristina il simulatore.


1

Cancella Xcode Cache;

Comando + Opzione + Maiusc + K

Command + Shift + K

(Utilizzali entrambi perché hanno funzionalità diverse)

Cancella contenuto dati derivati;

Barra dei menu -> Finestra -> Organizer -> Progetti -> Seleziona il tuo progetto

Il riquadro destro mostra il nome della cartella e anche il pulsante Elimina sul lato destro consente di eliminare tutti i contenuti dei dati derivati.

Cancella cache del simulatore;

Barra dei menu -> Simulatore iOS -> Ripristina contenuto e impostazioni


1

Come stavo spiegando in un commento sotto la risposta convalidata :

Stavo provando ad aggiungere e rimuovere le iscrizioni al calendario. Su un dispositivo reale, puoi rimuovere un abbonamento al calendario in Impostazioni , Account ma questo menu non esiste in iOS Simulator e non volevo ripristinare l'intero simulatore.

Quindi ho finito per controllare la versione locale della mia cartella Dispositivo con git ed eseguire i seguenti comandi per rimuovere un abbonamento al calendario dopo averlo aggiunto:

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

Quindi i passaggi sono:

  1. Installa la tua applicazione sul simulatore iOS e fai quello che devi fare
  2. Identifica il tuo dispositivo ~/Library/Developer/CoreSimulator/Devices/e fallo cd, quindi git initcrea un repository git
  3. Una volta che vuoi salvare lo stato, esegui git commit -a "Message"
  4. Fai qualsiasi cosa modifichi le impostazioni (es: aggiunta di un abbonamento al calendario) ed esegui i tuoi test
  5. Spegni il simulatore
  6. Fare git reset --hard HEAD
  7. Avvia il simulatore, tutte le modifiche apportate dopo git commitsono sparite.

1

In XCode, vai all'opzione del menu Finestra, seleziona Dispositivi e quindi puoi semplicemente eliminare quelli che non ti servono più.


0

Per Xcode <= 5

Ho aggiunto quanto segue al mio ~/.bash_profile

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

Distrugge solo tutte le app sulla sim.


1
Questo non è più applicabile con Xcode 6 e versioni successive.
Jeremy Huddleston Sequoia
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.