Snow Leopard (OS X 10.6) 中的 InputManager 插件
-
20-09-2019 - |
题
我从不同的地方收到相互矛盾的报告。Engadget 的评论称,InputManager 插件被完全忽略(如果应用程序以 32 位模式加载,则会导致奇怪的行为),但是 这个邮件列表线程 表示如果 32/64 位兼容性正确,它们就能工作。
所以我有两个问题:
- 我们可以在 Snow Leopard 中使用 InputManager 吗?
- 如果是的话,它的工作方式是否与 Leopard 中相同。如果没有,什么是好的解决方法(因为 1Password 显然正在修复)?
其他提示
http://developer.apple.com/releasenotes/Cocoa/AppKit.html#NSInputManager
现在正式不支持自动加载位于 InputManagers 文件夹中的包。有效输入管理器捆绑包的条件进一步收紧。此功能可能会在未来版本中被禁用。
现在,有效的安装仅限于 /库 /InputManagers文件夹。其他位置的捆绑包被默默地忽略。
Bundle和 /Library /InputManagers文件夹中的所有文件本身都必须由Root用户和Admin组拥有。捆绑包中没有任何文件可以具有组或其他写入权限。
使用root特权(getUid()== 0或geteuid()== 0)运行的过程无法加载任何捆绑输入管理器。
使用车轮组特权运行的过程无法加载任何捆绑输入管理器。
加载束时,该过程必须在活动工作区会话中。
不得通过更改用户或组ID(由ISSETUGID()检查)来污染该过程。
64 位进程无法加载任何捆绑输入管理器。
看起来 Chax(iChat 的 InputManager 插件)现在已切换为 iChat 的应用程序启动器:你运行 Chax.app,它会加载 iChat 并进行额外的 UI 修改。
快速查看小型启动器二进制文件 Chax.app/Contents/MacOS/Chax 中的字符串,似乎他选择了一种比已经提到的 mach_inject 更简单的库拦截技术:相反你 只需设置 DYLD_INSERT_LIBRARIES 在启动目标应用程序之前设置环境变量(如 Linux 中的 LD_PRELOAD)。
当然,这并不会让我最喜欢的 InputManagers、MultiClutch 和 Afloat 再次在 Snow Leopard 中工作——它们非常有用,因为它们可以与所有 Cocoa 应用程序一起工作。仍然不确定这些应用程序的最佳解决方法是什么。
我没有下载 1Password 3 beta 来尝试看看他们在做什么,因为看起来你必须先签署虚拟 NDA。
1Password 3.0 通过以下方式解决了对 InputManager 的需求 搭载 Safari 浏览器插件 API 反而。链接的文章还提供了对 InputManager 的各种代码注入替代方案的非常务实的比较。