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

13

1
我之前遇到了困难,但是后来找到了这篇指南:http://blog.timschroeder.net/2012/07/03/the-launch-at-login-sandbox-project/ 对我帮助非常大。 - Dom Vinyard
可能是重复的问题:Mac OS X:在应用商店中启动时启动? - Keith Smiley
4个回答

10
+ (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");
    }
}

请注意,辅助程序必须与主应用程序一起打包放置在“Contents/Library/LoginItems”目录中。您需要在构建过程中创建它并将其复制到该位置。


这就是我寻找了几周的东西!感谢 roustern。 - Todd

2

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

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

编辑:不幸的是,这个链接已经失效了。也许有人能提供更好的替代方案......

如果需要在沙盒环境中注册登录项,这是一个很好的教程(我们都需要最终实现这一点!)。重要的是,令人烦恼的是,你必须将构建的主应用程序复制到“应用程序”文件夹中,并且不要像我一样忘记将帮助器应用程序设置为沙盒环境,并在帮助器的plist中添加一个Application is agent (UIElement)行,值为TRUENSLog和控制台现在是你老式的调试朋友。

......只需弄清楚如何在两者都被沙盒化的情况下让辅助应用程序启动主应用程序.....。 编辑:找到了这个问题: Cocoa: Sandbox entitlement to launch another application


-1

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


将LSUIElement设置为TRUE会创建一个辅助应用程序?实际上,我不太明白什么是“辅助应用程序”?它在哪里? - disorderdev

-2

disorderdev并不是唯一一个在同一条船上的人。我觉得奇怪的是,在GitHub、Google或其他地方都找不到关于SMLoginItemSetEnabled使用的示例代码,什么也没有。 - Antony
在我回答中提到的SO文章中有一些示例代码。你有时间看一下吗? - GorillaPatch
嗯,man launchd为在后台运行服务的语法提供了布局,但它并没有详细说明如何在obj-c中布置代码。另一方面,您提供的链接实际上是用于共享文件列表方法。如果您想采用服务管理框架方法,文档并没有提供太多细节。我们确实想创建一个登录项,不让用户直接禁用它。 - Antony

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接