2013-05-22 147 views
3

執行launchctl我需要從我的沙盒OSX的應用程序執行launchctl load/unload命令。該應用具有read-write對啓動代理的plist文件所在的文件夾的權限(使用應用的用戶之前授予的安全範圍的書籤)。在沙盒Mac應用程序

但是應用程序獲取以下錯誤:

- 
5/22/13 9:15:56.420 AM sandboxd[28463]: ([28473]) launchctl(28473) deny file-read-data /private/var/db/launchd.db/com.apple.launchd.peruser.501/overrides.plist 
- 

要清楚,我不希望自己的應用程序添加到啓動項爲自動啓動,我也發現了類似的話題這http://www.mail-archive.com/[email protected]/msg80413.html談話沒有任何結果。

回答

3

文件/private/var/db/launchd.db/com.apple.launchd.peruser.501/overrides.plist CAND只能被讀取或由管理員用戶(root)寫。因此,要使launchctl load\unload正常工作,您必須在根指令前使用root或使用sudo來提升。但是,在沙箱中,您不允許這樣做。

根據您的需求,您可以使用一個助手應用程序。看看Adding Login Items Using the Service Management Framework

1

爲了讓應用程序做一些需要特權操作,蘋果表明,一個助手應用程序被創建,它只能被稱爲由父應用程序來運行,由於被簽署。助手應用程序使用提升的權限啓動並執行所需的最小操作。看看這裏SMJobBless -

http://developer.apple.com/library/mac/#samplecode/SMJobBless/Introduction/Intro.html

因爲它規定: -

SMJobBless demonstrates how to securely install a helper tool that performs a privileged operation and how to associate the tool with an application that invokes it.

+0

謝謝你,但'SMJobBless'示例還使用了 「授權服務」 的方法調用(' AuthorizationCopyRights')和Apple文檔聲明:「重要信息:應用程序沙箱中不支持授權服務API,因爲它允許權限升級。」 – anka

+0

這是我忽略的一個好點。我打算告訴你看看Apple的「EvenBetterAuthorizationSample」,但它也使用授權服務。我開始認爲你所要求的是不可能的,因爲沙盒太嚴格了。 – TheDarkKnight

+1

是的,值得注意的是,任何人看到這個答案都值得注意,沙盒應用程序不允許提升權限,儘管沙盒應用程序可以包含幫助程序應用程序,但助手應用程序也必須被沙盒化。 – AriX