2014-12-04 52 views
0

所以我一直撕裂我的頭髮,這... ...助手應用程序沙箱和安全範圍的書籤

我有一個主要的應用程序,和助手應用程序。兩者都是沙盒,並使用應用程序組共享數據。我通過NSXPCConnection與幫助程序交談。我使用SMLoginItemSetEnabled將幫助程序應用程序設置爲登錄項目。當用戶激活後,助手應用程序將作爲守護進程運行。

這一切都很好。 問題在於安全範圍的書籤。

幫助程序應用程序需要訪問系統文件。當我需要授予對新位置的訪問權時,這是由主應用程序完成的,通過NSXPCConnection打開助手並打開使用此類的NSOpenPanel:(https://github.com/leighmcculloch/AppSandboxFileAccess) 這一切似乎也起作用....

該類告訴我文件訪問權已被授予,但是我也在控制檯中收到沙盒違例。

Sandbox: com.my.app.helper deny file-read-data 

我在助手應用程序正確的權利:

com.apple.security.files.user-selected.read-write 
com.apple.security.files.bookmarks.app-scope 

我也讀訪問後臺線程的書籤時,有人有問題,所以我想包裝相關的書籤所有呼叫:

dispatch_sync(dispatch_get_main_queue(), ^{ }); 

還是沒有喜樂。 任何幫助,非常感謝。

**該沙箱是區域噩夢使用.... 我所有的應用程序所做的是刪除一些系統文件,無需用戶干預。 這樣一個簡單的任務之前,沙箱....現在我需要處理loginItems,XPC ....很多頭痛。 :(

回答

1

我的特殊問題實際上要簡單得多...... 我已經全部我打電話給這樣的書籤:

dispatch_sync(dispatch_get_main_queue(), ^{ }); 

一旦我刪除了主調度塊的調用,並將其移至一個調度隊列,一切開始工作? 我不知道爲什麼,但儘管如此,我現在的工作非常開心。

dispatch_queue_t queue = dispatch_queue_create(WorkerQueue, NULL); 
dispatch_sync(queue, ^{ }); 
+0

此外,我仍然得到拒絕消息,但我的應用程序確實收到完全訪問文件.... – gypsyDev 2014-12-07 02:47:33

0

我在我的應用程序也有類似的任務,this answer解決了這個問題對我來說,你基本上是有父應用程序解決書籤並訪問其安全範圍,然後通過一個簡單的NSURL到XPC的服務。我有我的XPC服務調用依次調用一個完成塊來停止訪問安全範圍。該答案中的Apple Dev Forum鏈接給出了更詳細的解釋。