我做了一個提交給Mac AppStore的應用程序。由於某些原因,他們拒絕了,因爲它使用SMJobBless API安裝了一個輔助工具。SMJobBless和朋友
由於這個幫手工具對於大多數應用程序的功能來說並不是必需的,我已經將它刪除了,並且我的應用程序已被接受。
所以現在,我打包了一個可以在互聯網上下載的幫助工具的獨立安裝程序。
但是,在我安裝好文件之後,幫助程序工具拒絕運行......幫助程序工具只有一個放入/ 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得到安裝時,和根代理是從我的應用程序中訪問......
那麼什麼將是我的安裝程序讓這個幫助工具正常工作的必要步驟,就像調用SMJobBless API一樣?
謝謝, Pierre。
這是因爲'SMJobBless'爲你添加了'ProgramArguments'條目給plist - 它在[documentation]中提到過(http://developer.apple.com/library/mac/documentation/General/Reference/ServiceManagementFwRef /ServiceManagement_h/index.html#//apple_ref/c/func/SMJobBless)。 (它必須這樣做,因爲你不一定知道它將在何處安裝該工具,現在它在'/ Library/PrivilegedHelperTools /'中,但可能會改變。) –
很高興聽到SMJobBless爲你工作。你能指導我如何在你的應用程序中實現它。 這裏是我可以在其中回答的問題:http://stackoverflow.com/questions/29406303/smjobbless-modification-issue 謝謝 –