我制作了一个提交到 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 一样?
谢谢,皮埃尔。