web-dev-qa-db-fra.com

iOS 10 n'imprime pas les NSLogs

Rien ne s'imprime à partir de NSLog sur Xcode 8.0 beta (8S128d). printf est inchangé

Voici mon code:

NSLog(@"hello from NSLog");
printf("hello from printf");

Voici la sortie sur iOS 9 Simulator:

2016-06-17 09:49:10.887 calmapp-dev[28517:567025] hello from NSLog
hello from printf

Voici la sortie sur iOS 10 Simulator:

hello from printf
80
Tyler Sheaffer

Il se peut que vous ayez ajouté la propriété "OS_ACTIVITY_MODE": "disable" dans les variables d'environnement Scheme (pour masquer la sortie du système d'exploitation du simulateur) et que vous l'ayez oublié, et que vous exécutiez maintenant sur un périphérique réel.

Dans Xcode 8: 

Product -> Scheme -> Edit Scheme -> Run -> Arguments -> Environment Variables

N'ajoutez que OS_ACTIVITY_MODE et cochez-la N'ajoutez pas de valeur

 enter image description here

 enter image description here

Résumé: Ceci est un bogue de Xcode 8 + iOS10, on peut le résoudre de cette façon:

  • Lorsque vous utilisez le simulateur, ajoutez le nom "OS_ACTIVITY_MODE" et la valeur "disable" et vérifiez-le. 

  • Sur un périphérique réel, ajoutez uniquement "OS_ACTIVITY_MODE" et cochez-la Ne pas ajouter la valeur. Vous verrez le NSLog dans la console Xcode8.

221
user6833743

Si vous consultez les notes de publication de la version bêta de Xcode 8 , vous constaterez qu'il est écrit:

Lors du débogage d'une application s'exécutant sur Simulator, les journaux peuvent ne pas être visibles dans la console . Solution: utilisez la commande +/dans Simulator.app pour ouvrir le journal système dans l'application console pour afficher les journaux NSLogs. (26457535)

26
Lucas

le NSlog ou l'impression est en réalité exécuté mais caché parmi de nombreuses autres sorties de débogage de la console pour résoudre ce problèmeOpen Xcode8:

Product -> Scheme -> Edit Scheme -> Run -> Arguments -> Environment Variables

ajouter "OS_ACTIVITY_MODE" et définir la valeur pour "désactiver" et le vérifier.

cliquez fermer

xcode9

ajoutez "OS_ACTIVITY_MODE" et définissez la valeur sur "default" et cochez-la.

 enter image description here  enter image description here

14
Milad Masoodi

Assurez-vous également que la console est réellement visible dans Xcode (c’est-à-dire que l’icône de droite est surlignée en bleu, comme indiqué dans l’image ci-dessous). Après avoir mis à niveau Xcode, il masque la console et ne montre que la vue Variables. Cela donnait l'impression que NSLog() ne fonctionnait pas correctement, alors qu'il fonctionnait correctement, je ne pouvais tout simplement pas voir la sortie.

 enter image description here

6
smacdonald

Hmmm ... il semble que la propriété "OS_ACTIVITY_MODE": "disable" empêche PRESPENTS NSlog de figurer dans le journal Xcode 9. 

Décocher cette valeur dans mon schéma restauré mes journaux. 

5
David Hersey

Je ne vois pas non plus la sortie NSLog dans un véritable périphérique iOS 10. Si vous utilisez de vrais périphériques, vous pouvez ouvrir la fenêtre Périphériques à partir de Xcode (Maj + Commande + 2) et voir les journaux de périphériques, mais il est difficile de consulter les journaux de vos applications car la console affiche les journaux du système et de toutes les applications.

(J'utilise Xcode 7, alors ce n'est peut-être pas le problème de Xcode mais celui de iOS 10)

5
kientux

Pour tous ceux qui viendront dans le futur. La raison pour laquelle NSLog n'imprime pas sur syslog dans iOS 10 et iOS 11 est due au passage d'Apple à la consignation unifiée.

Vous pouvez voir la WWDC en parler ici: https://developer.Apple.com/videos/play/wwdc2016/721/

Documentation ici: https://developer.Apple.com/documentation/os/logging

À partir de 10, vous devriez utiliser os_log au lieu de NSLog.

Comment trouver les journaux sur le disque: https://www.blackbagtech.com/blog/2017/09/22/accessing-unified-logs-image/

Pour résumer, les journaux sont situés dans /var/db/diagnostics qui peut être trouvé pour un VM à /Users/USERNAME/Library/Developer/CoreSimulator/Devices/SIMULATOR-GUID/data/var/db/

Copiez tous les éléments à l'intérieur de diagnostics et uuidtext dans un seul dossier (n'incluez pas les diagnostics de dossier ou uuidtext dans ce qu'ils contiennent).

Renommez ce dossier foldername.xarchive.

Ouvrez-le dans Console.app ou utilisez la commande OSX util log: log show <path to archive> --info --predicate <options>

1
shane

J'utilise Xcode 8, alors j'ai aussi rencontré le même problème. Et j'ai résolu ce problème en ajoutant value = disable sur le simulateur, mais sur une vraie machine, je n'ajoute pas de valeur.

1
user6733740

Les messages NSLog ne sont plus affichés lors de la mise à niveau vers Xcode 9.1 + iOS 11.1. Initialement, le réponse acceptée m'a permis de contourner ce problème en utilisant l'application Console et en activant le simulateur ( voir la réponse de Lucas ). 

Dans l'application Console sous Action, j'ai essayé de sélectionner Include Debug Messages et de désélectionner Include Info Messages (afin que la console ne soit pas submergée de messages système). Des messages NSLog sont apparus dans la fenêtre de la console dans Xcode mais pas dans l'application Console.

J'ai réalisé qu'il devait exister un moyen plus direct de disable ou d'activer (c'est-à-dire default) NSLogs grâce au commentaire de Coeur en réponse à cette réponse. À mon avis, c'est la meilleure réponse car définir OS_ACTIVITY_MODE sur disable ou default aura plus de sens pour les débutants. 

0
Greg