0

我制作了一个提交到 Mac AppStore 的应用程序。由于某些原因,他们拒绝了它,因为它正在使用 SMJobBless API 安装帮助工具。

由于该帮助工具对于大多数应用程序的功能来说不是必需的,因此我已将其删除,并且我的应用程序已被接受。

所以现在,我正在为可以在互联网上下载的帮助工具打包一个独立的安装程序。

但是,在我将文件安装到位后,帮助工具拒绝运行......帮助工具只有一个进入 /Library/LaunchDaemons 的 plist 和一个进入 /Library/PrivilegedHelperTools 的二进制文件。

现在我想知道,除了将文件移动到位之外,SMJobBless 究竟做了什么?它是在用 launchctl 注册我的工具吗?我尝试了各种方法,手动将其添加到launchctl,但没有成功:帮助工具在请求它的签入请求后才退出。

辅助工具只包含:

@autoreleasepool {
    launch_data_t       req             = launch_data_new_string(LAUNCH_KEY_CHECKIN);
    launch_data_t       resp            = launch_msg(req); // AT THIS POINT, RESP IS NULL. Why?
    launch_data_t       machData        = launch_data_dict_lookup(resp, LAUNCH_JOBKEY_MACHSERVICES);
    launch_data_t       machPData       = launch_data_dict_lookup(machData, [kHelperBundleName UTF8String]);
    mach_port_t         mp              = launch_data_get_machport(machPData);
    launch_data_free                    (resp);
    launch_data_free                    (req);
    // Prepare connexion.
    NSMachPort          *rp             = [[NSMachPort alloc] initWithMachPort:mp];
    PrivilegedHelperProxy
                        *phProxy        = [[[PrivilegedHelperProxy alloc] init] autorelease];
    NSConnection        *con            = [NSConnection connectionWithReceivePort:rp sendPort:nil];
    [rp release];
    [con setRootObject:phProxy];
    [[NSRunLoop currentRunLoop] run];
}
return                                  EXIT_SUCCESS;

通过 SMJobBless API 安装时,该服务运行完美,并且可以从我的 APP 中访问根代理...

那么我的安装程序需要哪些步骤才能让这个帮助工具正常工作,就像调用 SMJobBless API 一样?

谢谢,皮埃尔。

4

1 回答 1

0

解决了。辅助工具的 PList 条目不包括任何 ProgramArguments(这似乎不是 SMJobBless API 的问题)。将这些添加到 PList 后,帮助工具可以正确运行,并且安装程序会正确注册它。

无论如何谢谢!皮埃尔。

于 2012-06-22T02:58:44.327 回答