SMJobBless和朋友们

时间:2012-06-22 01:06:42

标签: objective-c macos launchd launch-daemon

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

由于这个帮助工具不是大多数应用程序功能所必需的,我已将其删除,并且我的应用程序已被接受。

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

然而,在我安装了文件之后,帮助工具拒绝运行...帮助工具只有一个进入/ Library / LaunchDaemons的plist和一个进入/Library/PrivilegedHelperTools的二进制文件。 p>

现在我想知道,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一样?

谢谢, 皮尔。

1 个答案:

答案 0 :(得分:0)

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

谢谢! 皮尔。