Because I’m beginning to work on iCAR again (finally), I was inspired to go looking for alternative ways to load its code into iChat (it currently uses SIMBL, which is excellent, but I’d prefer not to have to install anything more than the iCAR bundle and it seems like there would be a simple interface for this sort of thing).

I encountered the following options during my research.

  • Unsanity’s Application Enhancer (APE), the best-marketed and most popular method. Daemon-based (aped). Makes me irrationally nervous in general. The SDK has a wildly restrictive license: “The Application Enhancer license is not compatible with GNU style licenses (GPL/LGPL).”
  • Zaius, a free (Mozilla Public License) alternative to APE, also daemon-based. Attractive, but I’m not entirely in favor of asking users to install interfaces like this.
  • Input Managers, manifested as the magical Library folder where bundles get loaded into every application. Intended to be for implementations of NSInputManager, but has no restriction on what code can be executed. According to Mike Solomon (author of SIMBL and PithHelmet), these bundles can have troubles selecting the application to load into.
    • SIMBL (the aptly named Simple Input Manager Bundle Loader) is Mike Solomon’s solution to instabilities with the Input Managers method. It handles the verification of application identifiers and loads bundles selectively. Yet another required external installation, but resides in only one relatively innocuous directory and doesn’t require a logout or reboot.
  • Ed Wynne’s libpatch, an aging system for dynamically loading code into Cocoa applications. Breaks more and more with each release of the OS. Virtually nonexistent these days.
  • Mach calls, including the methods in mach_inject and mach_override, which are best explained in a paper by Jonathan Rentzsch. These require that a running process invoke the calls to the kernel, which means one would need to write a daemon to monitor launches of target applications if one’s override has no external, executable component.

Thus, it seems that I’ll stick with SIMBL until Apple does something drastic. My only real problem with this is that I’ll need to continue distributing two files in my iCAR downloads, but that really isn’t too much of an inconvenience. We have nothing in our pockets. We continue.

comments