Comment puis-je réinitialiser le simulateur iOS à partir de la ligne de commande?

j'ai besoin de réinitialiser le simulateur iPhone beaucoup, et n'ai pas trouvé un moyen de le faire sans utiliser la souris. C'est une petite chose, mais je suis vraiment malade de le faire et j'aimerais avoir un moyen de le faire en utilisant un raccourci clavier.

encore mieux serait un moyen de le réinitialiser à partir de la ligne de commande, pour que je puisse construire une réinitialisation dans un script de déploiement.

je ne suis pas très familier avec iOS ou MacOS.

50
demandé sur ROMANIA_engineer 2011-02-26 08:23:15

17 réponses

simple:

xcrun simctl erase all

amélioration suggérée par @txulu, il suffit de tuer le simulateur avant d'exécuter le nettoyage:

killall "Simulator" 2> /dev/null; xcrun simctl erase all
59
répondu Kappe 2016-09-09 10:28:52

dans le Xcode 6, Ne supprimez pas seulement le dossier du simulateur! Ça va tout foutre en l'air, et ça va te causer des maux de tête.

dans Xcode 6, Il y a en fait un outil pour contrôler le simulateur depuis la ligne de commande.

assurez-vous que vos paramètres de ligne de commande sont définis à Xcode 6

xcrun simctl

dans le Xcode 6, chaque périphérique a un GUID/UUID associé à lui, pour réinitialiser un périphérique spécifique, vous avez besoin du GUID pour cela.

la commande

xcrun simctl list

vous montrera tous les appareils que vous avez installés. La sortie ressemblera à ceci:

== Devices ==
-- iOS 7.0 --
iPhone 4s (F77DC0AE-6A6D-4D99-9936-F9DB07BBAA82) (Shutdown)
iPhone 5 (5B78FC0D-0034-4134-8B1F-19FD0EC9D581) (Shutdown)
iPhone 5s (569E5910-E32D-40E2-811F-D2E8F04EA4EF) (Shutdown)
iPad 2 (451DBBD8-A387-4E77-89BF-2B3CD45B4772) (Shutdown)
iPad Retina (2C58366B-5B60-4687-8031-6C67383D793F) (Shutdown)
iPad Air (50E03D3B-3456-4C49-85AD-60B3AFE4918B) (Shutdown)
-- iOS 7.1 --
-- iOS 8.0 --
iPhone 4s (27818821-A0BB-496E-A956-EF876FB514C2) (Shutdown)
iPhone 5 (6FBAA7E2-857C-432A-BD03-980D762DA9D2) (Shutdown)
iPhone 5s (7675C82B-DE49-45EB-A28D-1175376AEEE9) (Shutdown)
iPad 2 (836E7C89-B9D6-4CC5-86DE-B18BA8600E7B) (Shutdown)
iPad Retina (EFDD043D-2725-47DC-A3FF-C984F839A631) (Shutdown)
iPad Air (9079AD6C-E74D-4D5F-9A0F-4933498B852E) (Shutdown)
Resizable iPhone (943CFEDE-A03C-4298-93E3-40D0713652CB) (Shutdown)
Resizable iPad (DBA71CA5-6426-484B-8E9B-13FCB3B27DEB) (Shutdown)

copiez simplement le GUID de l'intérieur des parenthèses, et lancez xcrun simctl erase

par exemple,

xcrun simctl erase 5B78FC0D-0034-4134-8B1F-19FD0EC9D581

effacerait l'appareil iOS 7.0, iPhone 5

55
répondu Alpine 2014-09-11 00:20:51

a pensé que je posterais ceci pour tous ceux qui rencontrent le même besoin. Quelqu'un sur reddit m'a donné cette solution (que j'AI testée et qui fonctionne très bien). Notez que cette fois vous avez besoin d'une ellipse après "Paramètres", pas trois périodes (bizarre).

Ceci est un AppleScript qui peut être invoqué à partir de la ligne de commande pour réinitialiser le simulateur:

tell application "iPhone Simulator"
    activate
end tell

tell application "System Events"
    tell process "iPhone Simulator"
        tell menu bar 1
            tell menu bar item "iOs Simulator"
                tell menu "iOs Simulator"
                    click menu item "Reset Content and Settings…"
                end tell
            end tell
        end tell
        tell window 1
            click button "Reset"
        end tell
    end tell
end tell

Enregistrer sous /path/to/script et d'appeler:

osascript /path/to/script
36
répondu Cameron Brown 2011-07-06 18:25:35

copier-coller réponse-note: va réinitialiser le contenu et les paramètres de tous les simulateurs disponibles.

Merci @Alpine pour l'inspiration et la connaissance. Si vous lancez ceci dans votre ligne de commande, vous devriez être en mesure de réinitialiser tous les Sim disponibles. Cela fonctionne avec Xcode 6.

# Get the sim list with the UUIDs
OUTPUT="$(xcrun simctl list)"
# Parse out the UUIDs and saves them to file
echo $OUTPUT | awk -F "[()]" '{ for (i=2; i<NF; i+=2) print $i }' | grep '^[-A-Z0-9]*$' > output.txt
# Iterate through file and reset sim
for UUID in `awk '{ print  }' output.txt`
do
xcrun simctl erase $UUID
done
16
répondu Joe Susnick 2016-04-21 19:10:51

supprimer le contenu de

~/Library/Application Support/iPhone Simulator/<sdk revision>

et vous pouvez y aller.

11
répondu jdc 2011-09-23 19:35:09

la solution de raccourci clavier n'est plus pertinente et malheureusement la solution @Cameron n'a pas fonctionné pour moi non plus (j'ai essayé de la déboguer sans succès)

voici ce qui marche pour moi:

#!/bin/bash

# `menu_click`, by Jacob Rus, September 2006
# 
# Accepts a list of form: `{"Finder", "View", "Arrange By", "Date"}`
# Execute the specified menu item.  In this case, assuming the Finder 
# is the active application, arranging the frontmost folder by date.

osascript <<SCRIPT

on menu_click(mList)
    local appName, topMenu, r

    -- Validate our input
    if mList's length < 3 then error "Menu list is not long enough"

    -- Set these variables for clarity and brevity later on
    set {appName, topMenu} to (items 1 through 2 of mList)
    set r to (items 3 through (mList's length) of mList)

    -- This overly-long line calls the menu_recurse function with
    -- two arguments: r, and a reference to the top-level menu
    tell application "System Events" to my menu_click_recurse(r, ((process appName)'s ¬
        (menu bar 1)'s (menu bar item topMenu)'s (menu topMenu)))
end menu_click

on menu_click_recurse(mList, parentObject)
    local f, r

    -- `f` = first item, `r` = rest of items
    set f to item 1 of mList
    if mList's length > 1 then set r to (items 2 through (mList's length) of mList)

    -- either actually click the menu item, or recurse again
    tell application "System Events"
        if mList's length is 1 then
            click parentObject's menu item f
        else
            my menu_click_recurse(r, (parentObject's (menu item f)'s (menu f)))
        end if
    end tell
end menu_click_recurse

application "iPhone Simulator" activate    
menu_click({"iPhone Simulator", "iOS Simulator", "Reset Content and Settings…"})

tell application "System Events"
    tell process "iPhone Simulator"
        tell window 1
            click button "Reset"
        end tell
    end tell
end tell

SCRIPT
4
répondu Oded Regev 2013-02-11 11:53:30

lors de l'installation de Xcode, je crée toujours un raccourci clavier pour "réinitialiser le contenu et les paramètres" dans le simulateur. Un gain de temps extrêmement utile.

System Preferences > Keyboard > Shortcuts > App Shortcuts > "+"

dans le sélecteur D'Application, sélectionnez "Autre"..."pour ouvrir le dialogue application picker.

dans ce dialogue, vous ne pouvez pas" afficher le contenu du paquet " pour explorer A.app, vous aurez donc besoin d'utiliser Go to Folder via Cmd - Shift - G . (Ouvrez d'abord le menu déroulant de la demande et sélectionnez Other )

dans la version actuelle de Xcode, allez sur le chemin:

/Applications/Xcode/Contents/Developer/Applications

sélectionner Simulator.app et appuyer sur "Ajouter "

pour Menu Title , inscrivez Reset Content and Settings...

pour Keyboard Shortcut , appuyer sur CMD - Shift - R

Reset Content and Settings

4
répondu pkamb 2016-08-12 18:19:47

j'ai vérifié avec XCode 9. Pour fermer tous les simulateurs actifs exécuter:

xcrun simctl shutdown all

pour réinitialiser tous les simulateurs:

xcrun simctl erase all

vous pouvez filtrer ce que le simulateur de fermer / réinitialiser comme ceci:

xcrun simctl shutdown F36B238F-3ED6-4E10-BB5A-0726151916FA
xcrun simctl erase F36B238F-3ED6-4E10-BB5A-0726151916FA

Retrouvez tous les simulateurs accessibles (et leur interface) sur votre machine comme ceci:

xcrun instruments -s

pour faire fonctionner n'importe quel simulateur par guidage:

xcrun instruments -w F36B238F-3ED6-4E10-BB5A-0726151916FA -t Blank

pour installer app à la simulateur de démarrage:

xcrun simctl install booted /path/to/your.app

pour retirer app du simulateur démarré:

xcrun simctl uninstall booted /path/to/your.app

pour lancer l'application dans le simulateur démarré:

xcrun simctl launch booted "com.app.bundleIdentifier"

" com.App.bundleIdentifier" est votre CFBundleIdentifier en Info.plist

4
répondu LGFox 2018-04-28 12:49:00

j'ai écrit un script qui va réinitialiser le contenu et les paramètres de toutes les versions et les appareils pour le simulateur iOS. Il saisit les noms de périphériques et les numéros de version à partir du menu, de sorte qu'il comprendra tous les nouveaux périphériques ou les versions iOS pour lesquels Apple publie des simulateurs.

c'est facile à exécuter manuellement ou à utiliser dans un script de construction. Je suggère de l'ajouter en tant que Script de pré-action avant la compilation.

il est fortement basé sur le script de Stian ci-dessus, mais ne devient pas périmé avec les nouvelles versions iOS, et élimine la boîte de dialogue (mieux pour l'automatisation construire des scripts et travailler à partir de la ligne de commande).

https://github.com/michaelpatzer/ResetAllSimulators

1
répondu Monkey Mike 2013-10-18 17:17:12

j'ai trouvé cet outil très utile appelé " SimulatorManager": http://tue-savvy.github.io Il va réinitialiser tous vos simulateurs au moyen d'un widget de barre de menu (pas sûr si c'est ce que son nom), mais en plus de cela, il vous donnera un accès rapide à toutes vos données d'application. Je ne peux vraiment pas vivre sans plus. À passer le mot!

1
répondu Sjakelien 2015-12-15 23:57:18

je veux ajouter quelque chose à la réponse de Cameron Brown . Pour s'assurer que la version correcte est réinitialisée (E. g, iPad, version 6.1), je démarre le simulateur iOS via iOS-sim :

version=$(echo "$DESTINATION" | egrep -o "OS=[0-9.]{3}" | cut -d '=' -f 2)
simType=$(echo "$DESTINATION" | egrep -o "name=[a-zA-Z]*" | cut -d '=' -f 2 | tr "[A-Z]" "[a-z]")

IOS_SIM_BIN=$(which ios-sim)

if [ -z $IOS_SIM_BIN ]
then
    echo "ios-sim not installed, please use 'sudo npm install ios-sim -g'"
fi    

echo "Resetting Simulator \"$simType\", version \"$version\""

$IOS_SIM_BIN start --family $simType --sdk $version --timeout 1
osascript /path/to/reset_simulator.applescript

$DESTINATION peut être E. g "OS=7.0,name=iPad" .

pour que ça fonctionne correctement, j'ai adapté le reset_simulator.applescript un peu et a supprimé la partie d'activation:

tell application "iPhone Simulator"
    activate
end tell
0
répondu asgoth 2017-05-23 11:47:18

comme bonus supplémentaire à l'utilisation des commandes xcrun vous pouvez lancer un appareil après avoir inscrit

xcrun simctl list

une fois la liste affichée, Lancez:

xcrun instruments -w "iPhone 5s (8.1 Simulator) [31E5EF01-084B-471B-8AC6-C1EA3167DA9E]"
0
répondu JJacquet 2014-12-09 01:47:02

nous utilisons le script python suivant pour réinitialiser le simulateur sur notre serveur de construction.

#!/usr/bin/env python 

import subprocess
import re
import os

def uninstall_app():
    print 'Running %s' % __file__

    # Get (maybe read from argv) your bundle identifier e.g. com.mysite.app_name
    try:
        bundle_identifier = '$' + os.environ['BUNDLE_IDENTIFIER']
    except KeyError, e:
        print 'Environment variable %s not found. ' % e
        print 'Environment: ', os.environ
        exit(1)

    print 'Uninstalling app with Bundle identifier: ', bundle_identifier

    # We call xcrun, and strip the device GUIDs from the output
    process = subprocess.Popen(['xcrun', 'simctl', 'list'], stdout=subprocess.PIPE)

    # Read first line
    line = process.stdout.readline()

    while True:

        # Assume first match inside parenthesis is what we want
        m = re.search('\((.*?)\)', line)

        if not (m is None):

            # The regex found something, 
            # group(1) will throw away the surrounding parenthesis
            device_GUID = m.group(1)

            # Brutely call uninstall on all listed devices. We know some of these will fail and output an error, but, well..            
            subprocess.call(['xcrun', 'simctl', 'uninstall', device_GUID, bundle_identifier])

        # Read next line
        line = process.stdout.readline()

        # Stop condition
        if line == '':
            break

if __name__ == '__main__':
    uninstall_app()

il suppose que l'identifiant du paquet de votre application est défini comme une variable d'environnement, par exemple

export BUNDLE_IDENTIFIER=com.example.app_name

peut-être que vous voulez passer l'identifiant du paquet d'une autre manière.

0
répondu andershqst 2015-04-18 14:29:29

en me basant sur la plupart des réponses ci-dessus, j'utilise Keyboard Maestro et j'ai fait une petite Macro pour réinitialiser le simulateur en cours d'exécution et le redémarrer. Il tourne la mise au point de nouveau à Xcode après la réinitialisation et redémarrage, de sorte que je peux frapper Command+R encore tout de suite pour relancer l'application, que je trouve très pratique.

enter image description here

le contenu du script ruby est:

#!/usr/bin/env ruby

list = `xcrun simctl list`.split("\n")

list.each do |line|
  if line =~ /\(Booted\)$/
    device = line.match(/([^(]*)\s+\(([^)]*)\)\s+\(([^)]*)\).*/)[1]
    uuid = line.match(/([^(]*)\s+\(([^)]*)\)\s+\(([^)]*)\).*/)[2]
    status = line.match(/([^(]*)\s+\(([^)]*)\)\s+\(([^)]*)\).*/)[3]
    puts uuid
    break
  end
end
0
répondu wrtsprt 2015-07-30 07:45:38

voici une tâche Rakefile pour réinitialiser un simulateur ciblé. Cela fonctionne avec Xcode 7 puisque les outils de la ligne de commande Xcode 7 ont cassé la commande de désinstallation de xcrun simctl. J'ai une méthode d'exécution personnalisée car j'aime voir la commande du terminal ainsi que sa sortie.

desc "Resets the iPhone Simulator state"
task :reset_simulator => [] do
  deviceDestinationName = 'iPhone 6' #for efficiency since we only target one device for our unit tests
  puts "...starting simulator reset"
  runC('killall "iOS Simulator"')
  runC('killall "Simulator"')
  runC('xcrun simctl list > deviceList.txt')
  lines = File.open('deviceList.txt').readlines
  lines.each do |line|
    lineStripped = line.strip
    if (lineStripped=~/[a-zA-Z0-9]{8}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{12}/)
      if (lineStripped !~ /unavailable/ && lineStripped.include?("#{deviceDestinationName} ("))
        puts "Inspecting simulator: #{lineStripped} by making sure it is shut down, then erasing it."
        needsShutdown = !lineStripped.include?('Shutdown')
        aDeviceId = lineStripped[/[a-zA-Z0-9]{8}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{12}/]
        if (needsShutdown)
          runC("xcrun simctl shutdown #{aDeviceId}")
        end
        runC("xcrun simctl erase #{aDeviceId}")
        #does not work to just uninstall the app with Xcode 7, do just rely on resetting the device above
        #`xcrun simctl uninstall #{aDeviceId} com.animoto.AppServiceClientTester`
      end
    end
  end
  runC('rm deviceList.txt')
end

#Runs a command and prints out both the command that will be run and the results
def runC(command)
  puts '$ ' + command
  puts `#{command}`  
end
0
répondu n8tr 2015-10-06 21:22:24
Les noms de cibles

et le nom d'application du simulateur semblent avoir changé un peu pour xCode6 / iOS8. Voici la version non mise à jour de L'osascript de Cameron Brown pour xCode6/ iOS8:

tell application "iPhone Simulator"
    activate
end tell

tell application "System Events"
    tell process "iPhone Simulator"
        tell menu bar 1
            tell menu bar item "iOs Simulator"
                tell menu "iOs Simulator"
                    click menu item "Reset Content and Settings…"
                end tell
            end tell
        end tell
        tell window 1
            click button "Reset"
        end tell
    end tell
end tell
-1
répondu Litome 2014-09-26 08:03:52

je présente,

Définitive Simulateur iOS Réinitialiser Script (lien)

enter image description here

basé sur le code D'Oded Regev (qui était basé sur le code d'amende de Jacob Rus "menu_click")

-5
répondu Stian Høiland 2013-03-13 09:39:28