2011-01-28 10 views
0

私はアプリケーション 'myApp'を持っており、ログイン時に 'myApp'を読み込むように設定しています。 私はこれがすべてのlaunchd経由で罰金実行している: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> 

私はまた、ユーザーが、私はbashスクリプトを作成し、ProgramArgumentsアレイに追加しようとしたにも「て、myApp」

を非表示にするオプションを提供したいと思います

#!/bin/sh 

osascript=/usr/bin/osascript 

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

exit 0 

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

私は単に見落としているこれを行う簡単な方法はありますか?ありがとうございます。

答えて

1

あなただけのユーザーが起動時にアプリケーションを隠すために選択したとき

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

を呼び出すことにより、お好みのplistの中にブール値を設定することができます。

次に、アプリがlaunchdの経由で起動されたとき、あなたのアプリ自体はapplicationDidFinishLaunching:HideOnLaunch設定を確認することができ、それに応じて自分自身を隠す:

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

アプリを非表示にlaunchdをさせてはいけません!

もう1つの方法は次のとおりです。引数を簡単にCocoaプログラムに渡すことができます。 this NSUserDefaults documentで説明したように、あなたはこのようにココアアプリを起動した場合、:

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

その後、あなたは[[NSUserDefaults standardUserDefaults] boolForKey:@"FuBar"]経由で値YESを得ることができます。

したがって、ユーザの好みに応じて、-HideOnLaunch YESまたは-HideOnLaunch NOを設定してlaunchd plistを書くことができます。

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

0

ありがとうございます。

私はこのような立ち上げのplistになってしまった:Appleは以下のplistの場合と同様、私は、キーProgramArguments内の文字列としてbashスクリプトを追加

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

~/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 

起動時に、両方のデフォルト値が真であるかどうかを確認し、そうであればmyAppを非表示にします。 [NSApp hide:self];

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

関連する問題