Ocultar logs Xcode estranhos indesejados

695

Ao usar o Xcode 8+ e criar um novo projeto em branco, os seguintes logs aparecem ao executar o aplicativo:

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

Talvez alguém já tenha encontrado uma configuração para lidar com isso?

Hans Knöchel
fonte
1
Parece ser apenas informações de log de depuração que sobraram do desenvolvimento. Investigando ...
JAL
u desativou o uso da API do vinculador dinâmico no xcode?
Teja Nandamuri
Parece que não funcionar para mim no Xcode 8, esta solução funciona apenas para o Xcode 8 beta.
Badal Shah
Eu tive esse problema com o Xcode 8.2.1 no El Capitan. A atualização para o macOS Sierra corrigiu o problema.
precisa saber é o seguinte
Ainda estou vendo o problema no Xcode 9.3, enviei o Apple Bug # 34767176 (Xcode 9 exibe instruções de impressão de depuração da estrutura do sistema), que é uma duplicata do bug aberto # 32256894 Envie uma duplicata do bug para a Apple: bugreport.apple.com/web
Paul Solt 8/18

Respostas:

1507

Tente o seguinte:

1- No menu Xcode, abra: Produto> Esquema> Editar esquema

2- Em suas variáveis ​​de ambiente, defina OS_ACTIVITY_MODE=disable

Captura de tela

iDevzilla
fonte
25
Também funciona no Xcode 8.0, então sugiro que seja a solução.
Nadein 14/09/16
27
Para quem se perguntando como chegar a essa tela, você precisa ir para o Produto> Esquema> Editar esquema ou Cmd + <
chrishale
46
@ iDevzilla, Há algum problema com esta solução, ela remove algumas coisas importantes do log ao usar um dispositivo real, como dados auto-registrados. Por favor, faça uma nova visão geral, não tenho certeza de que é a solução mais ideal.
Itai Spector
104
Infelizmente, esta opção oculta todos os NSLogs de um dispositivo real para mim ... #
687 Dmitry Isaev
8
O problema só resiste no simulador. Pessoalmente, não acredito que seja uma boa idéia adicionar a variável de ambiente, porque ela também oculta logs importantes, como problemas com restrições de layout e, entre outros, o exemplo que o @ AirXygène deu. No simulador, você também pode pressionar "CMD + /" para abrir o console; ele fornecerá os logs antigos. Esperemos que a Apple vai corrigir esse problema no Xcode, porém, há um grande interesse neste olhando para o número de upvotes;)
Bocaxica
360

Com base no tweet original do @rustyshelf e resposta ilustrada do iDevzilla, aqui está uma solução que silencia o ruído do simulador sem desativar a saída NSLog do dispositivo.

  1. Em Produto> Esquema> Editar esquema ...> Executar (depurar), defina a variável de ambiente OS_ACTIVITY_MODE como $ {DEBUG_ACTIVITY_MODE} para que fique assim:

insira a descrição da imagem aqui

  1. Vá para as configurações de construção do seu projeto e clique em + para adicionar uma Configuração Definida pelo Usuário denominada DEBUG_ACTIVITY_MODE. Expanda essa configuração e clique no + ao lado de Debug para adicionar um valor específico da plataforma. Selecione a lista suspensa e altere-a para "Qualquer iOS iOS". Em seguida, defina seu valor como "desativar" para que fique assim:

insira a descrição da imagem aqui

cduhn
fonte
6
@NSNoob verifique se você não tem um espaço na variável env.
sbarow
7
Pena que esta não é a resposta aceita e pena que esta resposta está perdendo a contagem de votos para cima. Resposta muito melhor ao IMHO, pois ele desativou o OS_ACTIVITY_MODE for DEBUG baseado no simulador.
Swany
18
Isso não funcionou para mim e nem a resposta mais votada. Usando o Xcode 8.2.1 no OS X 10.11.6 El Capitan. Mas o que funcionou foi uma combinação desta resposta e da resposta do BaseZen, usando OS_ACTIVITY_DT_MODE em vez de OS_ACTIVITY_MODE. (E inesperadamente para mim, pelo menos tanto "NÃO" e "desativar" desligado o registro galopante.)
RenniePet
1
@RenniePet, foi exatamente o que fez por mim. Obrigado!
Misha
8
Esta solução ocultará todo o NSLog começando com o Xcode 9. Para manter o NSLog, substitua disablepor default.
Cœur
88

OS_ACTIVITY_MODE não funcionou para mim ( pode ter sido porque eu digitei disablecomo disabled, mas não é mais natural?!?), Ou pelo menos não impedi uma grande quantidade de mensagens. Então aqui está o verdadeiro negócio com as variáveis ​​de ambiente.

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

Portanto, definir OS_ACTIVITY_DT_MODE"NÃO" nas variáveis ​​de ambiente (método GUI explicado na captura de tela de Esquemas na resposta principal) faz com que funcione para mim.

No que diz respeito NSLogao depósito de mensagens do sistema, erros e sua própria depuração: provavelmente é necessária uma abordagem de registro real, por exemplo, https://github.com/fpillet/NSLogger .

OU

Beba o novo Kool-Aid: http://asciiwwdc.com/2016/sessions/721 https://developer.apple.com/videos/play/wwdc2016/721/ Não é de surpreender que haja alguns problemas depois de revisar toda a API de log.

TERMO ADITIVO

Enfim, NSLogé apenas um calço:

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

NSLog / CFLog

O NSLog agora é apenas um calço para o os_log na maioria das circunstâncias.

Agora faz sentido citar a fonte para a outra variável env. Um lugar bastante díspar, desta vez dos internos da Apple. Não sei por que eles estão sobrepostos. [Comentário incorreto sobre NSLogremovido]

[Editado em 22 de setembro]: Gostaria de saber o que "release" e "stream" fazem diferente de "debug". Fonte insuficiente.

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;
    }
}
BaseZen
fonte
11
É sempre bom ver uma resposta que fornece razões e antecedentes, e não apenas a solução rápida.
JSCs
Trabalhou esta resposta usando OS_ACTIVITY_DT_MODE = NO
Almas Adilbek
1
Isso produz um comportamento diferente de OS_ACTIVITY_MODE = desativar? Existe algum motivo para preferir esta solução?
N8gray
1
Isso não. Esconde tudo.
Durazno
2
@Frizlab Sim, eu mencionei ambos no meu post. Veja o "OR" ... me refiro os_loginformalmente como o novo Kool Aid.
BaseZen 24/10
64

Um tweet tinha a resposta para mim - https://twitter.com/rustyshelf/status/775505191160328194

Para impedir que o Xcode 8 iOS Simulator faça logon como um louco, defina uma variável de ambiente OS_ACTIVITY_MODE = disable no seu esquema de depuração.

Funcionou.

Peter Smith
fonte
6
Como já foi dito: O OS_ACTIVITY_MODE = disable desativa todos os outros logs com um NSLog.
dzensik 27/09/16
5
Esta solução ocultará todo o NSLog começando com o Xcode 9. Para manter o NSLog, substitua disablepor default.
Cœur
34

Encontre os passos abaixo.

  1. Selecione Produto => Esquema => Editar esquema ou use o atalho: CMD + <
  2. Selecione a Runopção do lado esquerdo.
  3. Na seção Variáveis ​​de Ambiente, inclua a variável OS_ACTIVITY_MODE = desativar

Para mais informações, consulte a representação GIF abaixo.

Editar esquema

Ramkrishna Sharma
fonte
3
Espere .... Na segunda execução, funcionou. Parabéns pelo vídeo GIF. As melhores respostas estão sempre no fundo!
eonist
2
Esta solução ocultará todo o NSLog começando com o Xcode 9. Para manter o NSLog, substitua disablepor default.
Cœur
33

Isso ainda não foi corrigido no Xcode Versão 8.0 beta 2 (8S162m) para mim e logs extras também estão aparecendo no console do Xcode

** EDIT 1/8/16: Isso foi reconhecido nas notas de versão do Xcode 8 Beta 4 (8S188o) como um problema ainda persistente .

Problemas conhecidos no Xcode 8 beta 4 - IDE

Depuração

• O Console de depuração do Xcode mostra o log extra das estruturas do sistema ao depurar aplicativos no Simulador. (27331147, 26652255)

Presumivelmente, isso será resolvido pelo lançamento da GM. Até então, paciência e, embora não seja o ideal, mas uma solução alternativa que estou usando está abaixo ...

Semelhante à resposta anterior, estou tendo que:

  • prefixo meus logs de impressão com algum tipo de caractere especial (por exemplo, * ou ^ ou! etc etc)

  • Em seguida, use a caixa de pesquisa na parte inferior direita do painel do console para filtrar meus logs do console, inserindo o caractere especial escolhido para fazer com que o console exiba meus logs de impressão conforme pretendido

console

Pez
fonte
1
@SimplyLearning, você encontrará essas informações em todo o twitter. Mas você pode conferir este site oficial da apple: developer.apple.com/news ou seu feed de notícias para obter atualizações quando os publicarem: developer.apple.com/news/rss/news.rss A propósito: isso ainda parece ser um problema no Xcode Beta 3.
benrudhart
50
Acabei de adquirir o Xcode 8 GM, e o problema ainda persiste. Muito irritante!!
AdamM
8
Acabei de baixar o Xcode Versão 8.0 (8A218a) da App Store. A questão ainda está lá.
Statik
4
Apenas ridículo. Ainda lá na versão final do MAS.
Shai Mishali 15/09/16
1
Usamos um prefixo de tag para filtragem. Alguns problemas são: Várias linhas mostrarão apenas a primeira. Ao usar o lldb para depuração, você precisa alternar a filtragem. Realmente muito triste que, a partir de hoje, o console seja extremamente limitado. Temos um aplicativo para filtragem decente, mas precisamos copiar / colar do console. Que triste.
precisa saber é o seguinte
23

Minha solução é usar o comando debugger e / ou a mensagem de log nos pontos de interrupção.

insira a descrição da imagem aqui

E mude a saída do console de All Output para Debugger Output como

insira a descrição da imagem aqui

mrahmiao
fonte
14

Bem. Parece haver muita comoção sobre esse assunto, então darei a todos uma maneira de persistir sem usar esse truque de esquema. Abordarei o iOS Simulator especificamente, mas isso também pode ser necessário para o TV Sim, que está localizado em um diretório diferente.

O problema que está causando tudo isso são listas localizadas no diretório Xcode. Há um processo iniciado chamado configd_sim quando o Sim é iniciado, que lê as listas e imprime as informações de depuração, se as listas especificarem que devem ser registradas.

As listas estão localizadas aqui:

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

Se você está brincando com uma versão beta, observe que o diretório será diferente.

Você verá inúmeras listas neste diretório. Agora, crie e execute seu aplicativo e observe os logs. Você está procurando o conteúdo imediatamente seguido pelo subsistema: parte. É o nome imediatamente a seguir que representa a lista problemática correspondente.

insira a descrição da imagem aqui

A partir daí, modifique o plist para eliminar a chave / valor [Level] de depuração, que é um dicionário que contém o "Enable" => "Default" chave / valor ... ou simplesmente exclua o plist. Observe que você precisará ser root para executar uma dessas opções, pois elas estão localizadas no aplicativo Xcode.

o plutil -pcomando também pode ser útil para você. ie

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

Isso me deu um dos argumentos problemáticos que continham:

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

Boa sorte :]

Cometa de Sozin
fonte
Fiz um zip e excluí-o caso precise restaurar.
precisa saber é o seguinte
1
Descobri que isso não conseguiu silenciar muitos códigos de rede, provavelmente porque falta um nome de subsistema:2016-09-23 15:09:21.354686 ProductName[8823:191206][] tcp_connection_start 3 starting
BaseZen
@BaseZen Infelizmente, eu apenas resolvi a questão dos OPs que não continha nenhum problema de log de tcp. Você pode criar uma nova postagem de SO se precisar de ajuda para resolver esse problema.
Cometa de Sozin,
13

Isso está relacionado a um problema conhecido com o registro encontrado nas Notas da versão beta do Xcode 8 (também foi solicitado a um engenheiro da WWDC).

Ao depurar aplicativos WatchOS no simulador do Watch, o sistema operacional pode produzir uma quantidade excessiva de log inútil. (26652255)

No momento, não há uma solução alternativa disponível. Você deve aguardar uma nova versão do Xcode.

EDIT 7/5/16: supostamente foi corrigido a partir do Xcode 8 Beta 2:

Resolvido no Xcode 8 beta 2 - IDE

Depuração

  • Ao depurar um aplicativo no Simulador, os logs são visíveis. (26457535)

Notas da versão do Xcode 8 Beta 2

JAL
fonte
Pensei isso também, mas não estou usando um aplicativo watchOS nem um simulador de watchOS. Mas ainda pode acontecer com outros Sims também. Suspenda por enquanto e veja se um determinado Xcode 8 Beta o corrigirá nas próximas semanas / meses.
Hans Knöchel
O @HansKnoechel também não sou, mas posso confirmar que esse problema ocorre com qualquer aplicativo. Nenhuma palavra "oficial" da Apple além das notas de versão e algumas discussões na WWDC.
JAL
obrigado, mesmo aqui! Devemos falar sobre isso amanhã durante a WWDC, hehe :-)
Hans Knöchel
Também acontece no meu iPhone 5s Simulator, provavelmente em todos os simuladores.
SimplGy
Eu não poderia obter acesso ao link nesta resposta, apesar de ter sido assinado, mas este link funciona: adcdownload.apple.com/WWDC_2016/Xcode_8_beta/...
SimplGy
7

Isso não é mais um problema no xcode 8.1 (versão testada 8.1 beta (8T46g)) . Você pode remover oOS_ACTIVITY_MODE variável de ambiente do seu esquema.

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

Depuração

• O Console de depuração do Xcode não mostra mais o log extra das estruturas do sistema ao depurar aplicativos no Simulador. (26652255, 27331147)

mriddle89
fonte
20
Ainda estou recebendo muitos registros espúrios no 8.1. Soquete principalmente estranho e coisas de conexão TCP. Mais alguém, ou apenas eu?
Jordan Smith
3
Acabei de baixar o Xcode 8.1 hoje (31/10/2016) e ainda vejo alguns logs de depuração como este [MC] Reading from private effective user settings.em um novo projeto fictício em branco Arquivo> Novo> Projeto.
Zhang
4

No Xcode 10, a OS_ACTIVITY_MODEvariável com disable(ou default) valor também desliga, NSLognão importa o quê.

Portanto, se você quiser se livrar do ruído do console, mas não dos seus próprios logs, tente o bom e velho em printf("")vez do NSLog, pois ele não é afetado pelo OS_ACTIVITY_MODE=disable .

Mas é melhor conferir a nova os_logAPI aqui .

Jakub Truhlář
fonte
1

Esta solução está funcionando para mim:

  1. Execute o aplicativo no simulador
  2. Abra o log do sistema ( + /)

Isso irá despejar todos os dados de depuração e também os seus NSLogs.

Para filtrar apenas suas instruções NSLog:

  1. Prefixe cada um com um símbolo, por exemplo: NSLog(@"^ Test Log")
  2. Filtre os resultados usando a caixa de pesquisa no canto superior direito, "^" no caso acima

Isto é o que você deve obter:

Captura de tela do console

psobko
fonte