Удалить приложение из Центра уведомлений - программирование

Удалить приложение из Центра уведомлений

Эй, я играл с небольшим приложением cocoa и использовал новый API Notification Center в Mountain Lion. Однако мое приложение теперь присутствует в настройках центра уведомлений, а также в Календаре, сообщениях и т.д.

Как только я играл, я хочу, чтобы он исчез из списка сейчас, но я не могу найти его, чтобы удалить его, пробовал несколько вещей, перетаскивая его, удерживая Alt + правый клик и так далее. Кто-нибудь знает, где находится (возможно, а) plist, который заполняет этот список?

4b9b3361

Ответ 1

Я застрял в одной лодке.

Хотя я не считаю, что очистка приложений из Центра уведомлений, которые когда-то были зарегистрированы, является документированным шагом, для этого явно существует какая-то настройка. Вот что я узнал. Эти данные не сохраняются в plist, а скорее в базе данных sqlite.

Если вы посмотрите ~/Library/Application Support/NotificationCenter/<id> (в моем случае у меня был только один каталог в NotificationCenter), вы увидите файл <id>.db в каталоге.

Примечание редактора: Hofi указывает, что , поскольку macOS 10.10 говорит, что база данных SQLite может можно найти в каталоге, возвращенном командой оболочки
 $(getconf DARWIN_USER_DIR)com.apple.notificationcenter/db, названный просто db.

Внутри я вижу таблицы типа app_info, app_source, presented_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 вашего приложения, второй столбец - ваш пакет приложений. Найдите свое приложение на основе пакета. Тогда сделайте

delete from app_info where app_id = <app_id>

где находится правильный app_id, который вы нашли, используя команду select выше.

Что было разочаровывающим, так это то, что после этого все оставалось в NotificationCenter (как в центре, так и в системных настройках). Мне пришлось выйти из системы и войти в систему, чтобы увидеть, как изменения вступят в силу, но, к счастью, мои многочисленные тестовые приложения теперь исчезли; -)

Если кто-то знает менее запутанный путь, я все уши.

Ответ 2

Если вы удалите приложение (возможно, необходимо также удалить мусор), и выйдите из системы и вернитесь, он будет удален из списка.

Ответ 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

Я просто переименовал файл в папку NotificationCenter, а затем перезагрузился. Создан новый файл, в котором были заполнены только приложения по умолчанию.

Ответ 5

У меня были проблемы с BetterTouchTool, не исчезающим из Центра уведомлений после удаления. К сожалению, методы, упомянутые здесь, не помогли мне, но я понял это в конце концов.

Для любого, кто испытывает затруднения, заставляя это работать под Высшей Сьеррой:

  1. В терминале перейдите в папку NotificationCenter:

    cd $(getconf DARWIN_USER_DIR)/com.apple.notificationcenter/
    
  2. получить путь с помощью pwd и скопировать в буфер обмена (должно быть что-то вроде /var/folders/c3/289nmdsd2cz68yd5p47k553w0000gn/0/com.apple.notificationcenter)

    pwd
    
  3. В поиске перейдите в папку (cmd + shift + g) и вставьте путь
  4. Найдите папку, содержащую файл db, и перетащите всю папку в корзину (у меня была только одна папка с именем "db2")
  5. Пустая корзина! (Это очень важно, не работал на моей машине без него)
  6. Выйти и снова войти

Там может быть более элегантный способ, но это сработало для меня. Обратите внимание, что по какой-то причине база данных перестраивается с помощью application_id, все еще присутствующего в db-таблице (которая называется app вместо app_id в High Sierra, кстати), однако запись исчезла из центра уведомлений.

Ответ 6

Измените код в проекте, который вы играли с уведомлениями пользователя, чтобы позвонить

[[NSUserNotificationCenter defaultUserNotificationCenter] removeAllDeliveredNotifications];

из вашего метода делегирования приложения -applicationDidFinishLaunching:. Это приведет к удалению всех уведомлений пользователей из центра уведомлений пользователя.

Ответ 7

Вы можете сделать это легко с Xcode.

Откройте Organizer и выберите вкладку Projects вверху. На левой стороне вы увидите список всех ваших приложений. Для любого приложения, которое вы хотите удалить, выберите его в левом меню и выберите Delete... для Derived Data.

Это все еще сохраняет пользовательские настройки в Notification Center, а также сами уведомления.

Ответ 8

  • Перейти в Finder
  • Поиск Macintosh HD под вкладкой "Этот Mac"
  • Нажмите "Приложения"
  • Нажмите Shift + Command + G
  • Введите ~/library
  • Нажмите "Поддержка приложений"
  • Нажмите Центр уведомлений
  • Перетащите единственный файл, который есть в корзину
  • Закройте все входящие приложения.
  • Очистить корзину
  • Restart

Tadaaa! Приложение было удалено в Центр уведомлений на основе личного опыта.

Ответ 9

Я пытался удалить уведомление, но в моем случае это было для веб-сайта (9to5mac), чтобы быть точным. Я мог бы увидеть его в System Preferences | Уведомления и установите его для отключения, но я продолжал получать уведомления. Я наконец-то понял. Для веб-сайтов вы должны войти в Safari, затем Настройки Safari | Веб-сайты, затем Уведомления, затем найдите веб-сайт и либо установите его на "Запретить", либо просто удалите его. Я удалил 9to5mac здесь, и однажды я это сделал, он также исчез из общего центра уведомлений, что за лаваш! но, по крайней мере, есть способ.

Кроме того, из моего поиска я также открыл файл DB уведомлений с помощью браузера sqlite, и мое "уведомление" о веб-уведомлении не было найдено, поэтому вам нужно его удалить или отключить в Safari.