Использование уведомлений Mac с Monomac

В настоящее время я переношу простое приложение в трее из Windows (C#, .Net, Winforms) в OS X (C#, MonoMac, Cocoa). Большая часть работы выполнена, но у меня возникли проблемы с эквивалентом всплывающей подсказки в OS X, которую часто используют приложения панели задач Windows для обмена информацией: Пример всплывающей подсказки с воздушным шаром

Я не очень много использовал OS X, но у меня сложилось впечатление, что эквивалентом является уведомление: Пример уведомления

Но я не могу понять, как использовать это из MonoMac. При поиске в Интернете я нахожу что-то под названием «Уведомления Growl», но, похоже, это сторонняя библиотека, которая меня не интересует (если ее можно избежать). В среде MonoMac также есть класс под названием NSNotification, но опять же, я не могу заставить его работать.

У кого-нибудь есть пара советов для бедного программиста Windows?


person Erlend D.    schedule 08.03.2013    source источник
comment
Идите с Growl, это потрясающе и наиболее часто используется для OSX (насколько я знаю).   -  person Karl-Johan Sjögren    schedule 09.03.2013
comment
Но для этого пользователю нужно установить Growl (и даже купить его?)? Мне не нравится, как это звучит. Неужели нет простого нативного (ну, моно-нативного) способа сделать это? Я имею в виду, что в Windows это трехстрочный код, в OS X это не должно быть намного сложнее?   -  person Erlend D.    schedule 10.03.2013
comment
Кажется, есть встроенное приложение под названием Центр уведомлений, которое вы можете использовать для этого, но только для пользователей, у которых есть Lion или выше (чтобы исключить довольно много пользователей).   -  person Karl-Johan Sjögren    schedule 10.03.2013
comment
Центр уведомлений @Karl-JohanSjögren был представлен в версии 10.8 / Mountain Lion   -  person TheNextman    schedule 11.03.2013
comment
MonoMac кажется в основном заброшенным, поэтому у него может не быть API. Однако Xamarin.Mac это делает.   -  person millimoose    schedule 11.03.2013
comment
Это правда, что Xamarin.Mac связывает дополнительные API, но MonoMac точно нельзя назвать заброшенным. Это основа Xamarin.Mac, в которую регулярно вносятся дополнения. При этом у него есть API NSUserNotification, а также github. com/mono/monomac/blob/master/src/foundation-desktop.cs   -  person TheNextman    schedule 11.03.2013
comment
@TheNextman Я просматривал эту страницу, которая слегка вводит в заблуждение. Спасибо, что прояснили это.   -  person millimoose    schedule 11.03.2013


Ответы (1)


Эквивалентом для Mac является центр уведомлений. Это было введено в ОС 10.8 (Горный лев).

До того, как был представлен центр уведомлений, эту функциональность можно было добавить с помощью сторонней библиотеки Growl. Growl по-прежнему применим во многих случаях, поскольку он более функционален, чем собственный центр уведомлений. Growl — это платное дополнение, которое пользователи должны купить и установить.

NSNotification часть Mac API, которая используется для передачи сообщений между объектами и процессами. Это не уведомление пользователя. Это сбивает с толку, потому что NSNotification и NSNotificationCenter — это имена этих старых API; в то время как более новые API-интерфейсы уведомлений «пользователя», которые вас интересуют, называются NSUserNotification и NSUserNotificationCenter.

Предполагая, что ваши пользователи используют 10.8 / Mountain Lion, было бы лучше использовать OS X центр уведомлений. Похоже, есть пример, демонстрирующий это. Если вам необходимо поддерживать более ранние версии, Growl — хороший вариант, но пользователям придется приобрести/установить его. В противном случае вы могли бы разработать что-то самостоятельно.

Еще один момент заключается в том, что Growl выполняет интегрировать с родным центром уведомлений, так что это не обязательно решение "или-или". Это зависит только от того, что вы хотите поддержать.

person TheNextman    schedule 11.03.2013
comment
В противном случае вы могли бы разработать что-то самостоятельно - пожалуйста, не надо. Причина повсеместного распространения Growl заключается в том, что уведомления появляются и действуют предсказуемо и последовательно — это здорово. - person millimoose; 11.03.2013
comment
Спасибо, это проясняет многие мои вопросы! Но что произойдет, если я решу использовать Growl, а пользователь не захочет устанавливать Growl? Мое приложение вообще не запустится, или пользователь не получит никаких уведомлений? - person Erlend D.; 11.03.2013
comment
@ЭрлендД. Пользователь просто не будет получать никаких уведомлений - person TheNextman; 11.03.2013