Приховати дивні небажані журнали Xcode


696

Під час використання Xcode 8+ та створення нового порожнього проекту під час запуску програми з'являються такі журнали:

2016-06-13 16:33:34.406093 TestiOS10[8209:100611] bundleid: com.appc.TestiOS10, enable_level: 0, persist_level: 0, propagate_with_activity: 0
2016-06-13 16:33:34.406323 TestiOS10[8209:100607] Created DB, header sequence number = 248
2016-06-13 16:33:34.409564 TestiOS10[8209:100611] subsystem: com.apple.UIKit, category: HIDEvents, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0
2016-06-13 16:33:34.504117 TestiOS10[8209:100607] Created DB, header sequence number = 248
2016-06-13 16:33:34.548023 TestiOS10[8209:100607] subsystem: com.apple.BaseBoard, category: MachPort, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0
2016-06-13 16:33:34.568458 TestiOS10[8209:100608] subsystem: com.apple.FrontBoard, category: Common, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0

Можливо, хтось уже знайшов конфігурацію для цього?


1
Здається, це просто налагодження реєстрації інформації, що залишилася від розробки. Розслідування ...
JAL

Ви відключили використання динамічного лінкера api в xcode?
Тея Нандамурі

Мені здається, що не працює в Xcode 8, це рішення працює лише для бета-версії Xcode 8.
Бадал Шах

У мене виникла ця проблема з Xcode 8.2.1 на El Capitan. Оновлення на macOS Sierra виправило проблему.
hwaxxer

Я все ще бачу проблему на Xcode 9.3, я подав Apple Bug # 34767176 (Xcode 9 відображає повідомлення про друк системних рамок), що є дублікатом відкритої помилки # 32256894 Будь ласка, надішліть дублікат помилки Apple: bugreport.apple.com/web
Пол Солт

Відповіді:


1508

Спробуйте це:

1- Відкрийте меню Xcode: Product> Scheme> Edit Scheme

2- На наборі змінних навколишнього середовища OS_ACTIVITY_MODE=disable

Знімок екрана


25
Він також працює на реліз Xcode 8.0, тому я вважаю, що це рішення.
nadein

27
Для тих, хто цікавиться, як потрапити на цей екран, вам потрібно перейти до продукту> Схема> Редагувати схему або Cmd + <
chrishale

46
@iDevzilla, Є певна проблема з цим рішенням, воно видаляє деякі важливі речі з журналу при використанні реального пристрою, як-от дані, що реєструються самостійно. Будь ласка, перегляньте її ще раз, я не впевнений, що це найбільш ідеальне рішення.
Itai Spector

104
На жаль, ця опція приховує всі NSLogреальні пристрої для мене ...
Дмитро Ісаєв

8
Проблема вдається лише в Simulator. Особисто я не вважаю, що це гарна ідея додати змінну оточуючого середовища, оскільки вона також приховує важливі журнали, такі як проблеми з обмеженнями макета, і серед інших, на прикладі @ AirXygène. У тренажері ви також можете натиснути кнопку "CMD + /", щоб відкрити консоль, вона дасть вам старомодні журнали. Сподіваємось, Apple вирішить цю проблему в Xcode, однак, існує велика зацікавленість у цьому, дивлячись на кількість оновлених результатів;)
Bocaxica

360

Спираючись на оригінальний твіт від @rustyshelf та ілюстровану відповідь від iDevzilla, ось рішення, яке заглушує шум від тренажера, не вимикаючи вихід NSLog з пристрою.

  1. У розділі Продукт> Схема> Редагувати схему ...> Запустити (налагодження) встановіть змінну середовища OS_ACTIVITY_MODE на $ {DEBUG_ACTIVITY_MODE}, щоб вона виглядала так:

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

  1. Перейдіть до налаштувань побудови свого проекту та натисніть +, щоб додати налаштування, визначене користувачем DEBUG_ACTIVITY_MODE. Розгорніть це налаштування та натисніть + поруч із Налагодження, щоб додати значення, яке залежить від платформи. Виберіть спадне меню та змініть його на "Будь-який симулятор iOS". Потім встановіть його значення "відключити", щоб воно виглядало так:

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


6
@NSNoob переконайтеся, що у змінній env немає місця.
sbarow

7
Шкода, що це не прийнята відповідь, і занадто погана ця відповідь втрачає підрахунок голосів. Набагато краще відповісти на IMHO, оскільки він лише відключив OS_ACTIVITY_MODE для побудови DEBUG на тренажері.
Swany

18
Це не спрацювало для мене, і жоден відповідь не відповідав. Використання Xcode 8.2.1 в OS X 10.11.6 El Capitan. Але те, що працювало, було поєднанням цієї відповіді та відповіді BaseZen, використовуючи OS_ACTIVITY_DT_MODE замість OS_ACTIVITY_MODE. (І несподівано для мене щонайменше і "НІ", і "відключити" вимкнули розгульний журнал.)
RenniePet

1
@RenniePet, саме це зробило для мене. Дякую!
Мішко

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

88

OS_ACTIVITY_MODE не працював для мене ( можливо, це було тому, що я написав, disableяк disabled, але хіба це не природніше?!?), Або, принаймні, не завадив значній кількості повідомлень. Тож ось справжня справа зі змінними середовища.

https://llvm.org/svn/llvm-project/lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp

lldb_private::Error
PlatformDarwin::LaunchProcess(lldb_private::ProcessLaunchInfo &launch_info) {
  // Starting in Fall 2016 OSes, NSLog messages only get mirrored to stderr
  // if the OS_ACTIVITY_DT_MODE environment variable is set.  (It doesn't
  // require any specific value; rather, it just needs to exist).
  // We will set it here as long as the IDE_DISABLED_OS_ACTIVITY_DT_MODE flag
  // is not set.  Xcode makes use of IDE_DISABLED_OS_ACTIVITY_DT_MODE to tell
  // LLDB *not* to muck with the OS_ACTIVITY_DT_MODE flag when they
  // specifically want it unset.
  const char *disable_env_var = "IDE_DISABLED_OS_ACTIVITY_DT_MODE";
  auto &env_vars = launch_info.GetEnvironmentEntries();
  if (!env_vars.ContainsEnvironmentVariable(disable_env_var)) {
    // We want to make sure that OS_ACTIVITY_DT_MODE is set so that
    // we get os_log and NSLog messages mirrored to the target process
    // stderr.
    if (!env_vars.ContainsEnvironmentVariable("OS_ACTIVITY_DT_MODE"))
      env_vars.AppendArgument(llvm::StringRef("OS_ACTIVITY_DT_MODE=enable"));
  }

  // Let our parent class do the real launching.
  return PlatformPOSIX::LaunchProcess(launch_info);
}

Так налаштування OS_ACTIVITY_DT_MODE значення "НІ" у змінних оточуючого середовища (метод GUI, пояснений на скріншоті в основному відповіді) змушує мене працювати.

Що стосується NSLogдемпінгу для системних повідомлень, помилок та вашої власної налагодження: напевно, потрібен справжній підхід до журналу, наприклад, https://github.com/fpillet/NSLogger .

АБО

Випийте нову Kool-Aid: http://asciiwwdc.com/2016/sesions/721 https://developer.apple.com/videos/play/wwdc2016/721/ Не дивно, що після капітального ремонту цілого зачаття API реєстрації.

ДОБАВЛЕННЯ

У будь-якому випадку, NSLog це просто примха:

https://developer.apple.com/library/content/releasenotes/Miscellaneous/RN-Foundation-OSX10.12/

NSLog / CFLog

NSLog тепер є просто прихильником os_log за більшості обставин.

Лише має сенс цитувати джерело для іншої змінної env. Досить розрізнене місце, на цей раз від Apple Apple. Не впевнений, чому вони перетинаються. [Неправильний коментар про NSLogвидалення]

[Відредаговано 22 вересня]: Цікаво, що "реліз" і "потік" роблять інакше, ніж "налагодження". Недостатнє джерело.

https://github.com/macosforge/libdispatch/blob/8e63547ea4e5abbfe55c0c3064181c4950a791d3/src/voucher.c

e = getenv("OS_ACTIVITY_MODE");
if (e) {
    if (strcmp(e, "release") == 0) {
        mode = voucher_activity_mode_release;
    } else if (strcmp(e, "debug") == 0) {
        mode = voucher_activity_mode_debug;
    } else if (strcmp(e, "stream") == 0) {
        mode = voucher_activity_mode_stream;
    } else if (strcmp(e, "disable") == 0) {
        mode = voucher_activity_mode_disable;
    }
}

11
Завжди приємно бачити відповідь, яка містить причини та передумови, а не лише швидке виправлення.
jscs

Опрацював цю відповідь, використовуючи OS_ACTIVITY_DT_MODE = НІ
Almas Adilbek

1
Це призводить до іншої поведінки, ніж OS_ACTIVITY_MODE = відключення? Чи є якась причина віддавати перевагу цьому рішенню?
n8gray

1
Це не. Це все приховує.
дурнозно

2
@Frizlab Так, я згадую обох у своєму дописі. Дивіться "АБО" ... os_logНеформально я називаю нову допомогу Kool.
BaseZen

64

Твіт мав відповідь для мене - https://twitter.com/rustyshelf/status/775505191160328194

Щоб увімкнути Xcode 8 iOS Simulator не вести журнал як божевільний, встановіть змінну середовища OS_ACTIVITY_MODE = відключити у вашій схемі налагодження.

Це спрацювало.


6
Як уже було сказано: OS_ACTIVITY_MODE = відключення деактивує всі інші журнали за допомогою NSLog.
дзенсик

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

34

Знайдіть наведені нижче кроки.

  1. Виберіть продукт => схема => редагувати схему або скористатися ярликом: CMD + <
  2. Виберіть Runваріант з лівого боку.
  3. У розділі змінних середовища додайте змінну OS_ACTIVITY_MODE = відключити

Для отримання додаткової інформації, будь ласка, знайдіть представлене нижче зображення GIF.

Редагувати схему


3
Почекайте .... На другому ходу це спрацювало. Кудо для Gif Video. Найкращі відповіді завжди внизу!
еоніст

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

33

Це все ще не встановлено у версії Xcode версії 8.0 бета-версія 2 (8S162m) для мене, а додаткові журнали також відображаються на консолі Xcode

** EDIT 8/1/16: Це було визнано у примітках до випуску для Xcode 8 Beta 4 (8S188o) як проблеми, які все ще зберігаються .

Відомі проблеми Xcode 8 beta 4 - IDE

Налагодження

• Консоль налагодження Xcode показує додатковий журнал із системних рамок під час налагодження програм у Симуляторі. (27331147, 26652255)

Імовірно, це вирішиться випуском GM. До цього терпіння, і хоча це не ідеально, але вирішення, яке я використовую, знаходиться нижче ...

Подібно до попередньої відповіді, яку я маю:

  • префікс моїх журналів друку з якимось спеціальним символом (наприклад, * або ^ або! тощо тощо)

  • Потім використовуйте поле пошуку в нижній правій частині панелі консолі для фільтрації моїх журналів консолі, ввівши вибраний спеціальний символ, щоб консоль відображала мої журнали друку за призначенням

консоль


1
@SimplyLearning ви знайдете цю інформацію в усьому Twitter. Але ви можете ознайомитись з цим офіційним веб-сайтом від apple: developer.apple.com/news або їх новин, щоб отримати оновлення під час їх публікації: developer.apple.com/news/rss/news.rss До речі: це все ще здається бути проблемою в Xcode Beta 3.
benrudhart

50
Щойно отримав Xcode 8 GM, і проблема все ще зберігається. Дуже дратує !!
АдамМ

8
Щойно завантажили Xcode версії 8.0 (8A218a) з App Store. Питання все ще існує.
Статік

4
Просто смішно. Все ще є у заключній версії MAS.
Шай Мішалі

1
Ми використовуємо тег-префікс для фільтрації. Деякі проблеми такі: кілька рядків показуватимуть лише перший. Використовуючи lldb для налагодження, вам потрібно переключити фільтрацію. Дійсно дуже сумно, що на сьогоднішній день консоль надзвичайно обмежена. У нас є додаток для гідної фільтрації, але нам потрібно скопіювати / вставити з консолі. Як сумно.
bauerMusic

23

Моє рішення - використовувати команду налагодження та / або Повідомлення журналу в точках прориву.

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

І змінити вихід консолі з усіх вихідних в Debugger Output як

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


14

Добре. Здається, що з цього приводу виникає велике занепокоєння, тож я дам вам змогу наполягати на цьому, не використовуючи цю хитрість схеми. Я спеціально звернусь до iOS Simulator, але це також може бути застосовано до телевізора Sim, який знаходиться в іншому режимі.

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

Плисти розташовані тут:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Preferences/Logging/Subsystems

Якщо ви граєте з бета-версією, врахуйте, що режисер буде іншим.

У цьому каталозі ви побачите численні списки. Тепер створити та запустити свою програму та спостерігати за журналами. Ви шукаєте вміст, за яким відразу слідує підсистема: частина. Саме назва, що безпосередньо слідує за цим, представляє відповідний проблемний список.

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

Звідти або модифікуйте пліст, щоб вибити налагоджувальну [Level] клавішу / значення, яка є словником, що містить "Enable" => "Default"ключ / значення ..., або просто видаліть пліст. Зауважте, що вам потрібно буде мати root, щоб зробити будь-яке з них, оскільки вони знаходяться в додатку Xcode.

plutil -pкоманда може бути корисна для вас. тобто

plutil -p /Applications/Xcode.app/Contents/Developer/Platforms/AppleTVSimulator.platform/Developer/SDKs/AppleTVSimulator.sdk/System/Library/Preferences/Logging/Subsystems/com.apple.BackBoardServices.fence.plist

Це дало мені один із проблемних списків, який містив:

{ "DEFAULT-OPTIONS" => { "Level" => { "Enable" => "Default" }}}

Удачі :]


Я застебнув, потім видалив, якщо мені потрібно відновити.
dandan78

1
Я виявив, що це не в змозі заглушити багато мережевого коду, ймовірно, тому, що йому не вистачає назви підсистеми:2016-09-23 15:09:21.354686 ProductName[8823:191206][] tcp_connection_start 3 starting
BaseZen

@BaseZen На жаль, я вирішив лише питання щодо ОП, яке не містило жодних проблем із реєстрацією tcp. Ви можете створити нову публікацію SO, якщо вам потрібна допомога щодо вирішення цієї проблеми.
Комета Созіна

13

Це пов’язано з відомою проблемою із веденням журналу, знайденим у примітках про бета-версію Xcode 8 (також запитував інженера в WWDC).

Під час налагодження програм WatchOS у симуляторі Watch, ОС може створити надмірну кількість недоброзичливого журналу. (26652255)

Наразі немає доступного рішення, потрібно дочекатися нової версії Xcode.

EDIT 7/5/16: Це, мабуть, виправлено станом на Xcode 8 Beta 2:

Розв’язаний у Xcode 8 beta 2 - IDE

Налагодження

  • Під час налагодження програми на Симуляторі видно журнали. (26457535)

Примітки до випуску Xcode 8 Beta 2


Я також вважав це, але я ні використовую програму watchOS, ні симулятор watchOS. Але це все одно може трапитися і з іншими симами. Перестаньте затримуватись зараз і побачите, чи буде виправлена ​​певна версія Xcode 8 Beta протягом наступних тижнів / місяців.
Ганс Кнохель

@HansKnoechel я також не є, але можу підтвердити, що ця проблема виникає з будь-якою програмою. Жодного офіційного слова від Apple, крім приміток до випуску та деяких обговорень на WWDC.
JAL

спасибі, тут же! Ми повинні поговорити про це завтра під час WWDC, hehe :-)
Ганс Кнохель

Також трапляється мій iPhone 5s Simulator, напевно, всі тренажери.
SimplGy

Я не зміг отримати доступ до посилання у цій відповіді, незважаючи на те, що увійшов, але це посилання працює: adcdownload.apple.com/WWDC_2016/Xcode_8_beta/…
SimplGy

7

Це вже не проблема в xcode 8.1 (перевірена версія 8.1 бета (8T46g)) . Ви можете видалити OS_ACTIVITY_MODEзмінну оточення зі своєї схеми.

https://developer.apple.com/go/?id=xcode-8.1-beta-rn

Налагодження

• Консоль налагодження Xcode більше не показує додатковий журнал із системних рамок під час налагодження програм у Симуляторі. (26652255, 27331147)


20
Я все ще отримую багато неправдивих записів 8.1. Переважно дивні речі з підключенням до гнізда та tcp. Хтось ще, чи тільки я?
Джордан Сміт

3
Я тільки що завантажив Xcode 8.1 сьогодні (31.10.2016) і все ще бачу деякі налагодження, такі як цей [MC] Reading from private effective user settings.файл, із пустого нового манекенного проекту File> New> Project.
Чжан

4

У Xcode 10OS_ACTIVITY_MODE змінна з disable(або defaultзначення) теж вимикає NSLogні на що.

Тож якщо ви хочете позбутися шуму консолі, але не власних журналів, ви можете спробувати старий добрий printf("")замість NSLog, оскільки на нього не впливає OS_ACTIVITY_MODE= disable.

Але краще ознайомтеся з новим os_logAPI тут .


1

Це рішення працює для мене:

  1. Запустіть додаток у тренажері
  2. Відкрити системний журнал ( + /)

Це скине всі дані про налагодження, а також ваші NSLogs.

Щоб фільтрувати лише ваші заяви NSLog:

  1. Префікс кожного із символів, наприклад: NSLog(@"^ Test Log")
  2. Фільтруйте результати, використовуючи поле пошуку вгорі праворуч, "^" у верхньому випадку

Ось що ви повинні отримати:

Знімок екрана консолі

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