Remove application from Notification Center

前端 未结 11 1820
自闭症患者
自闭症患者 2020-12-08 01:21

Hey I was playing around with making a small cocoa application and using the new Notification Center API in Mountain Lion. However my app is now present in the notification

11条回答
  •  谎友^
    谎友^ (楼主)
    2020-12-08 02:04

    I was stuck in the same boat.

    While I don't believe purging applications from Notification Center that have once registered is a documented step, there's clearly some stuff setup to do that. Here's what I found out. This data isn't stored in a plist but rather a sqlite database.

    If you look ~/Library/Application Support/NotificationCenter/ (in my case, I only had one directory under NotificationCenter), you'll see an .db file under the directory.

    Editor's note: Hofi points out that since macOS 10.10 said SQLite database can be found in the directory returned by shell command
    $(getconf DARWIN_USER_DIR)com.apple.notificationcenter/db, named just db.

    Poking inside, I see tables like app_info, app_source, presented_notifications, etc. Furthermore, the schema includes a clean-up trigger that looks like this:

    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;
    

    Using a sqlite3 client, if you do a

    select * from app_info;
    

    the first column is the app_id of your application, the second column is your app's bundleid. Find your application based on the bundleid. Then do a

    delete from app_info where app_id = 
    

    where is the correct app_id you found using your select command above.

    What was frustrating was that after doing this, everything stayed around in NotificationCenter (both the center and System Preferences). I had to logout and log back in to see the changes take effect, but luckily, my multiple test apps are now gone ;-)

    If anyone knows of a less convoluted way, I'm all ears.

提交回复
热议问题