Apple - Is there a way to hide certain apps from the cmd+tab menu?

Yes, it is possible, however the only way I know of doing it also hides the dock icon.

you must modify the file named 'Info.plist' inside the Application's package (i.e. Sherlock.app/Contents/Info.plist). Open this file in your favorite text editor and add the following section (if it's already present simply change the 0 to a 1 in the string tag):

<key>LSUIElement</key>
<string>1</string>

Source: Hide any program’s Dock icon - Macworld Mac OS X Hints

In the newest version of macOS, a string should not be set for LSUIElement. Instead, you need to use a boolean as follows:

<key>LSUIElement</key>
<true/>

Before OS X 10.8, use this instead (note NS instead of LS):

<key>NSUIElement</key>
<string>1</string>

You can set LSUIElement to 1 as string in the Info.plist:

<key>LSUIElement</key>
<string>1</string>

It removes applications from the application switcher, Dock, and the force quit window. It also removes the menu bar, so it's not really usable with Finder or iTunes.

Editing an Info.plist makes some applications like TextEdit and Chess crash on launch in 10.8. It also invalidates the code signatures of signed applications, so they are not allowed to access keychains automatically.

http://www.cocoabuilder.com/archive/cocoa/141753-lsuielement-and-lsbackgroundonly.html:

NSUIElement is depreciated. However, I remember clearly from working at Apple (Apple DTS) a few years back that NSUIElement and LSUIElement map to the same thing (at least it did back when I was there and I doubt that would have changed). Though NSUIElement is depreciated (NS stands for next step of course! and LS stands for launch services), they are exactly the same thing for all intents and purposes.

Both LSUIElement and NSUIElement still work, and both can also be set to true or 1 as integer.

grep -A1 [LN]SUIElement /Applications/*/Contents/Info.plist

Information Property List Key Reference: Launch Services Keys:

LSUIElement (String - OS X) specifies whether the app runs as an agent app. If this key is set to “1”, Launch Services runs the app as an agent app. Agent apps do not appear in the Dock or in the Force Quit window. Although they typically run as background apps, they can come to the foreground to present a user interface if desired. A click on a window belonging to an agent app brings that app forward to handle events.

The Dock and loginwindow are two apps that run as agent apps.

Witch has an option to ignore applications:

I have just disabled the application switcher and Dock though. I mainly use keyboard shortcuts and Alfred to switch applications.


Disclaimer: I developed GhostTile

Short Anwser: just try GhostTile. It's paid though but you can try as long as you can (steal the idea from Sublime Text)

Long Anwser:

AFAIK, There are two ways to achieve this:
1. Setup an App as Agent. E.g. Add LSUIElement key to App's Info.plist or Set App's activation policy to NSApplicationActivationPolicyAccessory.
2. Hook Dock or other related system process to ignore some apps. Thanks to SIP(Rootless) on El Captian. It's not recommended to do so.

GhostTile is focus on hiding Apps from Dock. It's easy to use and provide multiple ways to manage the apps you hide. There is no on-disk modification, so you won't break apps' codesign signature.

Other features:

  • You can still get notified for the App's Dock Activity
  • Expose-like Overview
  • Alfred Workflow