it-swarm.com.ru

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

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

Вот мой код:

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

Вот вывод на iOS 9 Simulator:

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

Вот вывод на iOS 10 Simulator:

hello from printf
80
Tyler Sheaffer

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

В Xcode 8: 

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

Только добавьте OS_ACTIVITY_MODE и отметьте его (Не добавлять значение)

 enter image description here

 enter image description here

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

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

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

221
user6833743

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

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

26
Lucas

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

14
Milad Masoodi

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

 enter image description here

6
smacdonald

Хммм ... похоже, что свойство "OS_ACTIVITY_MODE": "отключить" PREVENTS NSlog от отображения в журнале Xcode 9. 

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

5
David Hersey

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

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

5
kientux

Для тех, кто сталкивается с этим в будущем. Причина, по которой 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, который можно найти для VM в /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>

1
shane

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

1
user6733740

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

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

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

0
Greg