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 into ~/Library/Application Support/NotificationCenter/<id>
(in my case, I only had one directory under NotificationCenter), you'll see an <id>.db
file under the directory.*
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 = <app_id>
where <app_id>
is the correct app_id
you found using your select command above.
After doing this, everything stayed around in Notification Center (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.
*:
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
.
jbg notes that as of macOS Monterey (12.x), the directory path is now: $(getconf DARWIN_USER_DIR)com.apple.notificationcenter/db2
, and the db
database's app_info
table has been renamed to app
.