2011-01-28 2 views
0

Итак, у меня есть приложение 'myApp', и я предпочитаю загружать 'myApp' при входе в систему. У меня это все работает отлично через запуск программ:launchd для запуска и скрыть приложение

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
    <dict> 
    <key>Label</key> 
     <string>com.myAppDomain.myApp</string> 
    <key>ProgramArguments</key> 
     <array> 
     <string>/Applications/myApp.app/Contents/MacOS/myApp</string> 
     </array> 
    <key>RunAtLoad</key> 
     <true/> 
    </dict> 
</plist> 

Я также хотел бы, чтобы дать пользователю возможность также сокрытие «MYAPP»

Я попытался создать Баш скрипт, и добавление в массив ProgramArguments в моем lauchd PLIST:

#!/bin/sh 

osascript=/usr/bin/osascript 

$osascript -e 'tell application "System Events" to set visible of process "'myApp'" to false' 

exit 0 

, но это либо не запускается, или это более вероятно, работает до моего приложения имел возможность инициализировать.

Есть ли более простой способ сделать это, что я просто пропускаю? благодарит заранее.

ответ

1

Вы можете просто установить логическое значение в ваших предпочтениях PLIST по телефону

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"HideOnLaunch"]; 

, когда пользователь выбирает, чтобы скрыть свое приложение на запуск.

Затем, когда ваше приложение запускается через запуск программ, само приложение может проверить настройку HideOnLaunch в applicationDidFinishLaunching:, и скрыть себя соответственно:

if([[NSUserDefaults standardUserDefaults] boolForKey:@"HideOnLaunch"]){ 
    [[NSApplication sharedApplication] hide:nil]; 
} 

Не позволяйте launchd, чтобы скрыть свое приложение!

Другим подходом было бы следующее: вы можете легко передать аргумент программе Cocoa. Как описано в this NSUserDefaults document, если вы запускаете приложение какао, как это:

AnApp.app/Contents/MacOS/AnApp -FuBar YES 

Тогда вы можете получить значение YES через [[NSUserDefaults standardUserDefaults] boolForKey:@"FuBar"].

Таким образом, в зависимости от предпочтений пользователя вы можете написать параметр launchd с аргументом -HideOnLaunch YES или -HideOnLaunch NO.

Так, в делегат своего приложения, предположительно в applicationDidFinishLaunching:, скрыть свое приложение в зависимости от того, является ли аргумент программы
HideOnLaunch установлен.

0

Спасибо Yuji.

Я закончил с запущенного PLIST, как это:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
     <key>Label</key> 
    <string>com.myAppDomain.MyApp</string> 
    <key>ProgramArguments</key> 
    <array> 
     <string>/bin/sh</string> 
     <string>-c</string> 
     <string>/Applications/MyApp.app/Contents/MacOS/MyApp -hideOnLogin YES</string> 
    </array> 
    <key>RunAtLoad</key> 
    <true/> 
</dict> 
</plist> 

Я добавил Баш скрипт в виде строк в ключе ProgramArguments, так как Apple, делает в следующем PLIST:

~/Library/LaunchAgents/com.apple.FTMonitor.plist 

hideOnLogin ключ доступен только через панель запуска, и сбрасывается, когда myApp завершает работу.У меня есть флажок, связанный с другим ключом «hideOnLoad», и когда это изменится, я переписать запущенный PLIST либо:

/Applications/MyApp.app/Contents/MacOS/MyApp -hideOnLogin YES 

или

/Applications/MyApp.app/Contents/MacOS/MyApp 

в зависимости от обстоятельств.

При запуске я затем проверяю, являются ли оба значения по умолчанию истинными, если они есть, я скрываю myApp, например: [NSApp hide: self];

Еще раз спасибо за указание меня в правильном направлении!