Я пытаюсь создать приложение, которое будет иметь только значок в трее, и не появится на панели задач. (аналогично Dropbox) Мне нужно создать как Windows, так и Mac версию приложения, поэтому я попытался использовать MonoMac для создания интерфейса Mac.
Каков наилучший способ создания приложения только для лотков в MonoMac?
Все ресурсы, которые я нашел, говорят, чтобы сделать одну из двух вещей:
- Добавить
<key>LSUIElement</key><string>1</string>
в файлInfo.plist
. - Добавьте следующий код в событие
FinishedLaunching
в классеAppDelegate
:NSApplication.SharedApplication.ActivationPolicy = NSApplicationActivationPolicy.Accessory;
Я пробовал все комбинации этих двух, но кажется, что как только я попытаюсь создать экземпляр С# System.Timers.Timer
, значок появится снова в док-станции в нижней части экрана. Я что-то пропустил о том, как OSX обрабатывает фоновые приложения?
Что я делаю неправильно? Есть ли лучший способ сделать фоновое приложение, имеющее значок верхнего лотка, но без значка нижней док-станции в OSX?
(Это очень похоже на этот вопрос SO > , но этот вопрос был от пары лет назад и никогда не был полностью отвечен, поэтому я надеюсь, что может быть более полный ответ там.)
Вот код, который у меня есть до сих пор:
public partial class AppDelegate : NSApplicationDelegate
{
MyServiceObject currentServiceObject;
public AppDelegate () { }
public override void FinishedLaunching (NSObject notification)
{
// Construct menu that will be displayed when tray icon is clicked
var notifyMenu = new NSMenu();
var exitMenuItem = new NSMenuItem("Quit My Application",
(a,b) => { System.Environment.Exit(0); }); // Just add 'Quit' command
notifyMenu.AddItem(exitMenuItem);
// Display tray icon in upper-right-hand corner of the screen
var sItem = NSStatusBar.SystemStatusBar.CreateStatusItem(30);
sItem.Menu = notifyMenu;
sItem.Image = NSImage.FromStream(System.IO.File.OpenRead(
NSBundle.MainBundle.ResourcePath + @"/notify-icon.icns"));
sItem.HighlightMode = true;
// Remove the system tray icon from upper-right hand corner of the screen
// (works without adjusting the LSUIElement setting in Info.plist)
NSApplication.SharedApplication.ActivationPolicy =
NSApplicationActivationPolicy.Accessory;
// Start running the program -- If I comment out then no dock icon appears
currentServiceObject = new MyServiceObject();
}
}