ios - support - sysdiagnose apple




Ocultar logs Xcode estranhos e indesejados (8)

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?


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:

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


Encontre os passos abaixo.

  1. Selecione Produto => Esquema => Editar esquema ou use o atalho: CMD + <
  2. Selecione a opção Run no 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.


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á 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


Isso não é mais um problema no xcode 8.1 (versão testada 8.1 beta (8T46g)) . Você pode remover a variável de ambiente OS_ACTIVITY_MODE 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)


No Xcode 10, a variável OS_ACTIVITY_MODE com valor de disable (ou default ) também desativa o NSLog não importa o quê.

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

Mas é melhor conferir a nova API os_log here .


OS_ACTIVITY_MODE não funcionou para mim ( pode ter sido porque eu digitei como disable como disabled , mas isso não é mais natural?!?) Ou pelo menos não impedi muitas 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 como "NO" 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 ao NSLog o depósito de mensagens do sistema, erros e sua própria depuração: provavelmente é necessária uma abordagem de registro real de qualquer maneira, 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, o NSLog é apenas um calço:

https://developer.apple.com/library/content/releasenotes/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 o NSLog removido]

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

Tudo bem. Parece haver muita comoção sobre esse assunto, então darei a vocês uma maneira de persistir sem usar esse truque de esquema. Abordarei o iOS Simulator especificamente, mas também pode ser necessário aplicar 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.

A partir daí, modifique o plist para eliminar a chave / valor [Level] de depuração, que é um dicionário que contém a chave / valor "Enable" => "Default" ... 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 comando plutil -p 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 :]


Um tweet tinha a resposta para mim - tweet

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.





ios10