Nettoyer le simulateur iPhone

107

Existe-t-il un moyen simple de nettoyer le répertoire dans lequel xcode déploie une application lors de la construction pour le simulateur iPhone? J'ai une base de données sqlite qui est copiée dans le dossier Documents au démarrage si nécessaire. Le problème est que je pourrais changer mon schéma, mais la nouvelle base de données ne sera pas copiée, car il en existe déjà une.

Idéalement, chaque fois que je construis, cela nuirait au contenu précédent. Est-ce possible ou dois-je le faire manuellement?

Travis Jensen
la source
Le simulateur prend-il en charge AppleScript?
Rog
Oui. J'ai écrit un AppleScript pour parcourir tous les simulateurs iOS pour chaque appareil et version du système d'exploitation et réinitialiser leur contenu et leurs paramètres: github.com/michaelpatzer/ResetAllSimulators
mpatzer

Réponses:

91

Le simulateur installe les applications dans:

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

Vérifiez également:

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

Les fichiers et répertoires GUID correspondent aux applications installées du simulateur.

Supprimez manuellement tous ces fichiers / répertoires pour supprimer toutes les applications du simulateur.

Je sais qu'il existe un moyen d'ajouter des scripts au processus de construction dans XCode.

De plus, il semble que XCode modifie le GUID qu'il utilise à chaque build (le répertoire où se trouve mon application change entre les builds dans XCode), donc essayer de supprimer le même répertoire tout le temps ne fonctionnera pas. Si vous ne travaillez que sur une application à la fois, effacer tout le répertoire serait une option.

PyjamaSam
la source
2
Assurez-vous de consulter la réponse de @ idStar ci-dessous. Il a mis à jour des informations concernant Lion / Xcode4 et un joli petit script pour aider à automatiser les choses.
PyjamaSam le
Je testais l'ajout / la suppression d'abonnements au calendrier. Sur un appareil réel, vous pouvez supprimer un abonnement au calendrier dans Paramètres> Comptes mais ce menu n'existe pas sur iOS Simulator et je ne souhaitais pas réinitialiser tout le simulateur. J'ai donc fini par versionner localement mon dossier Device avec git et effectuer un git reset HEAD --hard && git clean -fpour supprimer un abonnement au calendrier après l'avoir ajouté.
Thibault D.
132

À partir de Apples Dev Resources:

Pour définir le contenu utilisateur et les paramètres du simulateur à leur état d'usine et supprimer les applications que vous avez installées, choisissez iPhone Simulator> Réinitialiser le contenu et les paramètres .

Cela ressemble à:

Réinitialiser iOS

j7nn7k
la source
3
Celui-ci ne semble pas nettoyer le SQLite
Asped
1
cela ne vide pas le cache du navigateur par exemple
Mau
1
Maintenant, ce paramètre est situé dansHardware > Reset Content and Settings
Haseeb Eqx
22

La façon dont je fais cela consiste simplement à cliquer et à maintenir l'icône de mon application dans le simulateur - puis quand elle commence à trembler, cliquez sur le noir et blanc (x). Un message apparaîtra vous demandant si vous voulez vraiment supprimer et vous cliquez simplement sur Oui. La prochaine fois que vous construirez et déploierez votre application, elle utilisera la nouvelle base de données sqlite sans accroc et vous n'aurez pas à vous déplacer dans le système de fichiers.

John
la source
Cela ne semble pas fonctionner - cela ne supprime pas VRAIMENT les données du simulateur?
Adam
1
Mon erreur - cela fonctionne très bien (confirmé en lisant le répertoire dans la réponse acceptée. Je viens d'oublier la conception non conviviale d'Apple de NSUserDefaults (les valeurs non définies ne sont pas signalées de manière raisonnable)
Adam
@quadelirus, je pense que votre réponse est la plus appropriée dans cette situation.
datnt du
C'est exactement ce que j'ai fait, mais je ne sais pas comment fermer l'application qui s'est déjà ouverte dans le simulateur. Jusqu'à ce que je ferme l'application, je ne pourrais pas contrôler le simulateur.
Wanna Coffee
1
@WannaCoffee Voir stackoverflow.com/questions/18519799/…
John
12

Après iOS 5 sur Mac OS X Lion, vous pouvez essayer:

  1. Créez un script appelé RemoveSimulatorApps.commandqui contient:
    rm -rf "$ HOME / Bibliothèque / Application Support / iPhone Simulator / 5.0 / Applications / *"
    
  2. Enregistrez ce script dans un répertoire de votre PATH.
  3. Rendez le fichier exécutable, par exemple:
    chmod + x RemoveSimulatorApps.command

Hypothèses

  • Vous voudrez peut-être l'invoquer à partir des boutons favoris d'un clavier, comme sur un clavier Logitech ou Microsoft avec des touches programmables (par conséquent, en l'enregistrant en tant que fichier .command au lieu de dire, .sh)
  • Vous êtes d'accord pour tout épater dans le simulateur iOS (idéal si vous ne travaillez activement que sur une application)
  • Toutes les notes des autres s'appliquent au fait d'être une bonne application évolutive, etc. (Personnellement, j'ai trouvé cela utile, car j'ai des commutateurs de mode de développement qui rechargent une base de données dans un état spécifique sur lequel j'essayais de faire une gestion cohérente de la robustesse / des erreurs)
idStar
la source
1
Celui-ci fonctionne parfaitement, n'oubliez pas d'ajouter votre bonne version d'IOS dans le chemin :)
Asped
1
Serait-il judicieux d'ajouter ~ au lieu d'un chemin absolu?
Nikita Leonov
8

c'est peut-être exagéré mais ..

vous pouvez également utiliser le menu et 'Réinitialiser le contenu et les paramètres ...'

Lacet
la source
7

Ce que vous essayez vraiment de faire est de vider votre base de données, si vous avez changé le schéma. Une façon de faire cela, et cela vous rendrait plus heureux à long terme lorsque vous commencerez à expédier la version 2.0, 3.0, etc. de votre application, est de vérifier la version de votre table sqlite, et si elle a changé, puis supprimez le ancien fichier et utilisez celui de votre bundle.

Trouver un moyen de nettoyer le simulateur ne résoudra pas le problème réel du nettoyage de l'iPhone d'un client lorsque vous expédiez une nouvelle version avec un nouveau schéma.

Pour des points supplémentaires, après avoir déterminé que vous avez rencontré un ancien schéma, vous voudrez peut-être copier la nouvelle base de données sans détruire l'ancienne, et charger toutes les données intéressantes de l'ancienne base de données dans la nouvelle. Puis soufflez l'ancienne base de données. De cette façon, vous pouvez conserver les ajouts de vos utilisateurs à la base de données.

Mahboudz
la source
En général, je suis d'accord avec vous lorsque vous parlez de mises à niveau de version, mais au milieu du développement d'une version particulière, cela représente beaucoup plus de frais généraux que nécessaire. Le schéma de base de données peut changer sur une base par construction, et avoir besoin d'écrire du code de conversion pour chaque construction est tout simplement faux.
Travis Jensen
7

pour 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
la source
6

Si vous utilisez Xcode 9 -> Barre de menus -> Matériel -> Effacer tout le contenu et les paramètres

Xcode -> Matériel -> Effacer tout le contenu et les paramètres

Harald
la source
5

À partir de Xcode 6, vous pouvez le faire à partir de la ligne de commande avec: xcrun simctl erase

En outre, l'application iOS Simulator (à la fois la version Xcode 6 et les versions antérieures) dispose d'un élément de menu appelé "Réinitialiser le contenu et les paramètres" qui peut être utilisé pour effacer l'appareil actuellement démarré.

Jeremy Huddleston Séquoia
la source
mais il peut être exécuté sur chaque build automatiquement? par exemple pour des tests?
Daniel Gomez Rico
En supposant que vous effectuez vos tests à l'aide d'un script, vous pouvez certainement simplement ajouter 'xcrun simctl erase <UDID>' à ce script le cas échéant ...
Jeremy Huddleston Sequoia
Oui, c'est exactement ce que j'ai dit.
Jeremy Huddleston Sequoia
5

Cela fonctionne avec 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 {}

Pour .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
la source
3

À partir de Xcode 6:

xcrun simctl erase <sim udid> <- réinitialise le simulateur.

TinyTimZamboni
la source
1

Effacer le cache Xcode;

Commande + Option + Maj + K

Commande + Maj + K

(Utilisez les deux car ils ont des fonctionnalités différentes)

Effacer le contenu des données dérivées;

Barre de menus -> Fenêtre -> Organiseur -> Projets -> Sélectionnez votre projet

Le volet droit affiche le nom du dossier et le bouton de suppression sur le côté droit vous permet de supprimer tout le contenu des données dérivées.

Effacer le cache du simulateur;

Barre de menus -> Simulateur iOS -> Réinitialiser le contenu et les paramètres

Huseyin
la source
1

Comme je l'expliquais dans un commentaire sous la réponse validée :

Je testais l'ajout et la suppression d'abonnements au calendrier. Sur un appareil réel, vous pouvez supprimer un abonnement au calendrier dans Paramètres , Comptes mais ce menu n'existe pas dans iOS Simulator et je ne voulais pas réinitialiser tout le simulateur.

J'ai donc fini par versionner localement mon dossier Device avec git et exécuter les commandes suivantes pour supprimer un abonnement au calendrier après l'avoir ajouté:

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

Les étapes sont donc:

  1. Installez votre application sur le simulateur iOS et faites ce que vous avez à faire
  2. Identifiez votre appareil ~/Library/Developer/CoreSimulator/Devices/et effectuez une opération cddessus, puis git initcréez un référentiel git
  3. Une fois que vous souhaitez enregistrer l'état, effectuez git commit -a "Message"
  4. Faites ce qui modifie les paramètres (ex: ajouter un abonnement au calendrier) et effectuez vos tests
  5. Arrêtez le simulateur
  6. Faire git reset --hard HEAD
  7. Démarrez le simulateur, toutes les modifications effectuées après git commitont disparu.
Thibault D.
la source
1

Dans XCode, accédez à l'option de menu Fenêtre, sélectionnez Périphériques, puis vous pouvez simplement supprimer ceux dont vous n'avez plus besoin.

Simon
la source
0

Pour Xcode <= 5

J'ai ajouté ce qui suit à mon ~/.bash_profile

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

Il détruit simplement toutes les applications de la carte SIM.

wfbarksdale
la source
1
Ceci n'est plus applicable avec Xcode 6 et supérieur.
Jeremy Huddleston Sequoia