如何将沙盒应用程序添加到登录项

Tib*_*abo 20 macos xcode cocoa sandbox

如果用户选择该选项,我希望我的应用程序自动启动.我一直在使用的方法不再允许在沙盒应用中使用.

我知道我必须创建一个助手来实现这一目标吗?是否有一个简单的教程,包含示例代码?

我找到了这个教程,但它对我不起作用:http://www.delitestudio.com/2011/10/25/start-dockless-apps-at-login-with-app-sandbox-enabled/

这是一个非常标准的事情,我不明白为什么没有可用的示例项目.

更新:

我上传了一个示例项目:http://ge.tt/6DntY4K/v/0?c

Tim*_*Tim 20

你应该成功使用这个(免责声明:我的)教程,包括示例项目.

更新:我现在已经测试了你上传的示例项目:它对我很好,没有任何修改,并且在登录时启动成功.唯一的技巧是AutoStart.app文件必须放在/ Applications或〜/ Applications文件夹中才能在登录时成功启动.无论应用程序是否为沙盒,这都是必要的.但是,恐怕没有关于此的正式文件.


Hom*_*ang 11

我刚刚在Tim教程上重做了大约100次试验.最后我做到了.虽然我发誓当我第一次尝试它时它起作用了.在我的情况下,当我将"在登录时启动"切换为开启时,我只能看到登录后立即启动帮助应用程序一秒钟.然后就消失了.手动启动应用程序,我看到开关已关闭.

这是我发现的:

  1. 我的包标识符已经在列表中 NSArray *running = [[NSWorkspace sharedWorkspace] runningApplications]
  2. 的状态NSRunningApplication *app (bundle name equal to my app)是: [app isActive] == NO,[app isHidden] == NO,[app isTerminated] = NO

所以我对代码进行了一些修改,例如:

BOOL alreadyRunning = NO;
BOOL isActive = NO; // my modification
NSArray *running = [[NSWorkspace sharedWorkspace] runningApplications];
for (NSRunningApplication *app in running) {

    if ([[app bundleIdentifier] isEqualToString:@"com.mybundleidentifier"]) {
        alreadyRunning = YES;
        isActive = [app isActive]; // my modification
    }
}

if (!alreadyRunning || !isActive) { // my modification
  ....
Run Code Online (Sandbox Code Playgroud)

  • 你可能想在`isActive = [app ...`之后添加一个`break;`. (2认同)