如何为Mac App创建一个帮助应用程序以在用户登录时启动它?

时间:2011-09-15 19:24:32

标签: objective-c macos autologin

4 个答案:

答案 0 :(得分:9)

+ (void)startHelper {
    NSURL *helperURL = [[[NSBundle mainBundle] bundleURL] URLByAppendingPathComponent:@"Contents/Library/LoginItems/YourHelper.app" isDirectory:YES];
    OSStatus status = LSRegisterURL((CFURLRef)helperURL, YES);
    if (status != noErr) {
        NSLog(@"Failed to LSRegisterURL '%@': %jd", helperURL, (intmax_t)status);
    }


    Boolean success = SMLoginItemSetEnabled(CFSTR("com.yourcompany.helper-CFBundleIdentifier-here"), YES);
    if (!success) {
        NSLog(@"Failed to start Helper");
    }
}

请注意,Helper必须与主要应用程序一起打包在“Contents / Library / LoginItems”目录中。您需要在构建期间创建它并在那里复制帮助程序。

答案 1 :(得分:3)

我找到了一个方便的链接:

http://www.delitestudio.com/2011/10/25/start-dockless-apps-at-login-with-app-sandbox-enabled/

编辑:很遗憾,此链接不再有效。也许有人可以提出更好的选择...

这是一个很好的教程,用于在沙盒环境中注册登录项(如果有用)(我们最终都需要!)。重要的是,令人讨厌的是,你必须将你构建的主应用程序复制到Applications文件夹而不要做我做的事情,忘记沙箱帮助应用程序并向帮助程序添加Application is agent (UIElement)行以值为TRUE的plist。 NSLog和控制台现在是你老式的调试朋友。

...只需要弄清楚如何让辅助应用程序启动主要应用程序,当它们都是沙盒..... 编辑:发现此问题: Cocoa: Sandbox entitlement to launch another application

答案 2 :(得分:0)

我从未使用LSRegisterURL,我可以回答第一个问题:设置LSUIElement位只需打开.plist并添加“Application is agent(UIElement)”行,然后将值设置为TRUE。

答案 3 :(得分:-1)

基本上,您必须查看Launch Services这只是launchd的包装,您可以通过查看终端中的man launchd来查看。

或者在SO How do you make your App open at login?

处查看此问题