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

- You can use SIMBL for anything you like.
- You can include the SIMBL.pkg with your distribution, but you need to include the original license and ReadMe files so people know what they are getting.
- If you want more from SIMBL, check out the source and make change suggestions. Please do not distribute a modified version of SIMBL, it would make my life a living nightmare.
- There is no warranty of any kind.

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

- better error handling for rogue plug-ins
- better error handling in some extreme corner cases
- fixed installer file permissions

v0.8 - released 2005-06-01

- improved 10.4.x Tiger compatibility
- better error handling in some extreme corner cases
- warning on deprecated SIMBL interface
- changed the installation package at the request of an informant I shall refer to only as "Deep Throat"

v0.5 - released 2004-08-12

- Fixed version checking bug

v0.4 - released 2004-07-02

- Added version as a new match criteria
- Implemented legacy compatibility for old plugins

v0.3 - unreleased

- Added preflight load mechanism to schedule bundle loading once all system libraries have been initialized

v0.2 - released 2003-06-23

- Changed the search paths
- Added conflict resolution
- Built an actual installer

v0.1 - released 2003-02-03

- Designed to prevent runtime load errors after installing PithHelmet