Скрыть странные нежелательные журналы Xcode


при использовании 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

может быть, кто-то уже нашел конфигурацию для этого, чтобы справиться?

11 605

11 ответов:

попробуйте это:

1-из меню Xcode открыть: продукт > схема > редактировать схему

2 - на переменные окружения set OS_ACTIVITY_MODE = disable

Screenshot

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

  1. В Разделе Продукт > Схема > Изменить Схему... > Run (Debug), установите переменную среды OS_ACTIVITY_MODE в ${DEBUG_ACTIVITY_MODE}, чтобы она выглядела так:

enter image description here

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

enter image description here

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/sessions/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 internals. Не знаю, почему они перекрываются. [Неверный комментарий о NSLog удалены]

[Edited 22 Sep]: интересно, что "release" и "stream" делают иначе, чем "debug". Недостаточно источник.

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;
    }
}

у твита был ответ для меня -https://twitter.com/rustyshelf/status/775505191160328194

чтобы остановить Xcode 8 iOS Simulator от ведения журнала, как сумасшедший, установите переменную окружения OS_ACTIVITY_MODE = disable в вашей схеме отладки.

Это сработало.

Это все еще не исправлено в Xcode версии 8.0 beta 2 (8S162m) для меня, и дополнительные журналы также появляются в консоли Xcode

** EDIT 8/1/16: это было подтверждено в примечания к выпуску для Xcode 8 Beta 4 (8S188o) как проблемы все еще сохраняются.

известные проблемы в Xcode 8 beta 4-IDE

отладка

• Xcode Debug Console показывает дополнительное ведение журнала из системы рамки для отладка приложений в симуляторе. (27331147, 26652255)

предположительно это будет разрешено выпуском GM. До тех пор терпение и хотя не идеально, но обходной путь я использую ниже...

аналогично предыдущему ответу я должен:

  • префиксом my печатать журналы с каким-то специальным символом (например, * или ^ или ! и т. д.)

  • затем используйте поле поиска внизу справа от панели консоли для фильтрации журналов консоли путем ввода выбранного специального символа, чтобы консоль отображала журналы печати по назначению

console

пожалуйста, найдите следующие шаги.

  1. выберите продукт = > схема = > редактировать схему или использовать ярлык:CMD + <
  2. выберите С левой стороны.
  3. в разделе Переменные среды, добавьте переменную OS_ACTIVITY_MODE = disable

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

Edit Scheme

мое решение-использовать команда отладчика и/или Log Message в точки останова.

enter image description here

и изменить вывод консоли от Вывод до Вывод Отладчика как

enter image description here

Это связано с известной проблемой с журналированием, найденным в Xcode 8 Beta Release Notes (также спросил инженер в WWDC).

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

в настоящее время нет обходного пути, вы должны ждать новой версии Xcode.

EDIT 7/5/16: это якобы исправлено с Xcode 8 Beta 2:

разрешен в Xcode 8 beta 2-IDE

отладка

  • при отладке приложения на симуляторе видны журналы. (26457535)

Xcode 8 Beta 2 Release Notes

хорошо. Там, кажется, много волнений по этому поводу, поэтому я дам вам способ сохранить его без использования этого трюка схемы. Я обращусь к симулятору iOS конкретно, но это также может потребоваться применить и для ТВ-Сима, который находится в другом каталоге.

проблема, которая вызывает все эти вещи являются plists, расположенные в каталоге Xcode. Есть процесс, который запускается под названием configd_sim когда Sim начинает это считывает списки plists и печатает отладочную информацию, если списки plists указывают, что они должны быть зарегистрированы.

plists расположены здесь:

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

если вы играете с бета-версией, обратите внимание, что dir будет отличаться.

вы увидите множество plists в этом каталоге. Теперь создайте и запустите приложение и наблюдайте за журналами. Вы ищете содержание сразу же после подсистемы: часть. Именно имя, непосредственно следующее за этим, представляет соответствующий проблемный plist.

enter image description here

оттуда либо измените plist, чтобы выбить ключ/значение отладки [Level], который является словарем, содержащим "Enable" => "Default" ключ/значение... или просто удалите plist. Обратите внимание, что вам нужно будет быть root, чтобы сделать любой из них, так как они расположены в приложении Xcode.

the 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

Это дало мне один из проблемных plists, который содержал:

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

удачи :]

Это больше не проблема в xcode 8.1 (тестируемая версия 8.1 beta (8T46g)). Вы можете удалить OS_ACTIVITY_MODE переменная окружения из вашей схемы.

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

отладка

• Xcode Debug Console больше не показывает дополнительное ведение журнала из системы фреймворки при отладке приложений в симуляторе. (26652255, 27331147)

Это решение работает для меня:

  1. запустите приложение в симуляторе
  2. откройте системный журнал ( + /)

это будет сбрасывать все отладочные данные, а также ваши NSLogs.

чтобы отфильтровать только ваши операторы NSLog:

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

вот что вы должны получить:

Screenshot of console