2

我正在使用此处的说明创建一个嵌入式帮助应用程序,该应用程序将打开主应用程序,并将帮助应用程序注册为登录项。

帮助应用程序当前在登录时启动,但无法打开主应用程序。

系统的控制台一遍又一遍地重复以下错误大约 5 分钟,然后启动:500px Uploader Helper: LSOpenFromURLSpec() returned -10827 for application 500px Uploader path (null).

来自 Console.app 的屏幕截图

辅助应用程序使用它的应用程序委托来启动主应用程序,代码如下:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    dispatch_async(dispatch_get_main_queue(), ^{
        BOOL success = [[NSWorkspace sharedWorkspace] launchApplication:@"500px Uploader"];

        if (success)
        {
            NSLog(@"YEAHHHH");
            exit(EXIT_SUCCESS);
        }
        else
        {
            NSLog(@"NOOOOO");
            exit(EXIT_FAILURE);
        }
    });
}

根据关于 SO 的其他问题,这是在沙盒环境中打开应用程序的推荐方式。

我试图将启动延迟到第一个运行循环之后,但没有成功。一位同事已验证该问题与我的开发环境无关。我也尝试过使用绝对路径作为launchApplication:. launchApplication:也无法在/Applications.

有谁知道为什么这可能不起作用或为什么几分钟后它会开始起作用?

4

2 回答 2

2

不知道为什么你的代码不工作(这些沙盒问题仍然是实验性的),但它看起来像我的路径问题,即 LSOpenFromURLSpec 找不到你的主应用程序。我使用以下代码从帮助应用程序启动我的主应用程序(并且它有效):

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    // Check if main app is already running; if yes, do nothing and terminate helper app
    BOOL alreadyRunning = NO;
    NSArray *running = [[NSWorkspace sharedWorkspace] runningApplications];
    for (NSRunningApplication *app in running) {
        if ([[app bundleIdentifier] isEqualToString:@"com.timschroeder.LaunchAtLoginApp"]) {
            alreadyRunning = YES;
        }
    }

    if (!alreadyRunning) {
        NSString *path = [[NSBundle mainBundle] bundlePath];
        NSArray *p = [path pathComponents];
        NSMutableArray *pathComponents = [NSMutableArray arrayWithArray:p];
        [pathComponents removeLastObject];
        [pathComponents removeLastObject];
        [pathComponents removeLastObject];
        [pathComponents addObject:@"MacOS"];
        [pathComponents addObject:@"LaunchAtLoginApp"];
        NSString *newPath = [NSString pathWithComponents:pathComponents];
        [[NSWorkspace sharedWorkspace] launchApplication:newPath];
    }
    [NSApp terminate:nil];
}

更新:我在另一个问题的作者上传的示例项目中看到了类似的问题,如果仅将主应用程序放在 /Applications 或 ~/Applications 文件夹中,则代码工作正常。也许这也是你的问题。

于 2012-07-05T23:13:22.597 回答
0

我有这个问题。这是由我自己从捆绑包中启动帮助应用程序引起的。显然,沙盒不行吗?所以:

  1. 打开 App 包并单击 LoginItems 中的帮助应用程序总是会导致LSOpenFromURLSpec() returned -10827
  2. 注销并重新登录,我的帮助应用程序可以正常启动主应用程序,没有任何问题。

这意味着测试您的帮助应用程序的唯一方法是注销并重新登录。仅运行该应用程序将始终失败。

于 2012-07-06T20:56:01.320 回答