2014-10-29 64 views
4

推出我有一个沙盒菜单栏的应用程序(不停靠图标),在它的偏好设置窗口允许用户检查复选框,让应用程序启动时登录。我曾经使用LSSharedFileList api,但由于沙盒应用程序不允许这样做,所以我已经迁移到使用SMLoginItemSetEnabled。我发现,虽然应用程序将按照预期启动,但如果我回到首选项并取消选中并重新检查登录启动复选框,我会启动第二个菜单栏应用程序实例。设置MacOS X的菜单栏的应用程序在启动时

这里是我的助手应用程序代码(在其应用程序委托):

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { 

    NSString * path = [[[[[[NSBundle mainBundle] bundlePath] stringByDeletingLastPathComponent] 
            stringByDeletingLastPathComponent] 
              stringByDeletingLastPathComponent] 
                stringByDeletingLastPathComponent]; 


    [[NSWorkspace sharedWorkspace] launchApplication:path]; 
    [NSApp terminate:nil]; 

}

这里是我的偏好设置窗口(主应用程序)代码:

- (IBAction)toggleLoginStatus:(NSButton*)sender{ 


    if(!SMLoginItemSetEnabled((__bridge CFStringRef)@"myAppBundleIdentifier", (BOOL)[sender state])){ 
      NSLog(@"Dagnabit!"); 
    } 

}

第二个实例启动后,取消选中/重新选中该复选框不会再启动实例。有谁知道发生了什么事? 谢谢

回答

1

我找到了答案。我看过的所有教程都没有提到这个,但是在SMLoginItemEnabled的文档中提到:

帮助器应用程序的布尔启用状态。此值为 仅对当前登录的用户有效。如果属实,帮助程序 应立即启动(并在后续登录时) 并继续运行。如果为false,帮助程序将不再是 继续运行。

因此,我必须检查应用程序是否已经在允许帮助程序启动之前运行。

+0

废话!看起来问题比最初出现的要深一点。在运行Yosemite的新款MB Pro 15上,在登录时取消选中/检查启动会导致启动第二个实例,而在运行Yosemite的旧版2008 MB Pro 15上则不启动第二个实例。我添加了代码来检查应用程序是否已在运行。在这两种情况下,该应用都会在登录时启动,但较新的版本会显示这种奇怪的行为。有人有主意吗。 – Lazloman 2014-10-30 03:06:37

1

我花了近两天搞清楚这一点。最后放弃了支持在登录时启动的想法。 虽然这仅仅是一个在前端是或否的情况下,另一方面开发人员必须花时间大量(在这两个应用程序添加辅助应用程序,做所有这些项目设置)。早期(沙箱之前)的过程比现在简单得多。
此外,当应用程序“在登录时启动”添加到列表中,就没有办法来验证,因为应用程序没有在系统偏好上市公司 - >用户 - >登录项,因为它是沙子拳击之前。

,我也面临着在那里我在登录时添加助手应用程序的启动和然后卸载助手一个奇怪的问题,但活动监控器仍显示在列表助手应用程序,每次开机后。
让我们期待苹果在不久的将来增加了一些像LaunchAtLoginController

+0

确实,这确实很糟糕。我也曾经有过用于自动启动的完美工作代码。 – Lazloman 2014-10-31 19:19:26

相关问题