2012-06-22 93 views
0

我做了一個提交給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。

回答

0

已解決。輔助工具的PList條目不包括任何ProgramArguments(這似乎不是SMJobBless API的問題)。將這些添加到PList後,幫助工具可以正確運行,並且安裝程序正確註冊它。

謝謝反正! Pierre。

+1

這是因爲'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 /'中,但可能會改變。) –

+0

很高興聽到SMJobBless爲你工作。你能指導我如何在你的應用程序中實現它。 這裏是我可以在其中回答的問題:http://stackoverflow.com/questions/29406303/smjobbless-modification-issue 謝謝 –