フレームワークを使用して、ユーザーがServiceManagement
再度ログインするたびにメイン アプリを起動するヘルパー アプリを起動するログイン項目を追加しています。スイッチタイプ:addLoginItem
disableLoginItem
NSButton
//Add the Helper app as a login item
- (void)addLoginItem
{
NSLog(@"Enable login item");
if (!SMLoginItemSetEnabled((__bridge CFStringRef)kLoginHelperBundleIdentifier, true)) {
}
}
//Disable the Helper app as a login item
- (void)disableLoginItem
{
NSLog(@"Disable login item");
if (!SMLoginItemSetEnabled((__bridge CFStringRef)kLoginHelperBundleIdentifier, false)) {
}
}
ヘルパー アプリのコードはかなり単純です...
- (void)applicationDidFinishLaunching:(NSNotification *)notification
{
[[NSWorkspace sharedWorkspace] launchApplication: @"My App"];
[[NSApplication sharedApplication] terminate:self];
}
問題は、メイン アプリの実行中に、ユーザーが [ログイン時に起動] ボタンを繰り返し選択してそらすと、メイン アプリの 2 番目のインスタンスが起動されることです。一方、私がやりたいことは、ユーザーが再度ログインしたときにのみメインアプリが起動されることです.
をSMLoginItem.h
見たところ、ドキュメントには次のように記載されていることがわかりました。
* @param enabled
* The Boolean enabled state of the helper application. This value is effective
* only for the currently logged in user. If true, the helper application will
* be started immediately (and upon subsequent logins) and kept running. If
* false, the helper application will no longer be kept running.
addLoginItem
そのため、ヘルパー アプリが呼び出されるたびに起動されているように見えます。それを承知の上で、ヘルパー アプリを修正して、メイン アプリが既に実行されているかどうかを確認しました。そうである場合は、ヘルパー アプリを終了します。それ以外の場合は、メイン アプリのインスタンスを起動してから、ヘルパー アプリを終了します。
- (void)applicationDidFinishLaunching:(NSNotification *)notification
{
if ([NSRunningApplication runningApplicationsWithBundleIdentifier:@"com.myCompany.MyApp"]){
[[NSApplication sharedApplication] terminate:self];
}
else {
[[NSWorkspace sharedWorkspace] launchApplication: @"My App"];
[[NSApplication sharedApplication] terminate:self];
}
}
ただし、ユーザーが [ログイン時に起動] ボタンを繰り返し選択および選択解除すると、メイン アプリの 2 番目のインスタンスが作成されます。ユーザーが「ログイン時に起動」を複数回切り替えた場合に、ヘルパー アプリによってメイン アプリの 2 番目のインスタンスが作成されないようにする方法を知っている人はいますか?
EDITアプリは Mac App Store を通じて配布されていないため、このチュートリアルの指示に従ってコード署名またはサンドボックス化を有効にしていません。