4

我有一个沙盒应用程序。每次启动时,我都需要它来启动一个帮助应用程序(从主应用程序的包中)。但是,这失败了:

NSError *error;
[[NSWorkspace sharedWorkspace] launchApplicationAtURL:helperURL
                               options:NSWorkspaceLaunchDefault
                               configuration:nil
                               error:&error];

错误是:

应用程序“Helper”无法启动,因为它已损坏。,NSUnderlyingError=0x10214c700“操作无法完成。(OSStatus 错误 -10827。)”}

现在,该错误具有误导性,因为如果我禁用沙盒权利,应用程序将正常启动。显然这是一个错误,如此处所报告

我的问题是:有解决方法吗?

我可以使用SMLoginItemSetEnabled,如此所述:

通过true立即启动助手应用程序并指示每次用户登录时都应启动它。通过false终止助手应用程序并指示用户登录时不应再启动它。

但是,由于 App Store Review Guideline 2.26,我不能在不先询问用户的情况下使用这个 API:

未经用户同意设置为自动启动或在启动或登录时自动运行其他代码的应用程序将被拒绝

因此,使用此解决方法意味着询问用户“每次登录时启动帮助程序是否可以?如果不是,您将无法使用此应用程序!” 显然,这并不理想...

4

2 回答 2

2

一个可行的解决方法是使用NSTask生成/usr/bin/open并为其提供帮助应用程序的路径:

NSTask *task = [NSTask new];
[task setLaunchPath: @"/usr/bin/open"];
[task setArguments: [NSArray arrayWithObjects: helperPath, nil]];
[task launch];

这在沙盒中运行良好,并且似乎与 Mac App Store Review Guidelines 兼容。

更新:在进一步检查中,这种技术经常失败并出现错误

该应用程序无法打开,因为它的可执行文件丢失。

当我关闭沙盒时,不会发生此错误。所以必须有更好的解决方案...

于 2012-04-30T01:10:29.427 回答
0

您可以使用 SMLoginItemSetEnabled。您必须征得用户同意一次。毕竟,第一次使用 SMLoginItemSetEnabled 启动的帮助应用程序会在用户每次登录时自动启动。

于 2014-05-12T14:41:03.067 回答