SIMBL

Links and Downloads

SIMBL Information
Development Related News

SIMBL-0.8.2.tbz

SIMBL-0.8.2-src.tbz

Problem:
Some applications do about 90% of what I want.
Solution:
Develop my own applications.
Better Solution:
Patch the application myself...

1. What It Does

SIMBL (Smart InputManager Bundle Loader) - pronounced like "symbol" or "cymbal" allows you to build hacks for Cocoa applications and apply the code selectively based on an application's unique identifier. It's not really all that smart, or even clever, but it's smarter than just blindly loading code into an application.

For example, Safari's application identifier is com.apple.Safari. You can use this to prevent bundles that link against application-specific frameworks from bombing on startup when they encounter another application that does not support those libraries. You can also use the application's bundle version to further specify when your plugin should load.

2. Installing

There are two parts to SIMBL, the bundle itself, which is packaged as an InputManager, and the plugins.

Due to the limitations of Apple's Installer.app, these packages install to /Library/InputManagers, though they work equally well in the user domain as well (~/Library/InputManagers). I wish Apple would provide the option for a user-specific install option, since plugins can really sneak up on an unsuspecting user.

3. How To

Once you've installed SIMBL, you need to drop some bundles into the Plugins folder. (/Library/Application Support/SIMBL/Plugins) SIMBL scans this folder for bundles each time an application launches. It will check both the Local and User domain for this special folder.

This means that it will check ~/Library/Application Support/SIMBL/Plugins before looking in /Library/Application Support/SIMBL/Plugins. Additionally, SIMBL detects if you have two conflicting plugins and prevents potentially undesirable behavior by only loading one.

SIMBL plugins are nothing more than standard Cocoa bundles created by XCode, with the addition of one key in the Info.plist. For further information, you can read the SIMBL section in my brief tutorial on Cocoa hacking.

SIMBL was originally created when I was working on PithHelmet, but here are now a bunch of SIMBL plugins available. If you don't see yours listed, feel free to edit the list on the wiki.

4. Caveats

  1. Given the amount of flexibility Cocoa gives you for loading arbitrary code, you can shoot yourself in the foot pretty easily. Luckily, removing SIMBL from the InputManagers folder will remove any problems you may experience.
  2. It seems like this functionality would have been built into Mac OS X already, so I may be duplicating some native functionality - I hope not, as that would be a waste of time.

5. Questions | Comments | Feedback

Please feel free to contact me via email - I'm interested to here your criticisms and thoughts.

You can always read about my current projects in my development journal.

6. Licensing

A few people have asked about licensing terms, etc. I'm not expert in these areas, so let me explain in terms I understand:

The point of the license is to be as flexible as possible - basically, it shouldn't get in the way of writing some cool hack. One of the main reasons I wrote SIMBL was because I didn't like the somewhat draconian terms of the APE license.

7. Revision History

v0.8.2 - released 2007-10-01

v0.8 - released 2005-06-01

v0.5 - released 2004-08-12

v0.4 - released 2004-07-02

v0.3 - unreleased

v0.2 - released 2003-06-23

v0.1 - released 2003-02-03