2

我收到来自不同地方的相互矛盾的报告。Engadget 的评论说 InputManager 插件被完全忽略(如果应用程序以 32 位模式加载会导致奇怪的行为),但这个邮件列表线程说如果 32/64 位兼容性正确,它们将工作。

所以我有两个问题:

  • 我们可以在 Snow Leopard 中使用 InputManagers 吗?
  • 如果是,它的工作方式是否与 Leopard 相同。如果不是,有什么好的解决方法(因为 1Password 显然正在修复)?
4

4 回答 4

3

http://developer.apple.com/releasenotes/Cocoa/AppKit.html#NSInputManager

现在正式不支持自动加载位于 InputManagers 文件夹中的包。有效输入管理器捆绑的条件进一步收紧。在未来的版本中可能会禁用此功能。

  1. 有效安装现在仅限于 /Library/InputManagers 文件夹。其他位置的捆绑包会被静默忽略。

  2. 捆绑包和 /Library/InputManagers 文件夹中的所有文件本身必须归 root 用户和管理员组所有。捆绑包中的任何文件都不能具有组或其他写入权限。

  3. 以 root 权限(getuid() == 0 或 geteuid() == 0)运行的进程无法加载任何捆绑输入管理器。

  4. 使用 wheel 组权限运行的进程无法加载任何捆绑输入管理器。

  5. 在加载捆绑包时,该进程必须处于活动工作区会话中。

  6. 该过程不得因更改用户或组 ID(由 issetugid() 检查)而受到污染。

  7. 没有 64 位进程可以加载任何捆绑输入管理器。

于 2009-08-27T15:47:33.040 回答
3

如果您确实需要将代码注入应用程序以完成您想要做的事情,请使用mach_inject

并且请提交错误请求钩子,以便您将来以更安全的方式实施您的软件。

于 2009-08-30T02:07:09.893 回答
1

看起来 Chax(iChat 的 InputManager 插件)现在已切换为 iChat 的应用程序启动器:您运行 Chax.app 并使用额外的 UI hack 加载 iChat。

快速查看微型启动器二进制文件 Chax.app/Contents/MacOS/Chax 中的字符串,似乎他选择了一种比已经提到的 mach_inject 更简单的库拦截技术:相反,您只需在启动目标应用程序之前设置 DYLD_INSERT_LIBRARIES环境变量(如 Linux 中的 LD_PRELOAD)。

当然,这不会让我最喜欢的 InputManagers MultiClutch 和 Afloat 再次在 Snow Leopard 中工作——它们最有用是因为它们可以与所有 Cocoa 应用程序一起工作。仍然不确定这些应用程序的最佳解决方法是什么。

我没有下载 1Password 3 测试版来尝试看看他们在做什么,因为看起来你必须先签署虚拟 NDA。

于 2009-08-30T21:56:43.750 回答
1

1Password 3.0 通过搭载 Safari 的浏览器插件 API来解决对 InputManager 的需求。链接的文章还对 InputManagers 的各种代码注入替代方案进行了非常务实的比较。

于 2009-09-01T11:32:05.327 回答