Ничего не печатается из 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
Ответы:
Возможно, вы добавили свойство «OS_ACTIVITY_MODE»: «disable» в переменные среды Scheme (чтобы скрыть вывод ОС из симулятора) и забыли об этом, и теперь работаете на реальном устройстве.
В Xcode 8:
Только добавляйте
OS_ACTIVITY_MODE
и проверяйте (не добавляйте значения)Резюме: это ошибка Xcode 8 + iOS10, мы можем решить ее следующим образом:
При использовании симулятора добавьте имя «OS_ACTIVITY_MODE» и значение «отключить» и проверьте его.
На реальном устройстве добавьте только «OS_ACTIVITY_MODE» и отметьте его (не добавляйте значение). Вы увидите NSLog в консоли Xcode8.
источник
disable
наdefault
.Если вы посмотрите примечания к выпуску бета-версии Xcode 8 , вы обнаружите, что там говорится:
источник
NSlog или print фактически выполняются, но скрыты среди множества других выводов отладки консоли, чтобы решить эту проблему. Откройте Xcode8:
добавьте «OS_ACTIVITY_MODE», установите значение «отключить» и проверьте его.
нажмите закрыть
xcode9
добавьте "OS_ACTIVITY_MODE", установите значение "default" и проверьте его.
источник
disable
наdefault
.Кроме того, убедитесь, что консоль действительно видна в Xcode (т.е. убедитесь, что значок с правой стороны выделен синим цветом, как показано на изображении ниже). После того, как я обновил Xcode, он скрыл консоль и показал мне только представление переменных. Это выглядело так, как будто
NSLog()
не работает должным образом, тогда как это действительно работало правильно, я просто не мог видеть результат.источник
Shift + ⌘ + C
Xcode версии 8.3.3Я тоже не вижу вывода NSLog на реальном устройстве iOS 10. Если вы используете реальные устройства, вы можете открыть окно «Устройства» из Xcode (Shift + Command + 2) и увидеть там журналы устройств, но просматривать журналы вашего приложения сложно, потому что консоль показывает журналы из системы и всех приложений.
(Я использую Xcode 7, поэтому это может не проблема Xcode, а проблема iOS 10)
источник
os_log
.Хммм ... похоже, что свойство «OS_ACTIVITY_MODE»: «disable» ПРЕДОТВРАЩАЕТ отображение NSlog в журнале Xcode 9.
Снятие отметки с этого значения в моей схеме восстановило мои журналы.
источник
Для всех, кто столкнется с этим в будущем. Причина, по которой NSLog не печатает в системный журнал в iOS 10 и iOS 11, связана с переходом Apple на унифицированное ведение журнала.
Вы можете увидеть, как 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>
источник
Я использую Xcode 8, поэтому столкнулся с той же проблемой. И я решил эту проблему, добавив
value = disable
симулятор, но на реальной машине я не добавляю ценности.источник
disable
наdefault
.OS_ACTIVITY_MODE
сdisable
илиdefault
напрямуюNSLog
сообщения больше не отображаются при обновлении до Xcode 9.1 + iOS 11.1. Первоначально принятый ответ дал мне возможность обойти это с помощью приложения Console и включения Simulator ( см. Ответ Лукаса ).В приложении «Консоль»
Action
я попытался выбратьInclude Debug Messages
и отменить выборInclude Info Messages
(чтобы консоль не забита системными сообщениями).NSLog
сообщения появлялись в окне консоли в Xcode, но не в приложении консоли.Я понял, что должен быть более прямой способ
disable
включения (т.е.default
)NSLogs
благодаря комментарию Кера в ответ на этот ответ. На мой взгляд, это лучший ответ, потому что настройкаOS_ACTIVITY_MODE
наdisable
илиdefault
будет иметь больше смысла для новичков.источник