Hide strange unwanted Xcode logs

When using the Xcode 8+ and creating a new blank project, the following logs appear when running the application:

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

Maybe someone already found a configuration for this to handle?

  • Xcode 8 extension executing NSTask
  • Xcode crashing on a specific project
  • Unarchived Node doesn't appear when added to parent in SpriteKit
  • add Shadow on UIView using swift 3
  • Xcode 8 recommend me to change the min iOS Deployment Target from 7.1 to 8.0
  • Tableviewcell button
  • 11 Solutions Collect From Internet About “Hide strange unwanted Xcode logs”

    Try this:

    1- From Xcode menu open: Product > Scheme > Edit Scheme

    2- On your Environment Variables set OS_ACTIVITY_MODE = disable

    Screenshot

    Building on the original tweet from @rustyshelf, and illustrated answer from iDevzilla, here’s a solution that silences the noise from the simulator without disabling NSLog output from the device.

    1. Under Product > Scheme > Edit Scheme… > Run (Debug), set the OS_ACTIVITY_MODE environment variable to ${DEBUG_ACTIVITY_MODE} so it looks like this:

    enter image description here

    1. Go to your project build settings, and click + to add a User-Defined Setting named DEBUG_ACTIVITY_MODE. Expand this setting and Click the + next to Debug to add a platform-specific value. Select the dropdown and change it to “Any iOS Simulator”. Then set its value to “disable” so it looks like this:

    enter image description here

    A tweet had the answer for me – https://twitter.com/rustyshelf/status/775505191160328194

    To stop the Xcode 8 iOS Simulator from logging like crazy, set an environment variable OS_ACTIVITY_MODE = disable in your debug scheme.

    It worked.

    OS_ACTIVITY_MODE didn’t work for me (it may have been because I typo’d disable as disabled, but isn’t that more natural?!?), or at least didn’t prevent a great deal of messages. So here’s the real deal with the environment variables.

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

    So setting OS_ACTIVITY_DT_MODE to “NO” in the environment variables (GUI method explained in Schemes screenshot in main answer) makes it work for me.

    As far as NSLog being the dumping ground for system messages, errors, and your own debugging: a real logging approach is probably called for anyway, e.g. https://github.com/fpillet/NSLogger .

    OR

    Drink the new Kool-Aid: http://asciiwwdc.com/2016/sessions/721 https://developer.apple.com/videos/play/wwdc2016/721/
    It’s not surprising that there are some hitches after overhauling the entire logging API.

    ADDENDUM

    Anyway, NSLog is just a shim:

    https://developer.apple.com/library/content/releasenotes/Miscellaneous/RN-Foundation-OSX10.12/

    NSLog / CFLog

    NSLog is now just a shim to os_log in most circumstances.

    Only makes sense now to quote the source for the other env variable. Quite a disparate place, this time from Apple internals. Not sure why they are overlapping. [Incorrect comment about NSLog removed]

    [Edited 22 Sep]: I wonder what “release” and “stream” do differently than “debug”. Not enough source.

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

    This is still not fixed in Xcode Version 8.0 beta 2 (8S162m) for me and extra logs are also appearing in the Xcode console

    ** EDIT 8/1/16: This has been acknowledged in the release notes for Xcode 8 Beta 4 (8S188o) as an issues still persisting.

    Known Issues in Xcode 8 beta 4 – IDE

    Debugging

    • Xcode Debug Console shows extra logging from system frameworks when
    debugging applications in the Simulator. (27331147, 26652255)

    Presumably this will be resolved by the GM release. Until then patience and although not ideal but a workaround I’m using is below…

    Similar to the previous answer I am having to:

    • prefix my print logs with some kind of special character (eg * or ^ or ! etc etc)

    • Then use the search box on the bottom right of the console pane to filter my console logs by inputing my chosen special character to get the console to display my print logs as intended

    console

    Please find the below steps.

    1. Select Product => Scheme => Edit Scheme or use shortcut : CMD + <
    2. Select the Run option from left side.
    3. On Environment Variables section, add the variable OS_ACTIVITY_MODE = disable

    For more information please find the below GIF representation.

    Edit Scheme

    My solution is to use the debugger command and/or Log Message in breakpoints.

    enter image description here

    And change the output of console from All Output to Debugger Output like

    enter image description here

    This is related to a known issue with logging found in the Xcode 8 Beta Release Notes (also asked an engineer at WWDC).

    When debugging WatchOS applications in the Watch simulator, the OS may produce an excessive
    amount of unhelpful logging. (26652255)

    There is currently no workaround available, you must wait for a new version of Xcode.

    EDIT 7/5/16: This is supposedly fixed as of Xcode 8 Beta 2:

    Resolved in Xcode 8 beta 2 – IDE

    Debugging

    • When debugging an app on the Simulator, logs are visible. (26457535)

    Xcode 8 Beta 2 Release Notes

    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 :]

    This is no longer an issue in xcode 8.1 (tested Version 8.1 beta (8T46g)). You can remove the OS_ACTIVITY_MODE environment variable from your scheme.

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

    Debugging

    • Xcode Debug Console no longer shows extra logging from system
    frameworks when debugging applications in the Simulator. (26652255,
    27331147)

    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