从沙盒应用程序启动助手(Launch helper from sandboxed applicati

2019-07-29 05:05发布

我有一个沙盒应用。 我需要它来启动辅助应用程序(从主应用程序的包内),每次它启动。 然而,这种失败:

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

错误是:

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

现在,错误是误导性的,因为如果我禁用沙盒授权的应用程序启动的罚款。 显然,这是一个错误,据报道在这里 。

我的问题是: 有没有解决办法?

我可以用SMLoginItemSetEnabled ,描述在这里 :

true立即启动助手应用程序,并显示应在用户登录开始每次。通过false终止助手应用程序,并表示它不应该再启动时,用户登录。

但是,我不能没有要求用户先使用该API,因为应用商店审查指南2.26的:

被设置为自动启动,或者必须在启动或登录未经用户许可自动运行的其他代码的应用程序将会被拒绝

因此,使用这种解决办法将意味着向用户询问“是否可以在每次登录时启动助手?如果没有,你不能使用这个应用程序!” 显然,这不是理想的...

Answer 1:

一个可行的解决方法是使用NSTask产卵/usr/bin/open ,并给它的助手应用程序的路径:

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

这运行正常从沙盒,并且似乎是在Mac App Store审查指南兼容。

更新:经过进一步的调查,这项技术经常失败,出现错误

因为它的可执行文件是缺少应用程序无法打开。

当我关闭的沙盒不会发生此错误。 所以必须有一个更好的解决办法?



Answer 2:

您可以使用SMLoginItemSetEnabled。 你要问一次用户的同意。 毕竟,推出首次与SMLoginItemSetEnabled助手应用程序会自动启动,每次用户登录英寸



文章来源: Launch helper from sandboxed application