【问题标题】:Remove application from Notification Center从通知中心删除应用程序
【发布时间】:2012-08-13 03:44:07
【问题描述】:

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

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

【问题讨论】:

    标签: macos osx-mountain-lion nsusernotification


    【解决方案1】:

    对于 macOS Catalina,可以使用 lsof -p $(ps aux | grep -m1 usernoted | awk '{ print $2 }')| awk '{ print $NF }' | grep 'db2/db$' | xargs dirname 找到数据库的路径

    【讨论】:

      【解决方案2】:

      突出显示列表中的应用程序,然后点击backspacedel/delete(如果您的键盘上有该应用程序)。

      【讨论】:

      • 玫瑰是红色的,紫罗兰是蓝色的,为了帮助我,我现在也爱你。
      • 非常感谢,这是一种比其他方法更简单的解决方案 :-)
      • 再点赞,让更多人看到。谢谢。
      • 这个解决方案在 Catalina 上对我有用。
      【解决方案3】:

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

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

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

      【讨论】:

      • 我个人认为这是最好的解决方案。
      【解决方案4】:

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

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

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

        cd $(getconf DARWIN_USER_DIR)/com.apple.notificationcenter/
        
      2. 使用密码获取路径并复制到剪贴板 (应该类似于 /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,顺便说一句),但是该条目从通知中心消失了。

      【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:

        我被困在同一条船上。

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

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

        编者注Hofi指出从macOS 10.10开始说SQLite数据库可以在shell命令返回的目录中找到
        @987654324 @,只命名为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>
        

        您使用上面的选择命令找到的正确 app_id 在哪里。

        令人沮丧的是,执行此操作后,所有内容都保留在 NotificationCenter(中心和系统偏好设置)中。我必须注销并重新登录才能看到更改生效,但幸运的是,我的多个测试应用程序现在已经消失了 ;-)

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

        【讨论】:

        • 您可以sudo killall usernoted 避免退出。
        • 在 10.10 上,db 移动以获取从终端运行的位置 cd $(getconf DARWIN_USER_DIR)/com.apple.notificationcenter/db
        • 删除条目后重启后重新插入。
        • 遗憾的是,这对我不起作用。最新版本的 macOS 有什么变化吗?
        • 数据库现在位于$(getconf DARWIN_USER_DIR)com.apple.notificationcenter/db2 目录中。它仍然被称为db,并且仍然是一个 SQLite 数据库。 app_info 表已更名为 app
        【解决方案7】:
        1. 转到查找器
        2. 在“本机”选项卡下搜索 Macintosh HD
        3. 点击应用程序
        4. 按 Shift + Command + G
        5. 输入 ~/library
        6. 点击应用支持
        7. 点击通知中心
        8. 将唯一的文件拖到废纸篓
        9. 退出所有正在运行的应用程序
        10. 清空垃圾箱
        11. 重启

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

        【讨论】:

          【解决方案8】:

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

          【讨论】:

          • 这就是最终为我做的事情(~/Library/Application Support/NotificationCenter 中没有文件)。
          【解决方案9】:

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

          【讨论】:

          • 您重命名的文件的原始名称(完整路径?)是什么?这样做会重置通知中心的所有偏好设置吗?
          【解决方案10】:

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

          [[NSUserNotificationCenter defaultUserNotificationCenter] removeAllDeliveredNotifications];
          

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

          【讨论】:

          • 嗯,如果我尝试使用 SCIUserNotificationCenter 类,则无法编译,没有。但是,如果我更改为 NSUserNotificationCenter,它确实可以编译,但我的应用程序仍保留在列表中。 removeAllDeliveredNotifications 可能只是清除任何当前通知的一种方式。您的应用仍会出现在通知中心列表中。
          • 已编辑以修复错字——在用户通知中心使用了错误的前缀。
          【解决方案11】:

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

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

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

          【讨论】:

            猜你喜欢
            • 2018-08-07
            • 1970-01-01
            • 2019-10-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-10-11
            • 1970-01-01
            相关资源
            最近更新 更多