簡體   English   中英

助手應用程序沙箱和安全范圍內的書簽

[英]helper app sandboxing and security scoped bookmarks

所以我一直在用這個來撕頭發...

我有一個主應用程序和一個助手應用程序。 兩者都被沙箱化,並且正在使用應用程序組共享數據。 我通過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...。 :(

我在我的應用程序中執行了類似的任務, 這個答案為我解決了。 本質上,父應用程序可以解析書簽並訪問其安全范圍,然后將普通的NSURL傳遞給XPC服務。 我有XPC服務調用,而又調用了一個停止訪問安全范圍的完成塊。 該答案中的Apple Dev Forum鏈接提供了更詳細的說明。

我的特定問題實際上要簡單得多。...我對書簽的所有調用都像這樣包裝:

dispatch_sync(dispatch_get_main_queue(), ^{ });

一旦我從主調度塊中刪除了呼叫並將其移至調度隊列,一切就開始工作了嗎? 我不知道為什么,但是盡管如此,我現在仍然非常高興。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM