запускается, чтобы запустить и скрыть приложение - PullRequest
0 голосов
/ 28 января 2011

Итак, у меня есть приложение «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'

Я попытался создать скрипт bash и добавитьмассив ProgramArguments в моем списке lauchd:

#!/bin/sh

osascript=/usr/bin/osascript

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

exit 0

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

Ответы [ 2 ]

1 голос
/ 28 января 2011

Вы можете просто установить bool в списке предпочтений, позвонив по номеру

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

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

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

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

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

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

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

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

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

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

0 голосов
/ 28 января 2011

Спасибо, Юджи.

Я закончил с запущенным списком, подобным этому:

<?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>

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

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

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

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

или

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

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

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

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

...