以编程方式强制Cocoa应用程序以32位模式启动

Fra*_*ank 9 macos cocoa launch 32bit-64bit

我有一个Cocoa应用程序,通常在任何支持该架构的Mac上以完全64位模式运行.

现在我有一个外部API,只能作为32位插件加载到主程序中.此API适用于只有一小部分用户可以购买的第三方输入设备,但这对于这么小的百分比非常重要.

我的问题是,如果在32位模式下执行,程序只能使用此API.最简单的方法当然是:

场景1:通过Finder的"获取信息"对话框更改其信息,要求用户以32位模式启动程序.

这很容易做到,但很不优雅..

场景2:始终以32位模式运行,从而避免了问题

我几乎不想做什么......为了一个充满异国情调的功能,惩罚98%的用户.

场景3:自动更改应用程序的启动属性,以便下次启动时以32位模式启动,之后每次启动

要么

场景4:在启动时,确定正在使用哪个架构,然后在必要时以32位模式重新启动

方案3和4的问题很少,如何记录这些问题,可能会让我遇到麻烦的Mac App Store指南.

到目前为止,我已经建立:

  • 使用"arch"命令行工具将允许我以32位模式重新启动我的可执行文件
  • Finder脚本不会让我改变"在32位模式下启动"标志
  • 该标志由Launch Services API管理(http://blog.timac.org/?p=490)
  • 但是我没有找到任何以编程方式更改Launch Services API中的标志的接口

到目前为止,我只能看到这些选项,其中没有一个看起来特别棒:

  1. 使用NSTask和"arch"命令行工具重新启动应用程序
  2. 直接写入com.apple.LaunchServices.plist
  3. 将32位插件隔离到其自己的32位进程中并使用IPC

解决方案1可能会让我在MAS提交时遇到麻烦.解决方案2几乎肯定会在某个阶段这样做.从用户的角度来看,只有解决方案3才是完美的,但为了最小的回报而增加了大量的复杂性.

任何关于如何"干净地"并且合理努力地做到这一点的建议将受到高度赞赏!

jus*_*ase 4

选项 5:创建另一个始终以 32 位运行的可执行文件,其唯一目的是驱动相关的 32 位组件。从主应用程序启动该可执行文件,并使用某种类型的独立于处理器的 io(可能是套接字)相互通信。