SIMBL

Links and Downloads

SIMBL Information
Development Related News

SIMBL-0.2.dmg

SIMBL-0.2-src.dmg

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.

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.

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). If Apple ever provides the option for a user-specific install option, I'll enable it.

Since there isn't much point to installing SIMBL without some plugins, there is no SIMBL package per se - it is included with the plugin installers.

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 Project Builder, with the addition of one key in the bundle's Info.plist.

The SIMBLApplicationIdentifier key allows you to specify which applications should load a particular bundle by supplying an Array of application identifier Strings. The special string "*" matches all applications.

There are only a limited number of bundles that support SIMBL:

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. Revision History

v0.2 - released 2003-06-23

v0.1 - released 2003-02-03