iOS 10 не печатает NSLogs

Ничего не печатается из NSLog в бета-версии Xcode 8.0 (8S128d). printf без изменений

Вот мой код:

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

Вот вывод на симуляторе iOS 9:

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

Вот вывод на симуляторе iOS 10:

hello from printf

person Tyler Sheaffer    schedule 17.06.2016    source источник
comment
У меня была аналогичная проблема. Но в iOS 8.1 Xcode 8. Я проверил здесь каждый ответ. Оказывается, я все делал правильно. Ничего особо не помогло. Итак, я выключил устройство и включил его. Оно работает. Я написал этот комментарий здесь, чтобы он мог помочь другим, столкнувшимся с подобной проблемой.   -  person KrishnaCA    schedule 06.03.2017


Ответы (9)


Возможно, вы добавили свойство «OS_ACTIVITY_MODE»: «отключить» в переменные окружения Scheme (чтобы скрыть вывод ОС из симулятора) и забыли об этом, а теперь запускаете на реальном устройстве.

В Xcode 8:

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

Добавьте только OS_ACTIVITY_MODE и проверьте его (не добавляйте значение)

введите здесь описание изображения

введите здесь описание изображения

Резюме: это ошибка Xcode 8 + iOS10, мы можем решить ее следующим образом:

  • При использовании симулятора добавьте имя «OS_ACTIVITY_MODE» и значение «отключить» и проверьте его.

  • На реальном устройстве добавьте только «OS_ACTIVITY_MODE» и проверьте его (не добавляйте значение). Вы увидите NSLog в консоли Xcode8.

person user6833743    schedule 15.09.2016
comment
›Не добавляйте значение, которое я отключил, и оно работает! Пустое поле у ​​меня не работает. - person m8labs; 16.09.2016
comment
Вы уверены, что это работает при отладке реального устройства iphone, а не симулятора? Если я отключу его, консоль не сможет NSLog при реальной отладке iphone. - person user6833743; 18.09.2016
comment
Я проверил сейчас без отключения, теперь он работает на устройстве, но сломался на симуляторе, теперь снова все показывает ... - person m8labs; 18.09.2016
comment
Ага, вот оно! Способ решения ошибки Xcode8 + iOS10: на сумматоре добавьте имя OS_ACTIVITY_MODE и отключите значение и проверьте его. На устройстве добавьте только OS_ACTIVITY_MODE и проверьте его (не добавляйте значение). Вы увидите NSLog в консоли Xcode8. - person user6833743; 19.09.2016
comment
Я только добавил OS_ACTIVITY_MODE и проверил его (не добавляйте значение). Он не будет печатать весь оператор NSLog в консоли Xcode8. Если я напечатаю NSArray из 100 записей, он отобразит некоторые записи, а затем сломается. - person ChandreshKanetiya; 12.10.2016
comment
Есть ли способ использовать разные переменные среды на основе архитектуры, чтобы я мог включить OS_ACTIVITY_MODE только на симуляторе? - person Toland Hon; 14.10.2016
comment
можно ли как-то автоматизировать этот процесс? это действительно очень раздражает, что мы должны помнить, чтобы идти вперед и назад, как это: / - person greenhouse; 02.11.2016
comment
У меня есть проект SDK, я поместил туда свой собственный журнал, он не работает на моем устройстве iOS10, но все еще работает на моем устройстве iOS9. Я использую тот же способ, чтобы изменить SDK и мое тестовое приложение SDK с этим отключением, которое все еще работает на моей стороне. Есть идеи? Благодарю. - person xiaoyaoworm; 07.01.2017
comment
просто комментарий, что если кому-то лень включать OS_ACTIVITY_MODE, то дамп будет выводить переменные независимо от значения OS_ACTIVITY_MODE. - person Max MacLeod; 20.06.2017
comment
Спасибо, сделал мой день! - person fruitcoder; 07.09.2017
comment
Установка OS_ACTIVITY_MODE на DEBUG_MODE гарантирует, что журналы видны только в режиме отладки. - person LazyLastBencher; 21.09.2017
comment
Это решение скроет все NSLog, начиная с Xcode 9. Чтобы сохранить NSLog, замените disable на default. - person Cœur; 27.09.2017

Если вы посмотрите примечания к выпуску бета-версии Xcode 8, вы обнаружите, что там сказано:

При отладке приложения, работающего в симуляторе, журналы могут не отображаться в консоли. Обходной путь: используйте команду + / в Simulator.app, чтобы открыть системный журнал в консольном приложении для просмотра NSLogs. (26457535)

person Lucas    schedule 17.06.2016
comment
Я также не вижу вывод NSLog на реальном устройстве iOS 10. Если вы используете настоящие устройства, вы можете открыть окно «Устройства» (Shift + Command + 2) и просмотреть там журналы устройств, но просмотреть журнал отладки приложения сложно, потому что в консоли отображаются все журналы из системы и приложений. - person kientux; 23.06.2016

NSlog или print на самом деле выполняются, но скрыты среди множества других выходных данных отладки консоли, чтобы решить эту проблему. Откройте Xcode8:

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

добавьте «OS_ACTIVITY_MODE», установите значение «отключить» и проверьте его.

нажмите закрыть

xcode9

добавьте «OS_ACTIVITY_MODE», установите значение «по умолчанию» и проверьте его.

введите описание изображения здесь введите здесь описание изображения

person MiladiuM    schedule 15.09.2016
comment
Это не работает для меня. NSLogs не отображаются для развернутых приложений. Я использую xcode 8.1 (работает на Mac 10.11) с устройством iOS 10. - person mobjug; 15.12.2016
comment
Это решение скроет все NSLog, начиная с Xcode 9. Чтобы сохранить NSLog, замените disable на default. - person Cœur; 27.09.2017
comment
Этот ответ следует обновить, чтобы учесть исправление @Cœur для Xcode 9. - person Joel; 07.11.2017

Кроме того, убедитесь, что консоль действительно видна в Xcode (т. е. убедитесь, что правый значок выделен синим цветом, как показано на изображении ниже). После того, как я обновил Xcode, он скрыл консоль и показал мне только представление переменных. Из-за этого казалось, что NSLog() не работает должным образом, тогда как он действительно работал правильно, я просто не мог видеть результат.

введите здесь описание изображения

person Stewart Macdonald    schedule 20.04.2017
comment
Также можно активировать консоль с помощью Shift + ⌘ + C Xcode версии 8.3.3. - person DJ2; 15.08.2017
comment
какой отличный дизайн пользовательского интерфейса @Apple, полный значков с неизвестным значением - person Ornithopter; 28.10.2020

Я также не вижу вывод NSLog на реальном устройстве iOS 10. Если вы используете настоящие устройства, вы можете открыть окно «Устройства» из Xcode (Shift + Command + 2) и просмотреть там журналы устройств, но просмотреть журналы вашего приложения сложно, потому что консоль показывает журналы из системы и всех приложений.

(Я использую Xcode 7, так что это может быть не проблема Xcode, а проблема iOS 10)

person kientux    schedule 23.06.2016
comment
Я не вижу NSLogs для своего приложения в окне устройств под iOS 10 GM... у вас такая же проблема? - person TahoeWolverine; 09.09.2016
comment
Я вижу журналы в Xcode 7 с iOS 10 GM, больше не нужно открывать окно устройств. - person kientux; 09.09.2016
comment
Я не говорю о запуске из Xcode, я говорю о журналах, распечатываемых из развернутого приложения. - person TahoeWolverine; 13.09.2016
comment
Есть ли прогресс в этом? - person jhurray; 07.10.2016
comment
NSLogs и printf исключены из журнала устройств iOS 10 в развернутых приложениях. Вы можете добавить глобальный макрос, чтобы заменить его вызовом непосредственно os_log. - person Elist; 27.10.2016

Для тех, кто столкнется с этим в будущем. Причина, по которой NSLog не печатает в системный журнал в iOS 10 и iOS 11, связана с переходом Apple на Unified Logging.

Вы можете увидеть обсуждение WWDC здесь: https://developer.apple.com/videos/play/wwdc2016/721/

Документация здесь: https://developer.apple.com/documentation/os/logging

Начиная с 10 вы должны использовать os_log вместо NSLog.

Как найти журналы на диске: https://www.blackbagtech.com/blog/2017/09/22/accessing-unified-logs-image/

Подводя итог, журналы расположены в /var/db/diagnostics, который можно найти для виртуальной машины по адресу /Users/USERNAME/Library/Developer/CoreSimulator/Devices/SIMULATOR-GUID/data/var/db/.

Скопируйте все элементы внутри diagnostics и uuidtext в одну папку (не включайте диагностику папок или uuidtext только то, что внутри).

Переименуйте эту папку foldername.xarchive.

Откройте его в Console.app или используйте утилиту OSX log: log show <path to archive> --info --predicate <options>

person shane    schedule 03.03.2018
comment
А на iOS? - person kakyo; 15.11.2019

Хммм ... похоже, что свойство «OS_ACTIVITY_MODE»: «отключить» ПРЕДОТВРАЩАЕТ отображение NSlog в журнале Xcode 9.

Снятие отметки с этого значения в моей схеме восстановило мои журналы.

person David Hersey    schedule 03.10.2017

Я использую Xcode 8, поэтому столкнулся с той же проблемой. И я решил эту проблему, добавив value = disable на симуляторе, но на реальной машине я не добавляю значения.

person user6733740    schedule 23.09.2016
comment
у меня проблемы с Xcode 9. я вставил аргумент: OS_ACTIVITY_MODE, но, похоже, не работает... - person Alessio Campanelli; 20.09.2017
comment
Это решение скроет все NSLog, начиная с Xcode 9. Чтобы сохранить NSLog, замените disable на default. - person Cœur; 27.09.2017
comment
На мой взгляд, это правильный ответ. OS_ACTIVITY_MODE с disable или default является прямым - person Greg; 25.03.2018

Сообщения NSLog больше не отображаются при обновлении до Xcode 9.1 + iOS 11.1. Первоначально принятый ответ дал мне способ обойти это с помощью консольного приложения и включения симулятора (см. ответ Лукаса).

В консольном приложении под Action я попытался выбрать Include Debug Messages и отменить выбор Include Info Messages (чтобы консоль не была завалена системными сообщениями). Сообщения NSLog появились в окне консоли в Xcode, но не в приложении консоли.

Я понял, что должен быть более прямой способ disable или включить (т.е. default) NSLogs благодаря комментарию Кера в ответ на этот ответ. На мой взгляд, это лучший ответ, потому что установка OS_ACTIVITY_MODE на disable или default будет иметь больше смысла для начинающих.

person Greg    schedule 05.11.2017