如何在 Retina 显示器上发布应用程序时启用“使用低分辨率”选项?

8
我有一个应用程序,在HiDPI模式下会崩溃,除非我在Finder中选择“获取信息”,然后勾选“以低分辨率打开”复选框。修复应用程序不是一个选项,因为它是使用已经不再由供应商积极维护的创作软件制作的。
现在问题来了:当我将应用程序放在桌面上,压缩它,然后设置“以低分辨率打开”复选框为true,删除应用程序并解压原始应用程序时,该复选框保持选中状态。 所以无论OS X在哪里存储“以低分辨率打开”的属性,都不会与文件一起存储。这意味着在将应用程序分发到其他Retina Mac系统时,它将再次损坏,直到在每个系统上手动检查该复选框。
我发现Info.plist有一个NSHighResolutionCapable属性,我在我的应用程序的Info.plist中添加了Boolean并将其设置为false,但没有效果。这似乎不等同于“以低分辨率打开”选项。
链接的文档说:如果默认情况下选择了“以低分辨率打开”复选框,则可以通过在Info.plist中设置NSHighResolutionCapable属性为YES来更改默认值,但反过来不起作用... 我想要的是一个开箱即用的解决方案。我希望避免客户需要自己进行配置。它应该在解压应用程序时简单地设置。
所以有两个问题:
a)是否可以配置等同于文件与勾选“以低分辨率打开”复选框-例如在Info.plist中?
b)OS X将我对Finder信息屏幕中的“以低分辨率打开”复选框所做的选择存储在哪里?

NSHighResolutionCapable 设置为 false (XCode 中的 NO) 对我来说是有效的 - 应用程序应该以低分辨率打开,并且“在低分辨率下打开”复选框应该被选中但灰色不可用。 我刚刚在运行于 Mavericks 上的 XCode 5.0.2 上进行了检查。 您能展示一下您的 Info.plist 的内容吗? - MattR
@MattR 非常感谢您的回复, 我添加了 plist 编辑器和 Xcode 的截图,并添加了在 Mavericks 上出现问题的应用程序包的下载链接。 - C.O.
C.O.,请在新用户帐户中尝试。有可能在“获取信息”中取消复选框的操作也会保存在应用程序之外的另一个地方,就像选择它一样。因此,您使用 Info.plist 进行的测试可能无效,因为它们被用户特定设置所“覆盖”。另一个要尝试的事情是复制一些其他应用程序,在其中您从未在“获取信息”窗口中切换过该设置,看看是否对 Info.plist 值进行编辑有效。 - Ken Thomases
@C.O. 配置看起来没问题,所以我不确定为什么它没有使用该设置... 应该是该应用程序还有其他非标准的问题... - MattR
@KenThomases 谢谢你的建议。我用一份 OS X TextEdit 应用程序的副本尝试了同样的方法。现在问题来了... 如果您曾经在那个地方查看应用程序的文件信息,那么 plist 就没有效果了。"尝试另一个用户" 的建议很中肯。将应用程序复制到 USB 拇指驱动器上也解决了问题。所以请把它作为答案,我会接受它... - C.O.
实际上,即使右键单击“显示包内容”并编辑plist文件,也足以使“以低分辨率打开”复选框保持不受影响。即使我以前从未调用过文件信息,我真的需要其他用户/其他位置的技巧。 - C.O.
3个回答

12

我目前无法检查,但很可能存在或不存在NSHighResolutionCapable键已缓存在启动服务数据库中。这是指定在Info.plist中的大多数应用程序属性存储的位置。将应用程序复制到USB闪存驱动器上工作的事实似乎证实了这个理论。

您可以搜索以下命令的输出以查找您的应用程序包ID,然后查看是否有与高分辨率能力明显相关的内容:

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -dump

如果存在这种情况,那么在您修改应用程序的 Info.plist 后,执行以下操作可能会起作用:

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -f /path/to/the/modified.app

如果不行,那么也许更有力的是:

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -seed

如果以上方法都没有帮助,那么(从我们之前的评论中可以看出),尝试在一个新的用户账户中操作。


2

需要更加细致的操作,您需要重置“-user-”域。

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -f /Applications -all local,user


2

我会倒过来回答这些问题。

b) 首选项键名为LSHighResolutionModeIsMagnified,以每个应用程序的形式存储在~/Library/Preferences/com.apple.LaunchServices/com.apple.LaunchServices.plist中。

a) 您可以为应用程序编写首选项。我使用plistbuddy如下设置低分辨率(数字3)为OpenSCAD.app,其包标识符为org.openscad.OpenSCAD

/usr/libexec/PlistBuddy -c "Set :LSHighResolutionModeIsMagnified:org.openscad.OpenSCAD:1 3" ~/Library/Preferences/com.apple.LaunchServices/com.apple.LaunchServices.plist

这些信息是从我提出类似问题时在以下网站得到的答案中适应而来:https://apple.stackexchange.com/questions/398846/where-is-the-open-in-low-resolution-setting-stored-for-an-app?noredirect=1#comment551034_398846

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接