嘿,我正在制作一个小型可可应用程序并在 Mountain Lion 中使用新的通知中心 API。但是,我的应用程序现在与日历、消息等一起出现在通知中心设置中。
因为只是我在玩,我希望它现在从列表中消失,但无论如何我都找不到删除它,尝试了几件事,将其拖出,按住 alt+右键单击等等。有谁知道填充该列表的(可能是一个)plist 可以位于哪里?
嘿,我正在制作一个小型可可应用程序并在 Mountain Lion 中使用新的通知中心 API。但是,我的应用程序现在与日历、消息等一起出现在通知中心设置中。
因为只是我在玩,我希望它现在从列表中消失,但无论如何我都找不到删除它,尝试了几件事,将其拖出,按住 alt+右键单击等等。有谁知道填充该列表的(可能是一个)plist 可以位于哪里?
我被困在同一条船上。
虽然我不认为从通知中心清除已注册的应用程序是记录在案的步骤,但显然有一些设置可以做到这一点。这是我发现的。此数据不存储在 plist 中,而是存储在 sqlite 数据库中。
如果你看~/Library/Application Support/NotificationCenter/<id>
(在我的例子中,我在 NotificationCenter 下只有一个目录),你会<id>.db
在该目录下看到一个文件。
编者按:Hofi指出,由于 macOS 10.10表示 SQLite 数据库可以在 shell 命令返回的目录中找到
$(getconf DARWIN_USER_DIR)com.apple.notificationcenter/db
,命名为db
.
在里面戳,我看到了像app_info
, app_source
,presented_notifications
等这样的表。此外,模式包括一个如下所示的清理触发器:
CREATE TRIGGER app_deleted AFTER DELETE ON app_info
BEGIN
DELETE FROM scheduled_notifications WHERE app_id=old.app_id;
DELETE FROM presented_notifications WHERE app_id=old.app_id;
DELETE FROM presented_alerts WHERE app_id=old.app_id;
DELETE FROM notifications WHERE app_id=old.app_id;
DELETE FROM app_push WHERE app_id=old.app_id;
DELETE FROM app_loc WHERE app_id=old.app_id;
DELETE FROM app_source WHERE app_id=old.app_id;
END;
使用 sqlite3 客户端,如果您执行
select * from app_info;
第一列是app_id
您的应用程序,第二列是您的应用程序的 bundleid。根据 bundleid 查找您的应用程序。然后做一个
delete from app_info where app_id = <app_id>
您使用上面的 select 命令找到的正确 app_id 在哪里。
令人沮丧的是,在这样做之后,一切都留在了 NotificationCenter(中心和系统偏好设置)中。我必须注销并重新登录才能看到更改生效,但幸运的是,我的多个测试应用程序现在消失了;-)
如果有人知道一种不那么复杂的方式,我会全神贯注。
突出显示列表中的应用程序,然后按fn
+backspace
或del
/delete
如果您的键盘上有它。
如果您删除应用程序(可能还需要清空垃圾箱)并注销并重新登录,它会从列表中删除。
当我陷入困境时,以下可能是严厉的方法似乎对我有用。它避免更改 AppID/等。至少。
rm -rf ~/Library/Developer/Xcode/DerivedData/*
killall usernoted
killall NotificationCenter
rm ~/Library/Application Support/NotificationCenter/*
此方法不需要重新启动/注销。
我遇到了 BetterTouchTool 在卸载后没有从通知中心消失的问题。不幸的是,这里提到的方法对我不起作用,但我最终想通了。
对于任何无法使其在 High Sierra 下工作的人:
在终端中,导航到 NotificationCenter 文件夹:
cd $(getconf DARWIN_USER_DIR)/com.apple.notificationcenter/
使用 pwd 获取路径并复制到剪贴板(应该类似于 /var/folders/c3/289nmdsd2cz68yd5p47k553w0000gn/0/com.apple.notificationcenter)
pwd
可能有一种更优雅的方式,但这对我有用。请注意,由于某种原因,数据库会使用仍然存在于 db 表中的 application_id 进行重建(顺便说一句,在 High Sierra 上调用它app
而不是调用app_id
),但是该条目从通知中心消失了。
我只是重命名了 NotificationCenter 文件夹中的文件,然后重新启动。创建了一个新文件,其中仅填充了默认应用程序。
更改您正在使用用户通知进行调用的项目中的代码
[[NSUserNotificationCenter defaultUserNotificationCenter] removeAllDeliveredNotifications];
从您的应用委托的方法-applicationDidFinishLaunching:
。这将从用户通知中心删除所有用户通知。
您可以从 Xcode 轻松完成此操作。
打开Organizer
,然后选择Projects
顶部的选项卡。您将在左侧看到所有应用程序的列表。对于您要删除的任何应用程序,从左侧菜单中选择它并Delete...
选择Derived Data
.
这仍然会保留通知中心中的所有用户设置,以及通知本身。
太棒了!根据个人经验,该应用程序已永久删除到您的通知中心。
我试图删除通知,但在我的情况下,准确地说是针对网站 (9to5mac)。我可以在系统偏好设置中看到它 | 通知并将其设置为禁用,但我继续收到通知。我终于弄明白了。对于网站,您必须进入 Safari,然后进入 Safari Preferences | 网站,然后是通知,然后找到该网站并将其设置为拒绝或完全删除它。我在这里删除了 9to5mac,一旦删除,它也从一般通知中心消失了,真是太棒了!但至少有办法。
同样从我的搜索中,我也使用 sqlite 浏览器打开了通知数据库文件,但找不到我的网络通知“应用程序”,因此您必须在 Safari 中删除/禁用它。
对于 macOS Catalina,可以通过以下方式找到 db 的路径lsof -p $(ps aux | grep -m1 usernoted | awk '{ print $2 }')| awk '{ print $NF }' | grep 'db2/db$' | xargs dirname