Скрыть странные нежелательные журналы 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 ответов:
здание на оригинале Твитнуть от @rustyshelf и иллюстрированный ответ от iDevzilla, вот решение, которое заглушает шум от симулятора, не отключая выход NSLog с устройства.
- В Разделе Продукт > Схема > Изменить Схему... > Run (Debug), установите переменную среды OS_ACTIVITY_MODE в ${DEBUG_ACTIVITY_MODE}, чтобы она выглядела так:
- перейти к вашему проекту создайте параметры и нажмите кнопку+, чтобы добавить пользовательский параметр с именем DEBUG_ACTIVITY_MODE. Разверните этот параметр и нажмите кнопку + рядом с пунктом отладка, чтобы добавить значение для конкретной платформы. Выберите выпадающий список и измените его на "любой симулятор iOS". Затем установите его значение "отключить", так что это выглядит так:
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". Недостаточно источник.
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 печатать журналы с каким-то специальным символом (например, * или ^ или ! и т. д.)
затем используйте поле поиска внизу справа от панели консоли для фильтрации журналов консоли путем ввода выбранного специального символа, чтобы консоль отображала журналы печати по назначению
пожалуйста, найдите следующие шаги.
- выберите продукт = > схема = > редактировать схему или использовать ярлык:
CMD + <
- выберите С левой стороны.
- в разделе Переменные среды, добавьте переменную OS_ACTIVITY_MODE = disable
для получения дополнительной информации, пожалуйста, найдите ниже GIF представление.
Это связано с известной проблемой с журналированием, найденным в Xcode 8 Beta Release Notes (также спросил инженер в WWDC).
при отладке приложений WatchOS в симуляторе часов ОС может привести к чрезмерному количество бесполезного ведения журнала. (26652255)
в настоящее время нет обходного пути, вы должны ждать новой версии Xcode.
EDIT 7/5/16: это якобы исправлено с Xcode 8 Beta 2:
разрешен в Xcode 8 beta 2-IDE
отладка
- при отладке приложения на симуляторе видны журналы. (26457535)
хорошо. Там, кажется, много волнений по этому поводу, поэтому я дам вам способ сохранить его без использования этого трюка схемы. Я обращусь к симулятору 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.
оттуда либо измените 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)
Это решение работает для меня:
- запустите приложение в симуляторе
- откройте системный журнал (
⌘
+/
)это будет сбрасывать все отладочные данные, а также ваши NSLogs.
чтобы отфильтровать только ваши операторы NSLog:
- префикс каждый с символом, например:
NSLog(@"^ Test Log")
- фильтрация результатов с помощью поля поиска в правом верхнем углу, " ^ " в случае выше
вот что вы должны получить: