MacOS Ventura下Swift应用Dock角标不显示及通知权限问题
问题解决:MacOS Ventura下Swift应用Dock角标与通知权限问题
问题概述
在MacOS Ventura系统中,尝试通过以下代码设置Dock角标:
NSApplication.shared.dockTile.showsApplicationBadge = true NSApplication.shared.dockTile.badgeLabel = "2" NSApplication.shared.dockTile.display()
同时请求通知权限时,权限请求始终失败,提示"Notifications are not allowed for this application",且系统偏好设置的通知面板仅显示提醒选项,无角标设置项。
解决方案
1. 独立设置Dock角标(无需通知权限)
设置Dock角标不需要依赖通知权限,确保代码在主线程执行即可:
DispatchQueue.main.async { NSApplication.shared.dockTile.showsApplicationBadge = true NSApplication.shared.dockTile.badgeLabel = "2" NSApplication.shared.dockTile.display() }
直接运行这段代码,Dock图标应显示角标,无需等待通知权限授权。
2. 修复通知权限请求失败问题
权限请求失败及系统设置无角标选项,通常是配置缺失导致:
- 添加Info.plist权限描述:
在Info.plist中添加NSUserNotificationUsageDescription键,值为向用户说明请求通知权限的原因(例如"需要发送通知提醒您新消息")。没有该键时,权限请求会直接被拒绝。 - 配置沙箱权限(若启用沙箱):
在Xcode的Signing & Capabilities面板中,确保App Sandbox的Notifications选项已勾选Allow User Notifications。 - 重置应用通知权限:
打开终端执行以下命令(替换com.your-bundle-id为你的应用Bundle ID):
执行后重启应用或电脑,重新发起权限请求。defaults delete com.your-bundle-id NSUserNotificationCenter defaults delete com.apple.notificationcenterui com.your-bundle-id - 检查LSUIElement配置:
若Info.plist中存在LSUIElement键且值为YES,应用会以后台模式运行,不会在通知设置中显示完整选项。需删除该键或设为NO。
3. 显示系统设置中的角标选项
完成上述配置并成功授予通知权限后,系统偏好设置的通知面板中会自动出现"Badge app icon"选项,可在此开关角标显示。
内容的提问来源于stack exchange,提问作者Jitendra Modi
相关产品推荐
相关产品推荐

