我有一个Cocoa应用程序,通常在任何支持这种架构的Mac上以完整的64位模式运行。
现在我有一个外部API,只能作为32位插件加载到主程序中。此API适用于只有一小部分用户可以购买的第三方输入设备,但这对于这么小的百分比非常重要。
我的问题是,如果在32位模式下执行,程序只能使用此API。最简单的事情当然是:
场景1:要求用户通过Finder的“获取信息”对话框更改其信息,以32位模式启动程序。
这很容易做到,但很不优雅..
场景2:始终以32位模式运行,从而避免出现问题
我几乎不想做什么......为了一个充满异国情调的功能而惩罚98%的用户。
场景3:自动更改应用程序的启动属性,以便下次启动时以32位模式启动,之后每次启动
或
场景4:在发布时,确定正在使用的架构,然后在必要时以32位模式重新启动
场景3& 4有一个问题,关于如何做到这一点的文件很少,它可能会让我在Mac App Store指南中遇到麻烦。
到目前为止,我已经建立了:
到目前为止,我只能看到这些选项,其中没有一个看起来特别棒:
解决方案1可能让我在MAS提交时遇到麻烦。解决方案2几乎肯定会在某个阶段这样做。从用户的角度来看,只有解决方案3才是完美的,但为了最小的回报,增加了大量的复杂性。
任何关于如何“干净地”并且付出合理努力的建议都将受到高度赞赏!
答案 0 :(得分:4)
选项5: 创建另一个始终以32位运行的可执行文件,其唯一目的是驱动有问题的32位组件。从主应用程序启动该可执行文件,并使用某种类型的处理器独立io相互通信,可能是套接字。
答案 1 :(得分:2)
我想出了使用默认设置设置密钥的方法......
给出一个bash shell变量:
alias="<0000 .... 1234>" #(there is a lot more hex data than that...)
包标识符:
bundle="com.mycompany.myprogram"
您可以这样设置密钥:
defaults write com.apple.LaunchServices LSArchitecturesForX86_64 -dict-add $bundle "($alias, i386)"
祝你好运生成二进制别名。我只是从com.plist.dock窃取_CFURLAliasData,因为我试图设置为启动32bit的程序在Dock中安装了一个图标。生成别名的另一种方法是,如果你能掌握它,可能是使用程序dockit.c。我找不到那个节目。
答案 2 :(得分:1)
您可以通过更改位于此处的plist文件以编程方式更改应用程序将启动的模式:
~/Library/Preferences/com.apple.LaunchServices.plist
您需要更改位于的密钥
/LSArchitecturesForX86_64/[your.app.idenitfier]/Item 1/
x86_64
将以64位i386
将以32位您可以使用内置的defaults
命令或内置的plistbuddy
命令对其进行编辑。如果我找到defaults
我会发布的plistbuddy
语法,那么获得一个可能会随着{{1}}变化的关键字我从来没有太多运气。
完成所有操作后,您可以创建一个简单的脚本,在登录时运行,测试输入设备(或其他属性,部门等)的存在,并相应地设置启动模式。
答案 3 :(得分:0)
我的情景非常相似。我使用Ableton Live和Reason作为重新接线的奴隶。如果我在32位启动Ableton,我需要理由处于32位模式。这就是我所做的。
您现在可以轻松启动/编写2个应用程序。