Cacher d'étranges journaux Xcode non désirés

Lors de l'utilisation de Xcode 8+ et de la création d'un nouveau projet vide, les journaux suivants apparaissent lors de l'exécution de l'application:

2016-06-13 16:33:34.406093 TestiOS10[8209:100611] bundleid: com.appc.TestiOS10, enable_level: 0, persist_level: 0, propagate_with_activity: 0 2016-06-13 16:33:34.406323 TestiOS10[8209:100607] Created DB, header sequence number = 248 2016-06-13 16:33:34.409564 TestiOS10[8209:100611] subsystem: com.apple.UIKit, category: HIDEvents, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0 2016-06-13 16:33:34.504117 TestiOS10[8209:100607] Created DB, header sequence number = 248 2016-06-13 16:33:34.548023 TestiOS10[8209:100607] subsystem: com.apple.BaseBoard, category: MachPort, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0 2016-06-13 16:33:34.568458 TestiOS10[8209:100608] subsystem: com.apple.FrontBoard, category: Common, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0 

Peut-être que quelqu'un a déjà trouvé une configuration pour cela?

Essaye ça:

1- Du menu Xcode ouvert: Produit> Schéma> Edit Scheme

2- Sur votre set de variables d'environnement OS_ACTIVITY_MODE = disable

Capture d'écran

Sur la base du tweet original de @rustyshelf, et de la réponse illustrée d'iDevzilla, voici une solution qui réduit le bruit du simulateur sans désactiver la sortie NSLog de l'appareil.

  1. Sous Product> Scheme> Edit Scheme …> Run (Debug), définissez la variable d'environnement OS_ACTIVITY_MODE sur $ {DEBUG_ACTIVITY_MODE} pour qu'elle ressemble à ceci:

entrez la description de l'image ici

  1. Accédez aux parameters de génération de votre projet et click + pour append un paramètre défini par l'user nommé DEBUG_ACTIVITY_MODE. Développez ce paramètre et click + en regard de Déboguer pour append une valeur spécifique à la plate-forme. Sélectionnez la list déroulante et remplacez-la par "Any iOS Simulator". Ensuite, définissez sa valeur sur "disable" pour qu'il ressemble à ceci:

entrez la description de l'image ici

Un tweet avait la réponse pour moi – https://twitter.com/rustyshelf/status/775505191160328194

Pour empêcher le simulateur Xcode 8 iOS de se connecter comme un fou, définissez une variable d'environnement OS_ACTIVITY_MODE = disable dans votre schéma de debugging.

Ça a marché.

OS_ACTIVITY_MODE n'a pas fonctionné pour moi ( peut -être parce que je l'ai disable comme disabled , mais n'est-ce pas plus naturel?!?), Ou du less n'a pas empêché beaucoup de messages. Alors, voici le vrai problème avec les variables d'environnement.

https://llvm.org/svn/llvm-project/lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp

 lldb_private::Error PlatformDarwin::LaunchProcess(lldb_private::ProcessLaunchInfo &launch_info) { // Starting in Fall 2016 OSes, NSLog messages only get mirrored to stderr // if the OS_ACTIVITY_DT_MODE environment variable is set. (It doesn't // require any specific value; rather, it just needs to exist). // We will set it here as long as the IDE_DISABLED_OS_ACTIVITY_DT_MODE flag // is not set. Xcode makes use of IDE_DISABLED_OS_ACTIVITY_DT_MODE to tell // LLDB *not* to muck with the OS_ACTIVITY_DT_MODE flag when they // specifically want it unset. const char *disable_env_var = "IDE_DISABLED_OS_ACTIVITY_DT_MODE"; auto &env_vars = launch_info.GetEnvironmentEnsortinges(); if (!env_vars.ContainsEnvironmentVariable(disable_env_var)) { // We want to make sure that OS_ACTIVITY_DT_MODE is set so that // we get os_log and NSLog messages mirrored to the target process // stderr. if (!env_vars.ContainsEnvironmentVariable("OS_ACTIVITY_DT_MODE")) env_vars.AppendArgument(llvm::SsortingngRef("OS_ACTIVITY_DT_MODE=enable")); } // Let our parent class do the real launching. return PlatformPOSIX::LaunchProcess(launch_info); } 

Donc, mettre OS_ACTIVITY_DT_MODE à "NON" dans les variables d'environnement (la méthode de l'interface graphique expliquée dans la capture d'écran des schémas dans la réponse principale) le fait fonctionner pour moi.

Dans la mesure où NSLog est le dépotoir pour les messages du système, les erreurs, et votre propre debugging: une approche de journalisation réelle est probablement appelée de toute façon, par exemple https://github.com/fpillet/NSLogger .

OU

Buvez le nouveau Kool-Aid: http://asciiwwdc.com/2016/sessions/721 https://developer.apple.com/videos/play/wwdc2016/721/ Il n'est pas surprenant qu'il y ait quelques accrocs après la refonte de l'set API de journalisation

ADDENDA

Quoi qu'il en soit, NSLog est juste une cale:

https://developer.apple.com/library/content/releasenotes/Miscellaneous/RN-Foundation-OSX10.12/

NSLog / CFLog

NSLog est maintenant juste un shim à os_log dans la plupart des circonstances.

Cela n'a de sens que de citer la source pour l'autre variable env. Tout à fait un endroit disparate, cette fois des internes Apple. Je ne sais pas pourquoi ils se chevauchent. [Commentaire incorrect sur NSLog supprimé]

[Édité 22 sept]: Je me request ce que "release" et "stream" font différemment de "debug". Pas assez de source.

https://github.com/macosforge/libdispatch/blob/8e63547ea4e5abbfe55c0c3064181c4950a791d3/src/voucher.c

 e = getenv("OS_ACTIVITY_MODE"); if (e) { if (strcmp(e, "release") == 0) { mode = voucher_activity_mode_release; } else if (strcmp(e, "debug") == 0) { mode = voucher_activity_mode_debug; } else if (strcmp(e, "stream") == 0) { mode = voucher_activity_mode_stream; } else if (strcmp(e, "disable") == 0) { mode = voucher_activity_mode_disable; } } 

Ce n'est pas encore corrigé dans Xcode Version 8.0 beta 2 (8S162m) pour moi et des journaux supplémentaires apparaissent également dans la console Xcode

** EDIT 01/08/16: Cela a été reconnu dans les notes de version pour Xcode 8 Beta 4 (8S188o) comme un problème persistant .

Problèmes connus dans Xcode 8 beta 4 – IDE

Débogage

• La console de debugging Xcode affiche une journalisation supplémentaire à partir des infrastructures système lors du debugging d'applications dans le simulateur. (27331147, 26652255)

On peut supposer que cela sera résolu par la version GM. Jusque-là la patience et bien que pas idéal mais une solution de contournement que j'utilise est ci-dessous …

Similaire à la réponse précédente, je dois:

  • préfixe mes journaux d'printing avec une sorte de caractère spécial (par exemple * ou ^ ou! etc etc)

  • Ensuite, utilisez la zone de search en bas à droite du volet de la console pour filterr les journaux de ma console en entrant le caractère spécial que vous avez choisi pour que la console affiche les journaux d'printing comme prévu

console

Veuillez find les étapes ci-dessous.

  1. Sélectionnez Product => Scheme => Edit Scheme ou utilisez le raccourci: CMD + <
  2. Sélectionnez l'option Run du côté gauche.
  3. Dans la section Variables d'environnement, ajoutez la variable OS_ACTIVITY_MODE = disable

Pour plus d'informations, veuillez find la représentation GIF ci-dessous.

Modifier le régime

Ma solution consiste à utiliser la command du débogueur et / ou le message de journal dans les points d'arrêt.

entrez la description de l'image ici

Et changer la sortie de la console de toutes les sorties à la sortie du débogueur comme

entrez la description de l'image ici

Ceci est lié à un problème connu avec la journalisation trouvée dans les notes de mise à jour de Xcode 8 Beta (également demandé à un ingénieur de la WWDC).

Lors du debugging des applications WatchOS dans le simulateur de surveillance, le operating system peut produire une quantité excessive de consignation inutile. (26652255)

Il n'y a actuellement aucune solution de contournement disponible, vous devez attendre une nouvelle version de Xcode.

EDIT 7/5/16: Ceci est censé être corrigé à partir de Xcode 8 Beta 2:

Résolu dans Xcode 8 beta 2 – IDE

Débogage

  • Lors du debugging d'une application sur le simulateur, les journaux sont visibles. (26457535)

Notes de mise à jour de Xcode 8 Beta 2

Bien. Il semble y avoir beaucoup d'agitation à propos de celui-ci, donc je vais vous donner un moyen de le persévérer sans utiliser ce tour de passe-passe. Je m'adresserai spécifiquement au simulateur iOS, mais il faudra peut-être aussi l'appliquer à la TV Sim qui se trouve dans un directory différent.

Le problème qui provoque toutes ces choses est plists situé dans le directory Xcode. Il y a un process qui est lancé, appelé configd_sim, lorsque le Sim démarre et lit les plists et imprime les informations de debugging si les plists spécifient qu'ils doivent être enregistrés.

Les plists sont situés ici:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Preferences/Logging/Subsystems

Si vous jouez avec une bêta, notez que le directory sera différent.

Vous verrez plusieurs plists dans ce directory. Maintenant, construisez et exécutez votre application et observez les journaux. Vous searchz le contenu immédiatement suivi du soussystème: partie. C'est le nom qui suit immédiatement celui qui représente le problème problématique correspondant.

entrez la description de l'image ici

De là, modifiez le plist pour assumr la touche / niveau [Level] de debugging qui est un dictionary contenant la key / valeur "Enable" => "Default" … ou simplement supprimez le plist. Notez que vous devrez être root pour effectuer l'une ou l'autre de ces tâches, car elles se trouvent dans l'application Xcode.

la command plutil -p pourrait vous être utile aussi. c'est à dire

 plutil -p /Applications/Xcode.app/Contents/Developer/Platforms/AppleTVSimulator.platform/Developer/SDKs/AppleTVSimulator.sdk/System/Library/Preferences/Logging/Subsystems/com.apple.BackBoardServices.fence.plist 

Cela m'a donné l'un des plists problématique qui contenait:

{ "DEFAULT-OPTIONS" => { "Level" => { "Enable" => "Default" }}}

Bonne chance :]

Ce n'est plus un problème dans xcode 8.1 (version 8.1 testée beta (8T46g)) . Vous pouvez supprimer la variable d'environnement OS_ACTIVITY_MODE de votre schéma.

https://developer.apple.com/go/?id=xcode-8.1-beta-rn

Débogage

• La console de debugging Xcode ne montre plus la journalisation supplémentaire à partir des infrastructures système lors du debugging des applications dans le simulateur. (26652255, 27331147)

Cette solution a fonctionné pour moi:

  1. Lancez l'application dans le simulateur
  2. Ouvrez le journal système ( + / )

Cela va vider toutes datatables de debugging et aussi vos NSLogs.

Pour filterr uniquement vos instructions NSLog:

  1. Préfixe chacun avec un symbole, par exemple: NSLog(@"^ Test Log")
  2. Filtrer les résultats en utilisant le champ de search en haut à droite, "^" dans le cas ci-dessus

C'est ce que vous devriez get:

Capture d'écran de la console