iOS 10 не друкує журнали NSLogs


89

NSLogНа Xcode 8.0 beta (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

У мене була подібна проблема. Але в iOS 8.1, Xcode 8. Я перевірив кожну відповідь тут. Виявляється, я все робив правильно. Насправді нічого не допомогло. Отже, я вимкнув пристрій і ввімкнув його. Це працює. Я написав цей коментар тут, щоб він міг допомогти іншим, хто стикається з подібною проблемою
KrishnaCA

Відповіді:


229

Можливо, ви додали властивість "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.


4
> "Не додавати значення" Я встановив його "вимкнути", і воно працює! Порожнє поле для мене не працює.
m8labs

Ви впевнені, що це працює під час налагодження реального пристрою iphone, а не симулятора? Якщо я встановив його "вимкнути", консоль не зможе NSLog під час реальної налагодження iphone.
user6833743

Я перевірив зараз без "вимкнення", зараз він працює на пристрої, але зламаний на симуляторі, він знову все показує ...
m8labs

2
чи є спосіб для автоматизації цього процесу? це справді дуже дратує, що ми повинні пам'ятати, щоб рухатись туди-сюди так: /
теплиця

2
Це рішення приховає всі NSLog, починаючи з Xcode 9. Щоб зберегти NSLog, замініть disableна default.
Cœur

27

Якщо ви перевірите примітки до бета-версії Xcode 8 , ви побачите, що там написано:

Під час налагодження програми, що працює на Simulator, журнали можуть не відображатися на консолі. Вирішення: Використовуйте команду + / у Simulator.app, щоб відкрити системний журнал у програмі Console, щоб переглянути NSLogs. (26457535)


9
Я також не бачу вихід NSLog у реальному пристрої iOS 10. Якщо ви використовуєте реальні пристрої, ви можете відкрити вікно Пристрої (Shift + Command + 2) і побачити там журнали пристроїв, але важко переглянути журнал налагодження додатків, оскільки консоль відображає всі журнали з системи та програм.
kientux

19

NSlog або print фактично виконується, але прихований серед безлічі інших результатів налагодження консолі для вирішення цієї проблеми. Відкрийте Xcode8:

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

додати "OS_ACTIVITY_MODE" і встановити значення "вимкнути" і перевірити його.

натисніть закрити

xcode9

додати "OS_ACTIVITY_MODE" і встановити значення "за замовчуванням" і перевірити його.

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


Для мене це не працює. Журнали NSL не відображаються для розгорнутих програм. Я використовую xcode 8.1 (працює на Mac 10.11) з пристроєм iOS 10.
mobjug

22
Це рішення приховає всі NSLog, починаючи з Xcode 9. Щоб зберегти NSLog, замініть disableна default.
Cœur

3
Цю відповідь слід оновити, щоб врахувати виправлення @ Cœur для Xcode 9.
Джоель

8

Крім того, переконайтесь, що консоль насправді видно в Xcode (тобто, переконайтеся, що значок правої сторони виділено синім кольором, як показано на малюнку нижче). Після того, як я оновив Xcode, він сховав консоль і показав мені лише перегляд Змінні. З-за цього здавалося, що NSLog()він працює неправильно, тоді як він справді працює коректно, я просто не бачив вихідних даних.

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


Також можна активувати консоль з Shift + ⌘ + Cверсією Xcode 8.3.3
DJ2

який чудовий дизайн інтерфейсу @Apple, повно знайомих значків
Ornithopter

7

Я також не бачу вихід NSLog у реальному пристрої iOS 10. Якщо ви використовуєте реальні пристрої, ви можете відкрити вікно Пристрої з Xcode (Shift + Command + 2) і побачити там журнали пристроїв, але важко переглянути журнали вашого додатка, оскільки консоль відображає журнали із системи та всіх додатків.

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


Я не бачу NSLogs для мого додатка у вікні пристроїв під iOS 10 GM ... у вас така сама проблема?
TahoeWolverine

Я бачу журнали в Xcode 7 з iOS 10 GM, більше не потрібно відкривати вікно пристроїв.
kientux

2
Однак я не кажу про запуск із Xcode, а про журнали, які друкуються з розгорнутої програми.
TahoeWolverine

Якийсь прогрес у цьому?
jhurray

Журнали NSF та printf пропущені з входу пристрою iOS 10 у розгорнуті програми. Ви можете додати глобальний макрос, щоб замінити його викликом безпосередньо до os_log.
Еліст

6

Хм-м-м ... здається, властивість "OS_ACTIVITY_MODE": "вимкнути" ЗАБЕЗПЕЧАЄ появу журналу NS у журналі Xcode 9.

Зняття цього значення в моїй схемі відновило мої журнали.


6

Для кожного, хто зіткнеться з цим у майбутньому. Причина, по якій 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>


А як щодо iOS?
kakyo

1

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


1
у мене проблеми з Xcode 9. Я вставив аргумент: OS_ACTIVITY_MODE, але, здається, не працює ...
Алессіо Кампанеллі

4
Це рішення приховає всі NSLog, починаючи з Xcode 9. Щоб зберегти NSLog, замініть disableна default.
Cœur

На мій погляд, це правильна відповідь. OS_ACTIVITY_MODEз прямим disableабо defaultпрямим
Грег

1

NSLogповідомлення більше не відображаються під час оновлення до Xcode 9.1 + iOS 11.1. Спочатку прийнята відповідь дала мені спосіб обійти це за допомогою програми Console та увімкнення симулятора ( див. Відповідь Лукаса ).

У додатку Console у розділі Actionя спробував вибрати Include Debug Messagesта скасувати вибір Include Info Messages(так що консоль не заповнена системними повідомленнями). NSLogповідомлення з'явилися у вікні консолі в Xcode, але не в програмі консолі.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.