Macos 从通知中心删除应用程序

Macos 从通知中心删除应用程序,macos,osx-mountain-lion,nsusernotification,Macos,Osx Mountain Lion,Nsusernotification,嘿,我在玩一个小cocoa应用程序,并在Mountain Lion中使用新的通知中心API。但是,我的应用程序现在与日历、消息等一起出现在通知中心设置中 由于只是我在玩,我希望它现在从列表中消失,但我找不到任何方法来删除它,尝试了几种方法,将其拖出,按住alt+右键单击等等。有人知道填充该列表的(可能是一个)plist的位置吗?更改项目中的代码,在该项目中使用用户通知进行调用 [[NSUserNotificationCenter defaultUserNotificationCenter] re

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


由于只是我在玩,我希望它现在从列表中消失,但我找不到任何方法来删除它,尝试了几种方法,将其拖出,按住alt+右键单击等等。有人知道填充该列表的(可能是一个)plist的位置吗?

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

[[NSUserNotificationCenter defaultUserNotificationCenter] removeAllDeliveredNotifications];

从应用程序代理的方法
-applicationdFinishLaunching:
。这将从用户通知中心删除所有用户通知。

我被困在同一条船上

虽然我不认为从NotificationCenter中清除已注册的应用程序是一个有文档记录的步骤,但显然有一些设置可以做到这一点。这是我发现的。这些数据不是存储在plist中,而是存储在sqlite数据库中

如果您查看
~/Library/Application Support/NotificationCenter/
(在我的例子中,NotificationCenter下只有一个目录),您将在该目录下看到一个
.db
文件

编者按:指出由于macOS 10.10说SQLite数据库可以在shell命令返回的目录中找到
$(getconf DARWIN\u USER\u DIR)com.apple.notificationcenter/db
,名为just
db

翻进去,我看到了一些表,如
app\u info
app\u source
呈现的\u通知
,等等。此外,模式包括一个清理触发器,如下所示:

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\u id
,第二列是应用程序的bundleid。根据bundleid查找您的应用程序。然后做一个测试

delete from app_info where app_id = <app_id>
从应用程序信息中删除,其中应用程序id=
其中是使用上面的select命令找到的正确应用程序id

令人沮丧的是,在这样做之后,所有东西都留在NotificationCenter(中心和系统首选项)。我必须注销并重新登录才能看到更改生效,但幸运的是,我的多个测试应用程序现在已不存在;-)


如果有人知道一种不那么复杂的方法,我洗耳恭听。

您可以在Xcode中轻松做到这一点

打开
组织者
,然后选择顶部的
项目
选项卡。 您将在左侧看到所有应用程序的列表。对于要删除的任何应用程序,请从左侧菜单中选择它,然后选择
Delete…
作为
派生数据的


这仍然保留NotificationCenter中的任何用户设置以及通知本身。

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

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

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

  • 退出XCode
  • rm-rf~/Library/Developer/Xcode/DerivedData/*
  • killall usernoted
  • killall通知中心
  • rm~/Library/Application Support/NotificationCenter/*
  • 开放系统首选项→ 通知(这似乎重新启动了一切)
  • 此方法中不需要重新启动/注销

  • 去找Finder
  • 在“此Mac”选项卡下搜索Macintosh HD
  • 单击应用程序
  • 按Shift+Command+G
  • 输入~/library
  • 单击应用程序支持
  • 单击通知中心
  • 将唯一存在的文件拖到垃圾箱中
  • 退出所有正在运行的应用程序
  • 空垃圾
  • 重新启动

  • 塔达阿!该应用程序已根据个人经验永久删除到您的通知中心

    我试图删除一个通知,但在我的例子中,确切地说是一个网站(9to5mac)。我可以在System Preferences | Notifications中看到它并将其设置为禁用,但我继续收到通知。我终于明白了。对于网站,您必须进入Safari,然后进入Safari首选项、网站、通知,然后找到该网站并将其设置为拒绝,或者干脆将其全部删除。我在这里删除了9到5MAC,一旦我删除了,它也从通用通知中心消失了,真是一个pita!但至少有办法


    另外,在搜索过程中,我也使用sqlite浏览器打开了通知数据库文件,但找不到我的web通知“app”,因此您必须在Safari中删除/禁用它。

    卸载后,BetterTouchTool没有从通知中心消失,这使我遇到了麻烦。不幸的是,这里提到的方法对我不起作用,但我最终找到了答案

    对于在高强度条件下无法使其工作的任何人:

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

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

  • 在finder中,转到文件夹(cmd+shift+g)并粘贴路径
  • 找到包含db文件的文件夹,并将整个文件夹拖到垃圾箱中 (我只有一个名为“db2”的文件夹)
  • 空垃圾!(这非常重要,没有它我的机器无法工作)
  • 注销并重新登录
  • 也许有一种更优雅的方式,但这对我很有效。 请注意,由于某些原因,数据库重建时应用程序id仍然存在于db表中(称为
    app
    ,而不是pwd