【问题标题】:SMJobBless and friendsSMJobBless 和朋友们
【发布时间】:2012-06-22 01:06:42
【问题描述】:

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

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

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

但是,在我将文件安装到位后,帮助工具拒绝运行...帮助工具只有一个进入 /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 一样?

谢谢, 皮埃尔。

【问题讨论】:

    标签: objective-c macos launchd launch-daemon


    【解决方案1】:

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

    无论如何,谢谢! 皮埃尔。

    【讨论】:

    • 那是因为SMJobBless 为您将ProgramArguments 条目添加到plist 中——documentation 中提到了它。 (它必须这样做,因为您不一定知道它将在哪里安装该工具。现在它位于 /Library/PrivilegedHelperTools/ 中,但这可能会改变。)
    • 很高兴听到 SMJobBless 适合您。你能指导我如何在你的应用程序中实现它。这是我的问题,您可以回答:stackoverflow.com/questions/29406303/… 谢谢
    猜你喜欢
    • 2011-02-04
    • 2011-08-10
    • 1970-01-01
    • 2015-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    相关资源
    最近更新 更多