发货时如何在 Retina 显示屏上为应用程序启用“使用低分辨率”?

Posted

技术标签:

【中文标题】发货时如何在 Retina 显示屏上为应用程序启用“使用低分辨率”?【英文标题】:How to enable "use low resolution" on Retina display for an Application when shipping it? 【发布时间】:2013-12-06 14:20:31 【问题描述】:

我有一个应用程序在 HiDPI 模式下中断,除非我在 finder 中选择“获取信息”并勾选“以低分辨率打开”复选框。修复应用程序不是一种选择,因为它是使用不再由其供应商真正积极维护的创作软件制作的。

现在事情是这样的:当我拿到应用程序时,把它放在桌面上,压缩它,然后将“以低分辨率打开”复选框设置为 true,删除应用程序并解压缩原来的应用程序,复选框保持选中状态。 因此,无论 OS X 将“以低分辨率打开”的属性存储在何处,它都不会与文件一起存储。这意味着当将应用程序分发到其他 Retina Mac 系统时,它会再次被破坏,直到手动检查每个系统上的复选框。

我发现 Info.plist got a NSHighResolutionCapable property 并将 Boolean 添加到我的应用程序的 Info.plist 并将其设置为 false 但无济于事。这似乎不等同于“以低分辨率打开”选项。

链接文档说:如果默认选中“以低分辨率打开”复选框,您可以通过以下方式更改默认值:在 Info.plist 中将 NSHighResolutionCapable 属性设置为 YES 好吧,反过来不行……我想要的是一个开箱即用的解决方案。我想避免客户需要自己配置它。它应该在解压缩应用程序时简单地设置。

所以两个问题:

a) 是否可以配置与文件一起检查的“以低分辨率打开”复选框 - 例如在Info.plist?

b) OS X 将我为通过 Finder 的信息屏幕获得的“以低分辨率打开”复选框所做的选择存储在哪里?

编辑 12 月 7 日(添加了 plist 详细信息)

如在 plist 编辑器中所见:

正如现代 Xcode on Mavericks 所见:

唯一的区别是显示的名称。 Xcode 将其称为“高分辨率能力”,而在文件中它仍然是真正的“NSHighResolutionCapable”

这是我们关心的文件信息对话框的一部分:

【问题讨论】:

NSHighResolutionCapable 设置为 false(XCode 中的 NO)对我有用 - 应用程序应以低分辨率打开,并且应选中“以低分辨率打开”复选框但显示为灰色。刚刚检查了在 Mavericks 上运行的 XCode 5.0.2。你能显示你的 Info.plist 的内容吗? @MattR 非常感谢您的回复,我添加了 plist 编辑器和 Xcode 的屏幕截图,也在 Mavericks 上添加了一个下载链接到有问题的 App 包。 C.O.,尝试使用新的用户帐户。取消选中“获取信息”中的复选框也可能会保存在应用程序之外的单独位置,就像选中它一样。因此,您使用 Info.plist 的测试可能无效,因为它们被用户特定的设置“覆盖”。要尝试的另一件事是复制一些您从未在“获取信息”窗口中切换该设置的其他应用程序,并查看编辑 Info.plist 值是否适用。 @C.O.配置对我来说看起来不错,所以不知道为什么它不使用该设置......一定是关于该应用程序的其他非标准...... @KenThomases 感谢您的想法。我对 OS X TextEdit App 的副本进行了同样的尝试。现在事情是这样的......如果您曾经在那个地方查看过应用程序的文件信息,那么 plist 是无效的。 “尝试其他用户”的建议恰到好处。将应用程序复制到 USB 拇指驱动器也起到了作用。所以把它变成一个答案,我会接受它...... 【参考方案1】:

我目前无法检查,但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

如果这些都没有帮助,那么(从我们上面的 cmets)看来尝试新的用户帐户是可行的。

【讨论】:

【参考方案2】:

需要更多技巧,您需要重置 -user- 域。

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

【讨论】:

【参考方案3】:

我会以错误的方式回答这些问题

b) 首选项键称为LSHighResolutionModeIsMagnified,并作为每个应用的条目存储在~/Library/Preferences/com.apple.LaunchServices/com.apple.LaunchServices.plist

a) 您可以为应用编写首选项。我使用plistbuddy 如下为OpenSCAD.app 设置低分辨率(数字3),其捆绑ID 为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

【讨论】:

以上是关于发货时如何在 Retina 显示屏上为应用程序启用“使用低分辨率”?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 montavista linux 上为守护进程启用核心转储?

如何在三星galaxy s7上为React Native启用USB调试

如何将应用程序从旧 iPhone 移植到 iPhone 4? (Retina显示屏)

如何在 Sidekiq 上为 Redis 6 启用 TLS?

如何在 OSX 上为 Python 应用程序启用 App 沙箱(Python 应用程序针对 Mac App Store)

如何兼容 iPhone 中的 Retina 3.5 和 4 [重复]