我收到来自不同地方的相互矛盾的报道。 Engadget的评论称InputManager插件被完全忽略(如果应用程序以32位模式加载,会导致奇怪的行为),但this mailing list thread表示如果32/64位兼容性正确,它们将起作用。
所以我有两个问题:
答案 0 :(得分:3)
http://developer.apple.com/releasenotes/Cocoa/AppKit.html#NSInputManager
现在,官方不支持自动加载位于InputManagers文件夹中的软件包。有效输入管理器捆绑的条件进一步收紧。在将来的版本中可能会禁用此功能。
现在,有效安装仅限于 / Library / InputManagers文件夹。 其他地方的捆绑包是 默默地忽略了。
捆绑包中的所有文件和/ Library / InputManagers文件夹本身 必须由root用户拥有并且 管理组。里面没有文件 bundle可以有组或其他写 权限。
使用root权限运行的进程(getuid()== 0或geteuid() == 0)无法加载任何包输入管理器。
使用wheel group权限运行的进程无法加载任何bundle 输入经理。
该进程必须在当时的活动工作区会话中 加载捆绑包。
不得通过更改用户或组ID来识别该过程(选中 issetugid())。
- 醇>
没有64位进程可以加载任何bundle输入管理器。
答案 1 :(得分:3)
如果您确实需要将代码注入应用程序以完成您要执行的操作,请使用mach_inject。
请file a bug请求挂钩,以便将来以更安全的方式实施您的软件。
答案 2 :(得分:1)
看起来Chax(iChat的一个InputManager插件)现在已经切换为iChat的应用程序启动器:你运行Chax.app并加载带有额外UI黑客的iChat。
快速查看微型启动器二进制文件Chax.app/Contents/MacOS/Chax中的字符串,看起来他正在选择一种比已经提到的mach_inject更简单的库拦截技术:而不是之前的just set the DYLD_INSERT_LIBRARIES环境变量启动目标应用程序(如Linux中的LD_PRELOAD)。
当然,这并没有让我最喜欢的InputManagers,MultiClutch和Afloat再次在Snow Leopard中运行 - 它们最有用,因为它们适用于所有Cocoa应用程序。仍然不确定这些应用程序的最佳解决方法是什么。
我没有下载1Password 3测试版试图看看他们在做什么,因为看起来你必须首先签署虚拟NDA。
答案 3 :(得分:1)
1Password 3.0通过piggybacking on Safari’s browser plug-in API来解决对InputManager的需求。链接的文章还提供了对InputManagers的各种代码注入替代方案的非常实用的比较。