Подтвердить что ты не робот

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

Ничего не печатается с NSLog на Xcode 8.0 beta (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 Simulator:

hello from printf
4b9b3361

Ответ 1

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

В Xcode 8:

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

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

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

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

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

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

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

Ответ 2

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

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

Ответ 3

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

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

добавьте "OS_ACTIVITY_MODE" и установите значение "отключить" и отметьте его.

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

xcode9

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

enter image description here enter image description here

Ответ 4

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

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

Ответ 5

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

enter image description here

Ответ 6

Хммм... похоже на свойство "OS_ACTIVITY_MODE": "disable" ПРЕДОТВРАЩАЕТ NSlog из отображения в журнале Xcode 9.

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

Ответ 7

Для всех, кто приходит на это в будущем. Причина, по которой NSLog не печатает в syslog в 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 или используйте log OSX util: log show <path to archive> --info --predicate <options>

Ответ 8

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

Ответ 9

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

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

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