Comment puis-je obtenir les journaux de la console à partir du simulateur iOS?

241

Je veux voir ce qui se passe dans le simulateur iOS si je ne teste pas l'application dans Xcode.

Par exemple, si j'ouvre un lien dans le simulateur Safari, voir ce qui se passe dans la console, ou si j'installe une application web, voir les liens sur lesquels j'appuie dans la console.

Comment puis-je faire ceci?

Je veux le voir dans Xcode ou Terminal, mais ce n'est pas un problème si j'ai besoin d'utiliser un autre logiciel.

user1335015
la source
Voir aussi: stackoverflow.com/a/29310542/59087
Dave Jarvis

Réponses:

271

Simulateur iOS> Barre de menus> Débogage> Ouvrir le journal système


Vieilles manières:

iOS Simulator imprime ses journaux directement sur stdout, afin que vous puissiez voir les journaux mélangés avec les journaux système.

Ouvrez le terminal et saisissez: tail -f /var/log/system.log

Exécutez ensuite le simulateur.

ÉDITER:

Cela a cessé de fonctionner sur Mavericks / Xcode 5. Vous pouvez maintenant accéder aux journaux du simulateur dans son propre dossier: ~/Library/Logs/iOS Simulator/<sim-version>/system.log

Vous pouvez soit utiliser Console.app pour voir cela, soit simplement faire une queue (iOS 7.0.3 64 bits par exemple):

tail -f ~/Library/Logs/iOS\ Simulator/7.0.3-64/system.log

EDIT 2:

Ils sont maintenant situés dans ~/Library/Logs/CoreSimulator/<simulator-hash>/system.log

tail -f ~/Library/Logs/CoreSimulator/<simulator-hash>/system.log

fbernardo
la source
8
Est-ce toujours exact? Je ne vois rien console.logdans ces journaux en utilisant tailouConsole.app
Jeff
3
Je n'obtiens aucun résultat non plus sur OSX 10.10. ces journaux sont là mais mon simulateur est la version 8.1 et les journaux sont tous des versions 7.1 *
skift
65
Simulateur iOS> Barre de menus> Débogage> Ouvrir le journal système
pkamb
4
Merci! Son ~ / Library / Logs / CoreSimulator / <simulator-hash> /system.log ces jours-ci cependant.
calimarkus
6
La réponse de BYossarian est "correcte". "Développer un menu dans Safari de bureau qui vous permet de voir la console du simulateur iOS: Développer -> iPhone Simulator -> nom du site"
snobojohan
225

Vous pouvez afficher la console du simulateur iOS via le bureau Safari. Cela est similaire à la façon dont vous utilisez Safari pour afficher la console des appareils iOS physiques.

Chaque fois que le simulateur est en cours d'exécution et qu'une page Web est ouverte, il y aura une option sous le menu Développer dans Safari de bureau qui vous permet de voir la console du simulateur iOS:

Développer -> iPhone Simulator -> nom du site

Ben Jackson
la source
31
C'est la meilleure réponse, tout comme la "vraie" console du navigateur et vous pouvez exécuter des commandes javascript à la volée. Je vous remercie.
Jorge Fuentes González
4
Pourquoi n'ai-je vu cela documenté nulle part ailleurs? Brillant.
Navet
4
L'inspecteur Web (lorsque vous y accédez de cette façon) apparaît complètement vide pour moi (Mavericks Macbook Pro - toutes les mises à jour installées - Safari 7.0.5)
jamis0n
5
Safari semble détecter que le simulateur est ouvert, mais il indique "Aucune application
inspectable
4
de quoi parlez-vous ... cela ouvre simplement le débogueur Web pour un site Web ouvert dans n'importe quelle vue Web du simulateur. Les messages de console que vous y voyez sont enregistrés dans le contexte javascript. Ce ne sont PAS les journaux du simulateur ios. Suis-je en train de manquer quelque chose? Peut-être qu'Apple a changé quelque chose depuis 2013, mais à partir d'aujourd'hui, cette réponse a un score ridiculement élevé pour le titre de la question
Radu Simionescu
107

Il y a une option dans le simulateur pour ouvrir le console

Debug > Open System Log

ou utilisez le

keyboard shortcut: ⌘/

Capture d'écran du menu du simulateur

Mark Bridges
la source
90

iOS 8 et iOS 9

Sous iOS 8 et iOS 9, cet emplacement est désormais:

~/Library/Logs/CoreSimulator/<DEVICE_CODE>

Donc, ce qui suit fonctionnera:

tail -f ~/Library/Logs/CoreSimulator/<DEVICE_CODE>/system.log

La DEVICE_CODEvaleur peut être trouvée via la commande de console suivante:

instruments -s devices
viteinfinite
la source
1
Pour trouver l'identifiant de l'appareil: dans Xcode, cliquez sur Windows> Appareils. Un appareil et l'identifiant seront affichés dans le volet droit.
neilco
3
Vous pouvez taper instruments -s devicesdans la console
viteinfinite
2
s / console / fenêtre de terminal /
mharper
Ça n'a pas marché pour moi. xcrun simctl spawn booted log stream --level=debug | grep App_Debug_Stringtravaillé.
rustyMagnet
29

Vous ne devez pas compter sur instruments -s. L'outil officiellement pris en charge pour travailler avec les simulateurs à partir de la ligne de commande est xcrun simctl.

Le répertoire des journaux d'un périphérique peut être trouvé avec xcrun simctl getenv booted SIMULATOR_LOG_ROOT. Ce sera toujours correct même si l'emplacement change.

Maintenant que les choses évoluent, os_logil est plus facile d'ouvrir Console.app sur le Mac hôte. Les simulateurs démarrés devraient apparaître comme une source de journal sur la gauche, tout comme les appareils physiques. Vous pouvez également exécuter des commandes de journal dans le simulateur démarré:

# os_log equivalent of tail -f
xcrun simctl spawn booted log stream --level=debug

# filter log output
xcrun simctl spawn booted log stream --predicate 'processImagePath endswith "myapp"'
xcrun simctl spawn booted log stream --predicate 'eventMessage contains "error" and messageType == info'

# a log dump that Console.app can open
xcrun simctl spawn booted log collect

# open location where log collect will write the dump
cd `xcrun simctl getenv booted SIMULATOR_SHARED_RESOURCES_DIRECTORY`

Si vous souhaitez utiliser les outils Safari Developer (y compris la console JS) avec une page Web dans le simulateur : démarrez l'un des simulateurs, ouvrez Safari, puis accédez à Safari sur votre Mac et vous devriez voir Simulator dans le menu.

Vous pouvez ouvrir une URL dans le simulateur en la faisant glisser depuis la barre d'adresse Safari et en la déposant dans la fenêtre du simulateur. Vous pouvez également utiliser xcrun simctl openurl booted <url>.

Russbishop
la source
C'est la bonne réponse à partir de Xcode 9.3, iOS 11. Les emplacements mentionnés dans les autres réponses ne sont plus corrects.
Michael McGuire
Cela a fonctionné pour moi sur Xcode Version 10.1 (10B61), iOS 12.1 Simulator. L'utiliser pour afficher la sortie de la console de l'application iOS dans Emacs. D'autres réponses ont fonctionné dans le passé, mais plus.
tboyce12
Pour moi, la chose qui a fonctionné était la commande (j'avais Safari ouvert avant le simulateur et donc l'entrée de menu n'apparaissait pas dans Safari)!
Shmarkus
Où avez-vous trouvé la documentation du drapeau "prédicat"?
Hjulle
Nouveau sur les simulateurs macOS 11 et iOS 14: log help predicatesvous donnera plus d'informations. Le format de prédicat suit NSPredicate.
russbishop
18

Si vous utilisez Swift , n'oubliez pas que printlncela ne s'imprimera que dans le journal de débogage (qui apparaît dans la zone de débogage de xCode). Si vous souhaitez imprimer sur system.log, vous devez utiliser NSLogcomme autrefois.

Ensuite, vous pouvez afficher le journal du simulateur via son menu, Déboguer> Ouvrir le journal système ... (cmd + /)

cprcrack
la source
12

la queue /var/log/system.logn'a pas fonctionné pour moi. J'ai trouvé mes journaux en utilisant Console.app. Ils étaient

~/Library/Logs/iOS Simulator/{version}/system.log

djibouti33
la source
Il s'agit d'une excellente méthode pour consulter les journaux, par exemple il y a quelques jours.
Troy
10

Vous pouvez utiliser l' Consoleapplication (sélectionnez votre appareil dans Appareils) sur votre Mac pour voir un message de journal qui a été envoyé à l'aide NSLog(vous ne verrez pas les journaux de la printfonction).

entrez la description de l'image ici

Veuillez noter que si vous voulez voir un journal, WebViewvous devez utiliserSafary -> Develop -> device

[Trouver le journal des plantages]

yoAlex5
la source
appuyez sur cmd then space bar Type " Console" appuyez sur enter. Btw. ce devrait être la bonne réponse aujourd'hui.
Lonely
7

XCode> 6.0 ET iOS> 8.0 Le script ci-dessous fonctionne si vous avez la version XCode> 8.0

J'utilise le petit script ci-dessous pour suivre les journaux du simulateur sur la console système.

#!/bin/sh
sim_dir=`xcrun instruments -s | grep "iPhone 6 (8.2 Simulator)" | awk {'print $NF'} | tr -d '[]'`
tail -f ~/Library/Logs/CoreSimulator/$sim_dir/system.log

Vous pouvez passer le type de simulateur utilisé dans Grep comme argument. Comme mentionné dans les articles ci-dessus, il existe une commande simctl et instruments pour afficher le type de simulateurs disponibles en fonction de la version de Xcode. Pour afficher la liste des appareils / simulateurs disponibles.

xcrun instruments -s

OU

xcrun simctl list

Vous pouvez maintenant passer le code de l'appareil OU le type de simulateur comme argument au script et remplacer le "iPhone 6 (8.2 Simulator)" dans grep pour être $ 1

Gurubaran
la source
0

Je peux ouvrir le journal directement via le simulateur iOS: je ne Debug -> Open System Log...sais pas quand cela a été introduit, il pourrait donc ne pas être disponible pour les versions antérieures.

bompf
la source
0

Vous pouvez voir la fenêtre de la console Simulator, y compris Safari Web Inspector et tous les outils de développement Web à l'aide de l'application Safari Technology Preview. Ouvrez votre page dans Safari sur le simulateur, puis accédez à Safari Technology Preview> Develop> Simulator.

Outils de développement Web

Mau
la source
0

Non NSLogou le printcontenu sera écrit system.log, qui peut être ouvert par Select Simulator -> Debug -> Open System logsur Xcode 11.

Je trouve un moyen, j'écris des journaux dans un fichier et j'ouvre xx.logavec. Terminal.appEnsuite, les journaux se présenteront dansTerminal.app animé.

J'utilise CocoaLumberjack pour y parvenir.

ÉTAPE 1:

Ajouter DDFileLogger DDOSLoggeret imprimer le chemin des journaux. config()devrait être appelé lorsque le déjeuner App.

static func config() {
    #if DEBUG
    DDLog.add(DDOSLogger.sharedInstance) // Uses os_log
    let fileLogger: DDFileLogger = DDFileLogger() // File Logger
    fileLogger.rollingFrequency = 60 * 60 * 24 // 24 hours
    fileLogger.logFileManager.maximumNumberOfLogFiles = 7
    DDLog.add(fileLogger)
    DDLogInfo("DEBUG LOG PATH: " + (fileLogger.currentLogFileInfo?.filePath ?? ""))
    #endif
}

ÉTAPE 2:

Remplacez printou NSLogpar DDLogXXX.

ÉTAPE 3:

$ tail -f {path of log}

Ici, le message sera présent dans Terminal.app animé.

Encore une chose. S'il n'y a pas de déconnexion de message, assurez-vous Environment Variables-> OS_ACTIVITY_MODEISNOT disable.

Jules
la source