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