21

嘿,我正在制作一个小型可可应用程序并在 Mountain Lion 中使用新的通知中心 API。但是,我的应用程序现在与日历、消息等一起出现在通知中心设置中。

因为只是我在玩,我希望它现在从列表中消失,但无论如何我都找不到删除它,尝试了几件事,将其拖出,按住 alt+右键单击等等。有谁知道填充该列表的(可能是一个)plist 可以位于哪里?

4

11 回答 11

31

我被困在同一条船上。

虽然我不认为从通知中心清除已注册的应用程序是记录在案的步骤,但显然有一些设置可以做到这一点。这是我发现的。此数据不存储在 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(中心和系统偏好设置)中。我必须注销并重新登录才能看到更改生效,但幸运的是,我的多个测试应用程序现在消失了;-)

如果有人知道一种不那么复杂的方式,我会全神贯注。

于 2012-08-25T11:48:44.887 回答
10

突出显示列表中的应用程序,然后按fn+backspacedel/delete如果您的键盘上有它。

于 2020-05-17T21:00:37.000 回答
7

如果您删除应用程序(可能还需要清空垃圾箱)并注销并重新登录,它会从列表中删除。

于 2012-11-07T17:19:19.353 回答
5

当我陷入困境时,以下可能是严厉的方法似乎对我有用。它避免更改 AppID/等。至少。

  1. 退出 XCode
  2. rm -rf ~/Library/Developer/Xcode/DerivedData/*
  3. killall usernoted
  4. killall NotificationCenter
  5. rm ~/Library/Application Support/NotificationCenter/*
  6. 打开系统偏好设置→通知(这似乎重新启动了一切)

此方法不需要重新启动/注销。

于 2013-11-08T14:52:18.330 回答
3

我遇到了 BetterTouchTool 在卸载后没有从通知中心消失的问题。不幸的是,这里提到的方法对我不起作用,但我最终想通了。

对于任何无法使其在 High Sierra 下工作的人:

  1. 在终端中,导航到 NotificationCenter 文件夹:

    cd $(getconf DARWIN_USER_DIR)/com.apple.notificationcenter/
    
  2. 使用 pwd 获取路径并复制到剪贴板(应该类似于 /var/folders/c3/289nmdsd2cz68yd5p47k553w0000gn/0/com.apple.notificationcenter)

    pwd
    
  3. 在 finder 中,转到文件夹 (cmd+shift+g) 并粘贴路径
  4. 找到包含 db 文件的文件夹并将整个文件夹拖到垃圾箱(我只有一个名为“db2”的文件夹)
  5. 清空垃圾桶!(这很重要,没有它就无法在我的机器上工作)
  6. 注销并再次登录

可能有一种更优雅的方式,但这对我有用。请注意,由于某种原因,数据库会使用仍然存在于 db 表中的 application_id 进行重建(顺便说一句,在 High Sierra 上调用它app而不是调用app_id),但是该条目从通知中心消失了。

于 2018-08-10T10:33:25.370 回答
2

我只是重命名了 NotificationCenter 文件夹中的文件,然后重新启动。创建了一个新文件,其中仅填充了默认应用程序。

于 2012-09-23T16:17:35.013 回答
0

更改您正在使用用户通知进行调用的项目中的代码

[[NSUserNotificationCenter defaultUserNotificationCenter] removeAllDeliveredNotifications];

从您的应用委托的方法-applicationDidFinishLaunching:。这将从用户通知中心删除所有用户通知。

于 2012-08-24T18:47:07.130 回答
0

您可以从 Xcode 轻松完成此操作。

打开Organizer,然后选择Projects顶部的选项卡。您将在左侧看到所有应用程序的列表。对于您要删除的任何应用程序,从左侧菜单中选择它并Delete...选择Derived Data.

这仍然会保留通知中心中的所有用户设置,以及通知本身。

于 2012-09-07T14:04:07.527 回答
0
  1. 转到查找器
  2. 在“本机”选项卡下搜索 Macintosh HD
  3. 单击应用程序
  4. 按 Shift + Command + G
  5. 输入 ~/library
  6. 单击应用程序支持
  7. 点击通知中心
  8. 将唯一存在的文件拖到废纸篓
  9. 退出所有正在进行的应用程序
  10. 清空垃圾桶
  11. 重新开始

太棒了!根据个人经验,该应用程序已永久删除到您的通知中心。

于 2014-08-09T22:08:32.967 回答
0

我试图删除通知,但在我的情况下,准确地说是针对网站 (9to5mac)。我可以在系统偏好设置中看到它 | 通知并将其设置为禁用,但我继续收到通知。我终于弄明白了。对于网站,您必须进入 Safari,然后进入 Safari Preferences | 网站,然后是通知,然后找到该网站并将其设置为拒绝或完全删除它。我在这里删除了 9to5mac,一旦删除,它也从一般通知中心消失了,真是太棒了!但至少有办法。

同样从我的搜索中,我也使用 sqlite 浏览器打开了通知数据库文件,但找不到我的网络通知“应用程序”,因此您必须在 Safari 中删除/禁用它。

于 2017-08-25T15:09:33.800 回答
0

对于 macOS Catalina,可以通过以下方式找到 db 的路径lsof -p $(ps aux | grep -m1 usernoted | awk '{ print $2 }')| awk '{ print $NF }' | grep 'db2/db$' | xargs dirname

于 2020-10-09T16:03:32.373 回答