Подтвердить что ты не робот

Скрыть странные нежелательные журналы 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

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

4b9b3361

Ответ 1

Попробуйте следующее:

1- Из меню Xcode open: Product > Scheme > Edit Scheme

2- На ваших переменных окружения OS_ACTIVITY_MODE= disable

Снимок экрана

Ответ 2

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

  • В разделе Product > Scheme > Edit Scheme... > Run (Debug) установите переменную среды OS_ACTIVITY_MODE в значение ${DEBUG_ACTIVITY_MODE}, чтобы она выглядела следующим образом:

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

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

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

Ответ 3

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

[Отредактировано 22 сен]: Интересно, что "релиз" и "поток" работают иначе, чем "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;
    }
}

Ответ 4

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

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

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

Ответ 5

Это все еще не исправлено в Xcode Version 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. До тех пор терпение и хотя не идеальное, но обходное решение, которое я использую, ниже...

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

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

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

console

Ответ 6

Прочтите следующие шаги.

  • Выберите Product = > Scheme = > Edit Scheme или используйте ярлык: CMD + <
  • Выберите параметр Run с левой стороны.
  • В разделе "Переменные среды" добавьте переменную OS_ACTIVITY_MODE = отключить

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

Изменить схему

Ответ 7

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

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

И измените вывод консоли с Все выходные на Выход отладчика, например

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

Ответ 8

Это связано с известной проблемой с регистрацией, найденной в Примечаниях к выпуску бета-версии Xcode 8 (также спросил инженер в WWDC).

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

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

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

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

отладка

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

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

Ответ 9

Хорошо. Кажется, у него много волнений, поэтому я дам вам возможность сохранить его, не используя эту схему. Я обращусь к iOS Simulator специально, но это, возможно, также потребуется применить и к телевизору Sim, который находится в другом каталоге.

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

Плиты расположены здесь:

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

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

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

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

Оттуда либо измените plist, чтобы выбить отладочную клавишу [Level]/значение, которая является словарем, содержащим ключ/значение "Enable" => "Default"... или просто удалите plist. Обратите внимание, что вам нужно будет сделать 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" }}}

Удачи:]

Ответ 10

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

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

отладка

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

Ответ 11

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

  • Запустите приложение в симуляторе
  • Откройте системный журнал ( + /)

Это приведет к выгрузке всех отладочных данных, а также ваших NSLogs.

Чтобы отфильтровать только ваши инструкции NSLog:

  • Префикс с символом, например: NSLog(@"^ Test Log")
  • Отфильтруйте результаты, используя окно поиска в правом верхнем углу, "^" в приведенном выше примере

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

Снимок экрана с консоли

Ответ 12

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

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

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