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

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

Ответы (14)

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

1 - Из Меню Xcode открыть: Продукт> Схема> Редактировать схему

2 - В ваших переменных среды установить OS_ACTIVITY_MODE = отключить

Screenshot

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

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

Отладка

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

Выполните следующие действия.

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

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

Edit Scheme

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

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

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

РЕДАКТИРОВАТЬ 7/5/16: Это предположительно исправлено с Xcode 8 Beta 2:

Решено в Xcode 8 beta 2 - IDE

Отладка

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

Примечания к выпуску Xcode 8 Beta 2

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

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

enter image description here

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

enter image description here

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

** РЕДАКТИРОВАТЬ 1/8/16: Это было признано в примечаниях к выпуску для Xcode 8 Beta 4 (8S188o), поскольку проблемы все еще сохраняются.

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

Отладка

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

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

Как и в предыдущем ответе, мне нужно:

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

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

console

This solution has been working for me:

  1. Run the app in the simulator
  2. Open the system log ( + /)

This will dump out all of the debug data and also your NSLogs.

To filter just your NSLog statements:

  1. Prefix each with a symbol, for example: NSLog(@"^ Test Log")
  2. Filter the results using the search box on the top right, "^" in the case above

This is what you should get:

Screenshot of console

Мое решение - использовать команду отладчика и / или Сообщение журнала в точках останова.

enter image description here

И измените вывод консоли с All Output на Debugger Output как

enter image description here

Alright. There seems to be a lot of commotion about this one, so I'll give y'all a way to persist it without using that scheme trick. I'll address the iOS Simulator specifically, but this also might need to be applied for the TV Sim as well which is located in a different dir.

The problem that is causing all of this stuff are plists located within the Xcode directory. There is a process that gets launched called configd_sim when the Sim starts that reads the plists in and prints debugging information if the plists specify they should be logged.

The plists are located here:

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

If you are playing around with a beta, take note that the dir will be different.

You will see numerous plists in this directory. Now, build and run your application and observe the logs. You are looking for the content immediately followed by the subsystem: part. It is the name immediately following this that represents the corresponding problematic plist.

enter image description here

From there, either modify the plist to knock out the debugging [Level] key/value which is a dictionary containing the "Enable" => "Default" key/value... or just simply delete the plist. Note, that you will need to be root to do either of these since they're located in the Xcode application.

the plutil -p command might be of use to you as well. i.e.

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

This gave me one of the problematic plists which contained:

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

Good luck :]

OS_ACTIVITY_MODE у меня не сработало (это могло быть, потому что я опечатал disable as 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 на «NO» в переменных среды (метод графического интерфейса, описанный на скриншоте схем в основном ответе) заставляет меня работать.

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

[отредактировано 22 сентября]: Интересно, что «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;
    }
}

В Xcode 10 переменная OS_ACTIVITY_MODE со значением disable (или по умолчанию) также отключает NSLog не важно что.

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

Но лучше ознакомьтесь с новым os_log API здесь.

Я прочитал все решения, пока ничего не работает, я использую XCODE 12.5 на момент написания этого ответа, это самая неприятная вещь, которую можно увидеть в отладчике с такой кучей / потоком нежелательных сообщений.

Решение, которое я сделал, было намного проще, чем самые сложные из существующих, вот что я сделал, чтобы решить эту досадную проблему:

  1. Нет необходимости использовать какие-либо переменные среды и т. Д., Иначе их использование, как было предложено в предыдущих сообщениях, отключило бы вывод NSLOG, который вам не нужен в таком случае.

  2. Я убедился, что весь мой NSLOG будет содержать строку, которую я буду отслеживать позже, например:

Раньше делал:

NSLog(@"Hello World");

Теперь я:

NSLog(@"[Admin]: Hello World");

В то время как «[Admin]» - это имя моей программы (или любая другая строка, которая вам нравится, кроме [Admin] »

  1. (необязательный шаг) или (проще), я написал функцию для направления (ну, прокси) NSLog в другую глобальную функцию «Журнал», тогда как все мои зарегистрированные пойдут на эту функцию, а затем функция журнала будет добавьте строку «[Admin]» к исходной строке журнала, а также добавьте время ведения журнала и другие необходимые мне элементы и т. д. (аналогично WebLogic или любому другому ведению журнала JAVA), чтобы гарантировать, что все журналы будут соответствовать одному стандарту.

  2. ... Вот ядерное оружие за миллион долларов:

Теперь войдите в окно отладчика, внизу вы увидите окно «поиска», в котором написано «Фильтр», введите строку (пример; «[Admin]»), нажмите ENTER, и работа выполнена.

Таким образом, вы будете видеть только те строки, которые вам нравятся,

enter image description here

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

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

Надеюсь, всем хорошего дня.

Ч

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

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

Сработало.

Обратите внимание, что для симулятора iOS 14 OS_ACTIVITY_MODE = disable не будет отображать никакие журналы с использованием нового Swift Logger. Вам придется удалить или включить его.

2022 WebDevInsider