Ответ 1
Попробуйте следующее:
1- Из меню Xcode open: Product > Scheme > Edit Scheme
2- На ваших переменных окружения OS_ACTIVITY_MODE
= disable
При использовании 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- Из меню Xcode open: Product > Scheme > Edit Scheme
2- На ваших переменных окружения OS_ACTIVITY_MODE
= disable
Основываясь на оригинальном чириканье от @rustyshelf и проиллюстрированном ответе от iDevzilla, вот решение, которое подавляет шум от симулятора без отключения NSLog вывода с устройства.
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". Недостаточно источника.
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 от входа в систему, как сумасшедший, установите переменную среды OS_ACTIVITY_MODE = отключите в своей схеме отладки.
Это сработало.
Это все еще не исправлено в 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. До тех пор терпение и хотя не идеальное, но обходное решение, которое я использую, ниже...
Как и в предыдущем ответе, мне нужно:
префикс моих журналов печати с помощью специального символа (например, * или ^ или! и т.д.)
Затем используйте окно поиска в правом нижнем углу панели консоли, чтобы отфильтровать мои консольные журналы, введя мой выбранный специальный символ, чтобы консоль отображала мои журналы печати, как предполагалось.
Прочтите следующие шаги.
CMD + <
Run
с левой стороны.Для получения дополнительной информации см. ниже представление GIF.
Мое решение состоит в использовании команды отладки и/или журнала сообщений в точках останова.
И измените вывод консоли с Все выходные на Выход отладчика, например
Это связано с известной проблемой с регистрацией, найденной в Примечаниях к выпуску бета-версии Xcode 8 (также спросил инженер в WWDC).
При отладке приложений WatchOS в симуляторе Watch операционная система может создавать чрезмерное количество бесполезных журналов. (26652255)
В настоящее время нет доступного обходного пути, вы должны дождаться новой версии Xcode.
РЕДАКТИРОВАТЬ 7/5/16: Это предположительно исправлено с Xcode 8 Beta 2:
Решено в Xcode 8 beta 2 - IDE
отладка
- При отладке приложения в симуляторе, журналы видны. (26457535)
Хорошо. Кажется, у него много волнений, поэтому я дам вам возможность сохранить его, не используя эту схему. Я обращусь к 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" }}}
Удачи:]
Это больше не проблема в 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)
Это решение работает для меня:
⌘
+ /
)Это приведет к выгрузке всех отладочных данных, а также ваших NSLogs.
Чтобы отфильтровать только ваши инструкции NSLog:
NSLog(@"^ Test Log")
Это то, что вы должны получить:
В Xcode 10 переменная OS_ACTIVITY_MODE
со значением disable
(или default
) также отключает NSLog
несмотря ни на что.
Поэтому, если вы хотите избавиться от шума консоли, но не от собственных журналов, вы можете попробовать старый добрый printf("")
вместо NSLog, так как на него не влияет OS_ACTIVITY_MODE
= disable
.
Но лучше ознакомьтесь с новым API os_log
здесь.