如何在macOS SwiftUI应用中适配Intel与Apple Silicon调整屏幕亮度
兼容Intel与Apple Silicon的macOS SwiftUI屏幕亮度调整方案
你之前用的基于IOKit的屏幕亮度调整方法在Apple Silicon机型上失效,核心原因是ARM架构Mac对IOKit的沙箱访问限制。下面是能同时适配两种架构的可行方案:
1. 配置必要权限
先在项目的Entitlements文件里添加com.apple.security.device.display-brightness权限,将值设为YES——这是应用获取屏幕亮度调整权限的必要步骤。
2. 编写兼容的亮度调整函数
改用Core Graphics提供的CGDisplaySetBrightness API,这个接口在Intel和Apple Silicon机型上都能正常工作,不用直接操作IOKit:
import CoreGraphics func setScreenBrightness(to level: Float) { // 获取所有活跃屏幕的ID let activeDisplays = CGDisplayCopyAllDisplayIDs() as [CGDirectDisplayID] for displayID in activeDisplays { // 先判断当前屏幕是否支持亮度调整 if CGDisplaySupportsBrightness(displayID) { // 设置亮度,取值范围0.0(最暗)到1.0(最亮) let result = CGDisplaySetBrightness(displayID, level) if result != .success { print("屏幕\(displayID)亮度调整失败,错误码: \(result.rawValue)") } } } } // 调用示例:将亮度设为50% setScreenBrightness(to: 0.5)
额外注意事项
- 亮度值超出0.0-1.0范围时,系统会自动截断到有效区间。
- 如果应用开启了沙箱,必须确保Entitlements权限配置正确,否则会出现权限不足的错误。
- 部分外接显示器可能不支持软件调整亮度,
CGDisplaySupportsBrightness可以帮你过滤这类屏幕。
内容的提问来源于stack exchange,提问作者Emil
相关产品推荐
相关产品推荐

