我有一个 Cocoa 应用程序,通常在任何支持此架构的 Mac 上以完整 64 位模式运行。
现在我有一个外部 API,只能作为 32 位插件加载到主程序中。该 API 适用于第三方输入设备,只有一小部分用户会购买该设备,但这对于那一小部分用户来说很重要。
我的问题是,如果程序在 32 位模式下执行,则只能使用此 API。最简单的事情当然是:
场景 1:要求用户通过 Finder 的“获取信息”对话框更改其信息,以 32 位模式启动程序。
这很容易完成,但很难优雅..
场景 2:始终以 32 位模式运行,从而避免该问题
这也不是我想做的……为了一个奇异的功能而惩罚 98% 的用户。
场景3:自动更改应用程序的启动属性,使其在下次启动时以及之后每次启动时都以32位模式启动
or
场景 4:在启动时确定正在使用的架构,然后在必要时以 32 位模式重新启动
场景 3 和 4 的问题是,关于如何执行此操作的文档很少,这可能会给我带来 Mac App Store 指南的麻烦。
到目前为止,我已经确定:
- 使用“arch”命令行工具将允许我以 32 位模式重新启动我的可执行文件
- Finder 脚本不允许我更改“以 32 位模式启动”标志
- 该标志由启动服务 API 管理(http://blog.timac.org/?p=490 http://blog.timac.org/?p=490)
- 但我还没有找到任何接口来以编程方式更改启动服务 API 中的标志
到目前为止,我只能看到这些选项,其中没有一个看起来特别好:
- 使用 NSTask 和“arch”命令行工具重新启动应用程序
- 直接写入 com.apple.LaunchServices.plist
- 将 32 位插件隔离到其自己的 32 位进程中并使用 IPC
解决方案 1 可能会给我在 MAS 提交方面带来麻烦。解决方案 2 几乎肯定会在某个阶段这样做。从用户的角度来看,只有解决方案 3 是完美的,但会增加大量的复杂性,以获得最小的回报。
任何有关如何“干净地”并合理努力地做到这一点的建议将不胜感激!