iOS 10 não imprime NSLogs


88

Nada é impresso NSLogno Xcode 8.0 beta (8S128d). printfestá inalterado

Este é meu código:

NSLog(@"hello from NSLog");
printf("hello from printf");

Aqui está o resultado do simulador iOS 9:

2016-06-17 09:49:10.887 calmapp-dev[28517:567025] hello from NSLog
hello from printf

Aqui está o resultado do simulador iOS 10:

hello from printf

Eu tive uma questão semelhante. Mas no iOS 8.1, Xcode 8. Eu verifiquei cada uma das respostas aqui. Acontece que eu estava fazendo tudo corretamente. Nada ajudou muito. Então, desliguei o aparelho e liguei. Funciona. Escrevi este comentário aqui para que possa ajudar outras pessoas que enfrentam um problema semelhante
KrishnaCA

Respostas:


229

Pode ser que você tenha adicionado a propriedade "OS_ACTIVITY_MODE": "disable" nas variáveis ​​de ambiente do Scheme (para ocultar a saída do sistema operacional do simulador) e se esqueceu dela, e agora está executando em um dispositivo real.

No Xcode 8:

Product -> Scheme -> Edit Scheme -> Run -> Arguments -> Environment Variables

Apenas adicione OS_ACTIVITY_MODEe marque (Não adicione um valor)

insira a descrição da imagem aqui

insira a descrição da imagem aqui

Resumo: Este é um bug do Xcode 8 + iOS10, podemos resolvê-lo desta forma:

  • Ao usar o simulador, adicione o Nome "OS_ACTIVITY_MODE" e o Valor "desabilitar" e marque-o.

  • Quando em um dispositivo real, apenas adicione "OS_ACTIVITY_MODE" e marque (Não adicione o valor). Você verá o NSLog no console Xcode8.


4
> "Não adicione o valor" Eu defino para "desabilitar" e funciona! O campo vazio não funciona para mim.
m8labs de

Tem certeza de que funciona durante a depuração de um dispositivo iphone real, não no simulador? Se eu configurá-lo para "desativar", o console não pode fazer o NSLog durante a depuração real do iphone.
user6833743

Eu verifiquei agora sem "desabilitar", ele funciona no dispositivo agora, mas quebrado no simulador, ele mostra tudo agora de novo ...
m8labs

2
existe alguma maneira de automatizar este processo? é realmente muito irritante termos que nos lembrar de ir e voltar assim: /
estufa

2
Esta solução irá ocultar todo o NSLog começando com Xcode 9. Para manter o NSLog, substitua disablepor default.
Cœur

27

Se você verificar as notas de lançamento do Xcode 8 beta , verá que diz:

Ao depurar um aplicativo em execução no Simulador, os registros podem não ser visíveis no console. Solução alternativa: use command + / em Simulator.app para abrir o log do sistema no aplicativo Console para visualizar NSLogs. (26457535)


9
Também não consigo ver a saída NSLog no dispositivo iOS 10 real. Se estiver usando dispositivos reais, você pode abrir a janela Dispositivos (Shift + Command + 2) e ver os logs do dispositivo lá, mas é difícil olhar o log do aplicativo de depuração porque o console mostra todos os logs do sistema e dos aplicativos.
kientux

19

o NSlog ou print realmente é executado, mas está oculto entre muitas outras saídas de depuração do console para resolver esse problema. Abra o Xcode8:

Product -> Scheme -> Edit Scheme -> Run -> Arguments -> Environment Variables

adicione "OS_ACTIVITY_MODE" e defina o valor para "desativar" e verifique-o.

clique em fechar

xcode9

adicione "OS_ACTIVITY_MODE" e defina o valor como "padrão" e verifique-o.

insira a descrição da imagem aqui insira a descrição da imagem aqui


Isso não funciona para mim. NSLogs não aparecem para aplicativos implantados. Eu uso o xcode 8.1 (rodando no Mac 10.11) com o dispositivo iOS 10.
mobjug de

21
Esta solução irá ocultar todo o NSLog começando com Xcode 9. Para manter o NSLog, substitua disablepor default.
Cœur

3
Esta resposta deve ser atualizada para levar em conta a correção de @Cœur para o Xcode 9.
Joel

7

Também não consigo ver a saída NSLog no dispositivo iOS 10 real. Se estiver usando dispositivos reais, você pode abrir a janela Dispositivos do Xcode (Shift + Command + 2) e ver os registros do dispositivo lá, mas é difícil olhar os registros do seu aplicativo porque o console mostra os registros do sistema e de todos os aplicativos.

(Estou usando o Xcode 7, então pode não ser um problema do Xcode, mas sim do iOS 10)


Não estou vendo os NSLogs do meu aplicativo na janela de dispositivos no iOS 10 GM ... você está tendo o mesmo problema?
TahoeWolverine,

Posso ver os logs no Xcode 7 com iOS 10 GM, não preciso mais abrir a janela de dispositivos.
kientux,

2
Não estou falando sobre a execução do Xcode, no entanto, estou falando sobre os logs sendo impressos a partir de um aplicativo implantado.
TahoeWolverine

Algum progresso nisso?
jhurray

NSLogs e printf's são omitidos do log do dispositivo iOS 10 em aplicativos implantados. Você pode adicionar uma macro global para substituí-la por uma chamada diretamente para os_log.
Elist

7

Além disso, certifique-se de que o console esteja realmente visível no Xcode (ou seja, certifique-se de que o ícone do lado direito esteja destacado em azul, conforme a imagem abaixo). Depois de atualizar o Xcode, ele escondeu o console e me mostrou apenas a visualização Variáveis. Isso fez com que parecesse que NSLog()não estava funcionando corretamente, embora estivesse funcionando corretamente, eu simplesmente não conseguia ver a saída.

insira a descrição da imagem aqui


Também pode ativar o console com Shift + ⌘ + CXcode versão 8.3.3
DJ2

5

Hmmm ... parece que a propriedade "OS_ACTIVITY_MODE": "disable" IMPEDE que o NSlog apareça no log do Xcode 9.

Desmarcar este valor em meu esquema restaurou meus logs.


5

Para qualquer um que vier a fazer isso no futuro. O motivo pelo qual o NSLog não imprime no syslog no iOS 10 e iOS 11 é devido à mudança da Apple para o registro unificado.

Você pode ver o WWDC falar sobre isso aqui: https://developer.apple.com/videos/play/wwdc2016/721/

Documentação aqui: https://developer.apple.com/documentation/os/logging

De 10 em diante, você deve usar os_log em vez de NSLog.

Como localizar os logs no disco: https://www.blackbagtech.com/blog/2017/09/22/accessing-unified-logs-image/

Para resumir, os logs estão localizados nos /var/db/diagnosticsquais podem ser encontrados para uma VM em/Users/USERNAME/Library/Developer/CoreSimulator/Devices/SIMULATOR-GUID/data/var/db/

Copie todos os itens dentro diagnosticse uuidtextem uma única pasta (não inclua as pastas diagnósticos ou uuidtext apenas o que está dentro).

Renomeie essa pasta foldername.xarchive.

Abra-o em Console.app ou use o utilitário OSX log:log show <path to archive> --info --predicate <options>


E no iOS?
kakyo de

1

Estou usando o Xcode 8, então também encontrei o mesmo problema. E resolvi esse problema adicionando value = disableo simulador, mas em uma máquina real eu não agrego valor.


1
estou tendo alguns problemas com o Xcode 9. Eu inseri o argumento: OS_ACTIVITY_MODE, mas parece que não funciona ...
Alessio Campanelli

4
Esta solução irá ocultar todo o NSLog começando com Xcode 9. Para manter o NSLog, substitua disablepor default.
Cœur

Em minha opinião, esta é a resposta correta. OS_ACTIVITY_MODEcom disableou defaulté direto
Greg

1

NSLogmensagens não são mais exibidas quando eu atualizei para o Xcode 9.1 + iOS 11.1. Inicialmente, a resposta aceita me deu uma maneira de contornar isso usando o aplicativo Console e habilitando o Simulador ( veja a resposta de Lucas ).

No aplicativo Console em ActionEu tentei selecionar Include Debug Messagese desmarcar Include Info Messages(para que o Console não seja inundado com mensagens do sistema). NSLogas mensagens apareceram na janela do console no Xcode, mas não no aplicativo do console.

Percebi que deveria haver uma maneira mais direta de disableou habilitar (isto é default) NSLogsgraças ao comentário de Coeur em resposta a essa resposta. Na minha opinião é a melhor resposta porque configurar OS_ACTIVITY_MODEpara disableou defaultfará mais sentido para iniciantes.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.