Как стать автором
Обновить

Комментарии 75

Я думаю что скорее эти Skype, Adium и Transmission сделают нормальную поддержку центра уведомлений чем growl сделает такое.
Тем более что последние два — опенсорс, потенциально можно поучаствовать :)
Совершенно согласен. Благодаря тому, кстати, что последние оказались опенсурсными, мне и удалось написать эту штуку, изучая то, как именно дергается гроул в этих приложениях.
Но покуда поддержки нет… :-)
Transmission же отправляет сообщения в центр
Если это обновление вышло менее месяца назад — то я его не приметил. Когда я начинал разработку в исходниках Transmission еще о NC не было ни строчки, и, соответственно, у меня центр был пуст. Но я смотрел stable ветку. Сейчас (проверил) нотификации Transmission v2.61 у меня идут через мой плагин, а не на прямую.
хм. у меня такой поддержки не наблюдается, и вроде бы последняя версия установлена. Поискал — есть ветки в соотв. багтреках (и про одну, и про вторую), в которых ведется обсуждение NC, причем достаточно давно. Может быть это есть в бета-версиях? Т.к. насколько я помню, ограничения на использование локальных уведомлений только программами с AppStore нет (есть только на push-уведомления).
Скорее всего да, это nightbuild'ы, так называемые. Я туда не суюсь. :)
Локальные и push — это штука есть только в iOS. На MacOSX все уведомления только локальные. Пока. Я не помню в документации (которая, на мое удивление, весьма скудна была месяц назад) о push не было ни слова.
Есть, есть :) На WWDC еще были по-моему какие-то полезности…
В любом случае — подход хороший, будем пробовать ставить, спасибо!
Ааа. Так это же не имеет никакого отношения к NC! :) Прочитайте исходник. У Apple тут случилась беда с терминологией. :)
Последняя бета Adium уже использует NC при отсутствии Growl, проверено лично, все работает.
Поддерживаю.
А вот скайп что-то не хочет пока, увы.
Ага. 1.5.3 (stable) тоже. Удивительно. Правда, прям в танке живу.
С другой стороны, мой способ позволяет указать, какие нотификации нужны, какие нет, а какие прятать. (Например, если бы нотификации Connected сохранялись в NC — мне бы это очень не нравилось :) )
Неоднократно увидел в статье новое для меня слово — «инжектор». Можно по подробнее, пожалуйста?:)
Code Injections (wiki) и в частности о SIMBL(wiki)
Кратко говоря это инструмент, позволяющий выполнять код внутри чужого процесса. В частности у меня инжектор используется для того, чтобы выполнить подмену методов, отвечающих за общение с Growl.
Понял. Спасибо!
Можно немного потерпеть, и не ставить SIMBL — Growl 2 должен быть уже на подходе.
Я сам жду Growl 2. Но есть основания полагать, что они не сделают «каждому приложению — своя панелька и настройки в NC». Т.е будет выглядить так-же, как это выглядит у Hiss.
Нет, там фреймворк будет спрашивать у «демона» – куда слать, ему или в NC. И если в NC – то он же сам и перешлет.
Вы правы, так в действительности и оказалось :)
У меня сейчас слипаются глаза, и чего-то, может, я не понимаю, но возник такой вопрос: зачем надо делать прокси-сервис между Гроулом и Центром уведомлений, если это так непросто? Гроул – опенсорсный, разве нельзя взять и переделать его отображение так, чтобы уведомления уходили в центр уведомлений? У них исходники, конечно, так себе (Growl.app я так и не смог собрать, а вот HardwareGrowler собрал и даже локализовал) – если подозрение, что намеренно код подпорчен, чтобы каждый не собирал себе, продавать ведь в АппСторе тоже надо… То есть идея в создании модифицированного Гроула, который бы ставился вместо «родного».
Сам пока сижу на старом гроуле (который в системных настройках) + Hiss. Больше всего неудобств доставляет то, что по уведомлению нельзя быстро перейти к приложению.
Не знаю, зачем делать проксю. Я и не делал. Мой плагин полностью заменяет код, предназначенный для работы с гроул, на код, для работы с NC, в самих приложениях. Он не весит отдельным процессом и ничего на себя не берет, в отличии от Hiss :). Наличие гроула не требуется (однако если его нет, то, например, скайп спешит сбросить его из настроек при перезапуске).

А переписывание самого гроула приведет к тому же, что нам показывает Hiss (это изза специфики работы NC). Тут два варианта — или хакать NC и Гроул (оба сразу. Мало того, что первый не задокументирован как полагается, так еще и закрыт, и лежит в одном из толстенных фреймворков, откуда его дампить крайне не приятно), или приложения. Я пошел по второму пути. В результате нотификации отправляются напрямую NC, без посредников. Ну и соответственно по тыку происходит переход, если он должен был произойти.
т.е. имеется практически готовый патч для adium и transmission!!! А нет желания попросту выслать код разработчикам?
Это не тянет на полноценный патч, это скорее универсальный костыль. И код «патчится» во время рантайма. (Т.е оригинальный код успевает выполниться, и приложение успевает зарегистрироваться в гроул, и даже может отправить туда нотиф). Код почти тривиальный и для разработчиков пользы не несет :)
Не совсем понимаю. Если это не прокси, а замена Гроула и работает даже без самого гроула, то зачем нужны инжекты и SIMBL, как приложения регистрируются в гроуле (при его отсутствии), почему они не регистрируются сразу в CN, раз он заменяет гроул?
Ну тык приложения же нужно *заставить* делать нужное, как-то. Это же какой-то код, и он где-то должен исполнятся. В нашем случае код работы с NC *вставляется* в приложения. Регистрация с гроулом была написана самими разработчиками приложения (очевидно :) ), и она полезна тем, что предоставляет список типов нотификаций (тот самый список, который видно в настройках CentralNotifier у приложений).
Регистрироваться в Notification Center не нужно (там, на момент 13.08.12) не было никакой регистрации. Приложение просто шлет нотификацию, а NotificationCenter сам догадывается, кто и что ему прислал. Регистрация с гроулом (какбы регистрация, на самом же деле гроул, например, выключен) позволяет получить этот список, о котором говорил выше, и получить чуть больше контроля над нотификациями.

Думаю самый быстрый способ понять, как это работает, это скачать исходник и посмотреть: кода, как впрочем и коментариев, там мало, и все достаточно прозрачно выглядит :)
В каждом приложении, которое умеет слать уведомления в Growl, есть гроуловый фреймворк, в котором бинарник гроула на 96кб. Что внутри, не знаю, но кажется, это готовый модуль для отправки уведомлений в гроул. То есть приложения сами шлют сообщения гроулу, а он их показывает. Почему нельзя сделать модифицированные гроул, который принимаемые сообщения просто пересылал бы дальше в системный NC?
Зачем что-то внедрять в приложение, если оно уже внедрено?
Я реально пока просто не понимаю, каким образом происходит обмен собщениями — гроул сам опрашивает зарегистрированные приложения, или приложения каким-то образом уведомляют гроул. В исходниках копаться сложно, так как от objC кружится голова ))
Модифицировать сам гроул нельзя, потому что он у всех разных версий, а у кого-то вообще жестко залинкован в бинарник (да, есть и такие). Более того, патчевание (есть такое слово?) бинарника приведет к потере подписи кода, из-за чего KeyChain перестанет выдавать приложению ключи. И это жестко нарушает лицензию. Вообще изменять бинарник это Bad.

ЗЫ: Да-да, у каждого приложения свой Growl.Framework и, получается, нужно каждый патчить, при том разный патч под разные версии. Смысл?

А модифицированный гроул == Hiss. Результат такой отправки виден на 1 скриншоте. Отправили нотификацию из процесса гроула — получите нотиф от его же лица. По другому — только редактируя (так же, как я, инжектируясь, но уже в сам Notification Center) поведение самого NC (что собственно и сделали разработчки Bark, см внизу коментариев).
А потом приложение стучится к себе на сервер, ловит в себе инжект и юзеру прилетает бан.
Где такое видано?
Как бы в EULA написано: «вы не имеете права заниматься реверс-инжинирингом, модификацией и вмешиваться в работу нашего суперофигенного приложения»
Где видана на то проверка? :) Да и не представляю, как это можно засечь, ведь ни файлы не модифицируются, ни что бы то ни было еще. Просто происходит подмена указателя на метод, так сказать. Интересно, как это можно поймать. Надо безопасников потыкать…
ну если в игры Близзард инжектировать, то опасно наверное, да, но с 99% софта — пофигу.
Помоему maximizer инжектируется в WoW и я еще жив :D CN не будет инжектироваться, если приложение не использует гроул.
ну вообще было бы странно, еслиб все эти защиты ругались на системную возможность (SIMBL). То что ее используют для внедрения кода, а не по прямому назначению — уже другой вопрос.
Ну вообще прямое ее назначение — это и есть внедрение кода :D Сам автор для того его и писал. Кстати очень удобная штука. Например с помощью нее я научил Ecoute принимать клик мышки за даблклик, и листать список песен нормально, а не как было сделано изначально. Очень удобная штука этот SIMBL :)
Ок, я напутал, SIMBL — сторонняя хрень, юзающая возможности системного Input Manager
4) SIMBL.osax -> /Library/ScriptingAdditions *

Поясните этот шаг, пожалуйста.
SIMBL.osax — это основной бандл SIMBL.
Проблема: SIMBL не инжектируется в приложения, если у них нет иконки в Dock. (Да, да, да, WTF). Проблема в том, что если у приложения нет в доке иконки, то это NSUIElement приложение, или в новой терминологии — Agent Application. Почти Daemon, только с гуей. И, по каким-то не ясным мне соображениям, имеет место задокументированный, но трудно находимый факт: NSWorkspace не отсылает нотификации о запуске Agent-Apps, а именно эти нотификации запуска слушает SIMBL.
Я его модифицировал и теперь слушаю старты процессов через функции Carbon.
Спасибо, понял.
С Growl начинается каждый мой сеанс работы с Мак. Он всё время просит обновиться на платную версию, а снести руки не доходят.
Теперь можно будет и удалить :)
Надо отключить проверку обновлений.
НЛО прилетело и опубликовало эту надпись здесь
Это же не IKEA. Мне проще снести.
У кого-нибудь есть на примете бесплатный RSS-ридер с поддержкой Notification Center?
В Growl 2 либе для разработчиков если в системе Growl не установлен вообще, то шлется в Notification Center. Т.е. достаточно вообще снести Growl.
Адиум уже внедрил и в своей бета-версии шлет уведомления в Notofocation Center если в системе нет Growl-а.
И во всех приложениях обновить growl.framework до 2 версии. Покуда разрабы этого не сделали — сидим ждем. :)
Я перешел на ML недавно. Какой смысл в Notification center если я не вижу что появились какие-то оповещения?
Всмысле? Оповещение появляется в правом верхнем углу, и через n секунд прячется + издает звук, если приложение того хочет.
Это понятно. Я отвлекся/забил на оповещения. Как мне узнать что появились новые? Т.е. на телефоне например в баре сверху торчат иконки.
Плюс у меня при нажатии на оповещение от Sparrow письмо становится прочитанным вместо того чтобы открыть его в окне. Это зависит от приложения или во всех нажатие на попап просто закрывает его?
На телефоне не торчат иконки в баре сверху (с удивленными глазами полез смотреть на свой iPhone с iOS5). У меня около дофига нотификаций и никаких иконок нет. Сеть, время, замочек да батарейка.
И да, зависит от приложения. Разработчик так написал сам :).
А, ок ) Значит в этом плане андроид получше. Куплю пятерку надо будет посмотреть что для этого есть в джейле — полезный функционал.
Я могу ошибаться, но адиум нормально работает с центром уведомлений. И скайп кажется тоже.
Или я сделал какие-то магические вещи у себя на ноуте и рабочем аймаке?

Growl отключил совсем.

image
Хм, да, действительно — Adium 1.5.3 добавил Growl SDK 2. А по клику в нотификацию адиум выскакивает? И есть ли где-нибудь настройки, какие нотификации отображать, какие нет, и хранить их, или нет (например нотификациям Connected в центре явно не место. Отобразили и хватит)?
Что-то я в пещере прям живу, надо было месяц назад это дело выпустить, тогда было бы актуальней некуда :D
При клике открывается там с сообщением.
У меня показываются только новые сообщения, когда не открыто окно с чатами, кажется.
Подозреваю, что события, которым показывать уведомления, настраиваются внутри Адиума на закладке «События». Но там как-то все криво…
А как вы добавили в NC Facebook?
Попробуйте это: link.
Спасибо, работает)
Нынче уже официально в составе 10.8.2
спасибо! работает
правда папку ~/Library/Application Support/SIMBL/Plugins/ пришлось ручками создать…
Что странно, я помню, что в скрипте установки симбла была строка о создании папки. Прекрасно, что работает! :)
я уже понял изза чего
я поставил прогу для всех пользователей… и папка создалась в корне т.е. без ~
Чот плохо вы искали, Hiss не единственный. Вот например Bark
Ого! Меня опередели, как с пряморукостью так и со скоростью! :)
Но я уверен, что в начале августа Bark'a не существовало. :) в любом случае я получил много удовольствия и знаний, создавая CN, оно того стоило :)
Хорошие идеи всегда приходят в голову одновременно нескольким людям )
НЛО прилетело и опубликовало эту надпись здесь
Я думаю, что модификация одной сущности (пусть и без исходников, в случае Obj-C хвадает дампа header'ов в силу любвиКОченьSelfDesrcribingНазваниямМетодов(С) ) гораздо более пряморука, чем модификация целой оравы онных в слепую, как мне кажется :) В любом случае, думаю мой подход тоже имеет право на существование, правда требует, наверное, доработки :)
Как оказалось, у них допилено не до конца, и тык по нотификации приводит не к тому, к чему ожидалось. У меня это реализованно так, как того ожидает юзверь. Я отписал им с предложением помочь. Эххх. Теперь удалять все эти гроулы и возвращать обратно свой CN :)
Последнее обновление Growl сделало доступным свой собтвенный прокси в notification center.
image
Версию 1.4 удалось собрать и заставить работать. Интересно, выложат ли они 2.0 и через какое время после релиза? Хотя меня сейчас вроде всё устраивает (Growl + Bark).
А нельзя никак скрывать уведомления от нотификейш-центра? Как в гроле был крестик, например.
Можно — просто смахните его вправо, зажав лкм =)
Ааа, вы мой спаситель :))
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории