首页 > 解决方案 > 如何在 10.15 之前的 macOS 上获取 NSScreen 的本地化名称?

问题描述

macOS 10.15+ 提供NSScreen.localizedName,它为屏幕提供面向用户的名称,例如“内置 Retina Display”或“Встроенный дисплей Retina”(如果本地语言是俄语)。

但是,我需要支持 10.15 之前的 macOS,目前还不清楚回退应该是什么。

我看到了这个问题,“如何在 Mac OS X 中使用显示 ID 获取显示名称?” . 但是,所有答案都使用CGDisplayIOServicePort,这在 macOS >10.9 中不可用。

我还看到这个问题,“CGDisplayIOServicePort 在 OS X >= 10.9 中已弃用,如何替换?” . 但是,所有答案都取决于GLFW,这是一个巨大的库,我显然不想仅仅为了获得显示名称而包含它。

(编辑)我还发现了这个垫片,“从 NSScreen 获取显示名称”,但它不能正常工作 - 例如,我的“内置视网膜显示器”得到了一个奇怪的名称“彩色 LCD”,它没有io_service_t为我的 Sidecar iPad 屏幕找一个。

标签: swiftmacoscocoa

解决方案


屏幕的实际名称是“彩色 LCD”,但用户友好的本地化名称(以及旧操作系统版本中显示的一个系统首选项)有一个额外的检查来检测它是笔记本电脑的内部显示器。


推荐阅读