从通知中心删除应用程序

时间:2012-08-16 18:20:33

标签: macos osx-mountain-lion nsusernotification

嘿,我正在玩一个小的可可应用程序,并在Mountain Lion中使用新的Notification Center API。但是,我的应用程序现在存在于通知中心设置中,还有日历,消息等。

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

11 个答案:

答案 0 :(得分:31)

我被困在同一条船上。

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

如果有人知道一种不太复杂的方式,我全都听见了。

答案 1 :(得分:7)

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

答案 2 :(得分:4)

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

  1. 退出XCode
  2. rm -rf ~/Library/Developer/Xcode/DerivedData/*
  3. killall usernoted
  4. killall NotificationCenter
  5. rm ~/Library/Application Support/NotificationCenter/*
  6. 打开系统偏好设置→通知(这似乎重启所有内容)
  7. 此方法不需要重新启动/注销。

答案 3 :(得分:1)

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

答案 4 :(得分:1)

卸载后,我遇到了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. 注销并再次登录

也许有一种更优雅的方式,但这对我有用。 请注意,由于某种原因,数据库被重建,而application_id仍然存在于db-table中(在High Sierra,btw中称为app而不是app_id),但是该条目从通知中消失了中心。

答案 5 :(得分:0)

使用用户通知更改您正在播放的项目中的代码以调用

[[NSUserNotificationCenter defaultUserNotificationCenter] removeAllDeliveredNotifications];

来自您的app delegate的方法-applicationDidFinishLaunching:。这将从用户通知中心删除所有用户通知。

答案 6 :(得分:0)

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

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

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

答案 7 :(得分:0)

  1. 转到Finder
  2. 在“This Mac”标签下搜索Macintosh HD
  3. 点击应用
  4. 按Shift + Command + G
  5. 输入〜/ library
  6. 单击“应用程序支持”
  7. 点击通知中心
  8. 将唯一的文件拖到“废纸篓”
  9. 退出所有正在进行的应用
  10. 清空垃圾箱
  11. 重新启动
  12. Tadaaa!该应用程序已根据个人经验永久删除到您的通知中心。

答案 8 :(得分:0)

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

同样从我的搜索中,我也用sqlite浏览器和我的网络通知打开了通知数据库文件&#34; app&#34;找不到,所以你必须在Safari中删除/禁用它。

答案 9 :(得分:0)

突出显示列表中的应用,然后在键盘上按fn + backspacedel / delete

答案 10 :(得分:0)

对于macOS Catalina,使用lsof -p $(ps aux | grep -m1 usernoted | awk '{ print $2 }')| awk '{ print $NF }' | grep 'db2/db$' | xargs dirname

找到数据库的路径