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
Ответы
Ответ 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]()
Ответ 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
будет иметь больше смысла для новичков.