InputManager plugins in Snow Leopard (OS X 10.6)
I am getting conflicting reports from various places. Engadget's review says that InputManager plugins are completely ignored (and cause strange behavior if the application is loaded in 32-bit mode), but this mailing list thread says they will work if 32/64-bit compatible.
I have two questions:
- Are we getting to use the InputManager in Snow Leopard?
- If so, will it work the same as in Leopard. And if not, what's a good workaround (because 1Password is apparently working on a fix)?
source to share
If you really need to inject code into applications to accomplish what you are trying to do, use mach_inject .
And please include a bug when requesting interceptors so that you can implement your software more securely in the future.
source to share
http://developer.apple.com/releasenotes/Cocoa/AppKit.html#NSInputManager
Automatic loading of packages located in InputManagers folders is not officially supported. The conditions for a proper input control pool are even more tight. This functionality is likely to be disabled in a future release.
The actual installation is now limited to / Library / InputManagers. Bundles elsewhere are silently ignored.
All files in the bundle folder and / Library / InputManagers must themselves be owned by root and admin. No files inside the package can have a group or other permission entry.
Processes running as root (getuid () == 0 or geteuid () == 0) cannot load the Package Injection Manager.
Processes running with the wheel group privilege cannot load any input manager set.
The process must be in an active workspace session while downloading packages.
The process should not be corrupted by changing the user or group id (checked by issetugid ()).
No 64-bit processes can load any package injection managers.
source to share
It looks like Chax (the InputManager plugin for iChat) has now switched to an iChat app: you launch Chax.app and load iChat with additional UI hacks.
Quickly looking at the lines in the small binary Launcher Chax.app/Contents/MacOS/Chax, it seems to choose a simpler library interception method than the already mentioned mach_inject: instead, you just set the environment variable DYLD_INSERT_LIBRARIES before launching the target application (e.g. LD_PRELOAD on Linux).
Of course, that doesn't make my favorite InputManager, MultiClutch and Afloat work again in Snow Leopard - they were most useful because they worked with all Cocoa applications. Still not sure what the best solution would be for these applications.
I didn't download the 1Password 3 beta to try and see what they do because it looks like you need to sign a virtual NDA first.
source to share
1Password 3.0 works around the need for an InputManager instead in addition to the Safaris browser API . The linked article also gives a very pragmatic comparison of the different coding options for InputManagers.
source to share