773 votes

Cacher les logs étranges et indésirables de Xcode

Lorsque l'on utilise Xcode 8+ et que l'on crée un nouveau projet vierge, les logs 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 quelqu'un a-t-il déjà trouvé une configuration pour gérer cela ?

1 votes

Il semble qu'il s'agisse simplement d'informations de débogage issues du développement. Enquête...

0 votes

Avez-vous désactivé l'utilisation de l'api de l'éditeur de liens dynamiques dans xcode ?

0 votes

Cette solution ne fonctionne pas pour moi dans Xcode 8. Il semblerait que cette solution ne fonctionne que pour Xcode 8 beta.

1627voto

iDevzilla Points 12717

Essayez ceci :

1 - A partir de Menu Xcode ouvert : Product > Scheme > Edit Scheme

2 - Sur votre Variables d'environnement fixer OS_ACTIVITY_MODE = disable

Screenshot

26 votes

Il fonctionne également sur la version 8.0 de Xcode, je pense donc que c'est la solution.

2 votes

C'est la meilleure solution que j'ai vue, j'espère que plus de gens la verront. Ces conneries d'enregistrement supplémentaire m'ont rendu fou ! Bravo pour cette solution !

28 votes

Si vous vous demandez comment accéder à cet écran, vous devez aller dans Produit > Schéma > Modifier le schéma ou Cmd + <.

401voto

cduhn Points 11229

En s'appuyant sur l'original tweet de @rustyshelf, et la réponse illustrée de iDevzilla, voici une solution qui fait taire le bruit du simulateur sans désactiver la sortie NSLog de l'appareil.

  1. Sous Produit > Schéma > Modifier le schéma... > Run (Debug), définissez la variable d'environnement OS_ACTIVITY_MODE à ${DEBUG_ACTIVITY_MODE} de manière à ce qu'elle ressemble à ceci :

enter image description here

  1. Allez dans les paramètres de construction de votre projet et cliquez sur + pour ajouter un paramètre défini par l'utilisateur nommé DEBUG_ACTIVITY_MODE. Développez ce paramètre et cliquez sur le + à côté de Debug pour ajouter une valeur spécifique à la plate-forme. Sélectionnez la liste déroulante et changez-la en "Tout simulateur iOS". Réglez ensuite sa valeur sur "disable" de manière à ce qu'elle ressemble à ceci :

enter image description here

0 votes

Ne fonctionne pas sur la version 8.0 (8A218a). Les paramètres du schéma peuvent être consultés aquí et les paramètres de construction peuvent être consultés aquí .

0 votes

J'utilise également Xcode 8.0 (8A218a) et cela fonctionne bien.

0 votes

@NSNoob, Sélectionnez votre cible et vérifiez ses paramètres de construction pour vous assurer que vous ne surchargez pas la variable DEBUG_ACTIVITY_MODE à ce niveau. Assurez-vous également que vous avez édité le schéma correct pour la cible que vous exécutez.

102voto

BaseZen Points 6460

OS_ACTIVITY_MODE n'a pas fonctionné pour moi (il peut Je ne sais pas si c'est parce que j'ai fait une faute de frappe. disable comme disabled (mais n'est-ce pas plus naturel ? !?), ou du moins n'a pas empêché la diffusion d'un grand nombre de messages. Voici donc 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.GetEnvironmentEntries();
  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::StringRef("OS_ACTIVITY_DT_MODE=enable"));
  }

  // Let our parent class do the real launching.
  return PlatformPOSIX::LaunchProcess(launch_info);
}

Ainsi, le réglage OS_ACTIVITY_DT_MODE à "NO" dans les variables d'environnement (méthode GUI expliquée dans la capture d'écran Schemes dans la réponse principale) fonctionne pour moi.

En ce qui concerne NSLog être le point de chute des messages du système, des erreurs et de votre propre débogage : une véritable approche de journalisation est probablement nécessaire 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 problèmes après la révision de l'ensemble de l'API de journalisation.

ADDENDUM

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

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

NSLog / CFLog

NSLog n'est plus qu'un complément à os_log dans la plupart des cas.

Il n'y a plus qu'à citer la source pour l'autre variable env. Un endroit assez disparate, cette fois-ci des internes d'Apple. Je ne sais pas trop pourquoi ils se chevauchent. [Commentaire incorrect à propos de NSLog supprimé]

[édité le 22 septembre] : Je me demande ce que "release" et "stream" font différemment de "debug". Pas assez de sources.

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;
    }
}

17 votes

Il est toujours agréable de voir une réponse qui fournit des raisons et un contexte plutôt qu'une solution rapide.

0 votes

Cette réponse a été obtenue en utilisant OS_ACTIVITY_DT_MODE = NO

1 votes

Cela produit-il un comportement différent de OS_ACTIVITY_MODE=disable ? Y a-t-il une raison de préférer cette solution ?

65voto

Peter Smith Points 1007

Un tweet m'a apporté la réponse - https://twitter.com/rustyshelf/status/775505191160328194

Pour empêcher le simulateur iOS de Xcode 8 d'enregistrer des données comme des fous, définissez une variable d'environnement OS_ACTIVITY_MODE = disable dans votre schéma de débogage.

Cela a fonctionné.

8 votes

Comme nous l'avons déjà dit : L'option OS_ACTIVITY_MODE = disable désactive tout autre enregistrement avec un NSLog.

7 votes

Cette solution cachera tous les NSLog à partir de Xcode 9. Pour conserver NSLog, remplacez disable con default .

35voto

Pez Points 402

Ce problème n'est toujours pas résolu dans la version 8.0 beta 2 (8S162m) de Xcode pour moi et des logs supplémentaires apparaissent également dans la console Xcode.

** EDIT 8/1/16 : Ceci a été reconnu dans le notes de publication 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 débogage de Xcode affiche une journalisation supplémentaire à partir des cadres du système lorsque débogage des applications dans le simulateur. (27331147, 26652255)

On peut supposer que ce problème sera résolu lors de la publication de l'OG. D'ici là, patience et, bien que ce ne soit pas la solution idéale, voici une solution de contournement que j'utilise...

Comme pour la réponse précédente, je dois.. :

  • faire précéder mes journaux d'impression d'un caractère spécial (par exemple * ou ^ ou ! etc etc)

  • Utilisez ensuite la boîte de recherche en bas à droite du panneau de la console pour filtrer les journaux de la console en saisissant le caractère spécial de votre choix pour que la console affiche mes journaux d'impression comme prévu.

console

0 votes

Je peux confirmer que ce problème de journalisation est toujours présent dans la version bêta 2.

0 votes

J'ai ajouté une capture d'écran maintenant que j'ai suffisamment de privilèges. Je pense que contrairement aux autres réponses, il n'est pas nécessaire d'avoir à lancer les logs du système quand il y a une solution de contournement directement dans Xcode pour ceux qui rencontrent le même problème dans la console Xcode et qui veulent juste voir ce qu'ils impriment dans la console Xcode.

0 votes

Est-ce qu'il y a un moyen d'être informé de la sortie d'une nouvelle version de Xcode beta (c'est à dire un abonnement par email) ? J'étais encore en beta 0 et je n'ai pas remarqué qu'il y avait eu des mises à jour jusqu'à ce que je voie ce post @benrudhart

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X