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」も非表示にするオプションをユーザーに提供したいと思います

bash スクリプトを作成して、lauchd plist の ProgramArguments 配列に追加してみました。

#!/bin/sh

osascript=/usr/bin/osascript

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

exit 0

しかし、これは実行に失敗するか、アプリが初期化される前に実行される可能性が高くなります。

私が単に見落としている、これを行う簡単な方法はありますか? 前もって感謝します。

4

2 に答える 2

2

呼び出して、設定plistにboolを設定するだけです

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

ユーザーが起動時にアプリを非表示にすることを選択した場合。

次に、launchd を介してアプリを起動すると、アプリ自体が のHideOnLaunch設定を確認し、applicationDidFinishLaunching:それに応じてアプリ自体を非表示にできます。

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

launchdアプリを非表示にしないでください。

もう 1 つのアプローチは次のとおりです。Cocoa プログラムに引数を簡単に渡すことができます。このNSUserDefaultsドキュメントで説明されているように、次のように Cocoa アプリを起動すると:

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

YES次に、を介して値を取得できます[[NSUserDefaults standardUserDefaults] boolForKey:@"FuBar"]

したがって、ユーザーの好みに応じてlaunchd、引数-HideOnLaunch YESまたは-HideOnLaunch NO.

したがって、アプリ デリゲートでは、おそらく で、プログラム引数が設定さapplicationDidFinishLaunching:れているかどうかに応じてアプリを非表示にします。
HideOnLaunch

于 2011-01-28T03:41:50.407 に答える
0

ありがとうゆうじ。

私は次のような起動された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>

Apple が次の plist で行っているように、bash スクリプトを ProgramArguments キーの文字列として追加しました。

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

hideOnLogin キーは launchd plist からのみアクセスでき、myApp が終了するとリセットされます。別のキー「hideOnLoad」にバインドされたチェックボックスがあり、これが変更されると、起動された plist を次のいずれかに書き換えます。

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

また

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

場合によります。

起動時に、両方のデフォルトが true かどうかを確認します。true の場合は、次のように myApp を非表示にします: [NSApp hide:self];

私を正しい方向に向けてくれてありがとう!

于 2011-01-28T07:46:55.127 に答える