You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 00:10:21