2013-10-29 79 views
2

我正在轉換圖像大小,然後將新文件保存到原始圖像文件所在的同一目錄中。可可:如何設置讀/寫文件夾的權限?

我只能將權限設置爲「images」目錄。如果我的應用程序需要選擇該目錄內的圖像,它會按預期工作。如果我選擇另一個目錄中的圖像(例如用戶創建的目錄文件夾),則不會顯示新圖像。 我在App Sandbox中看到的只是「用戶選擇的文件」目錄,「圖像」目錄,「下載」目錄,「圖片」目錄,「音樂」目錄和「電影」目錄。

有沒有辦法以編程方式授予此權限?

+0

如何使用NSOpenPanel詢問訪問?你能幫忙嗎? – Manthan

回答

5

您對沙箱模型長期以來一直備受關注;支持將輸入文檔轉換爲相同位置的輸出文檔的應用程序。

Apple針對應用程序Info.plist中的文檔類型的NSIsRelatedItemType條目解決了該問題的子集。如果此標誌存在且YES處於多個文檔類型條目中,則當您的應用程序被授予對這些類型之一的文件的訪問權時,就有權創建任何其他類型的文件。

例如,文本編輯有這個標誌,以便一旦獲准進入的任何這些類型的文件時,它可以創建一個同名的文件,但任何其他類型的沒有進一步.txt.rtf.rtfd文件類型設置需要用戶權限。它啓用諸如「轉換爲純文本」之類的命令。

它從你的問題看來,你沒有這樣做,而是說,將「image.png」到「圖像resized.png」,即改變而非的類型。沒有應用程序從用戶獲得進一步的權限不支持。

您擁有的最佳解決方法是要求用戶對他們希望調整大小的文件的封閉文件夾的權限。一旦應用程序有了它,它可以在該文件夾內執行任意數量的文件創建 - 就像您對賦予特定文件夾訪問權利的觀察一樣。

一個過程中,你可以遵循的是:

1 - 當需要創建輸出文件檢查,如果該應用程序可以訪問包含文件夾- 您可以使用access功能設置(參見OS X手冊第2節例如終端中的「man access」或搜索Xcode文檔中的訪問)。

3 - (是的,我錯過了2,見下文)如果您沒有訪問,然後從用戶要求它包含文件夾 - 扔了一個合適的NSOpenPanel促進他們的解釋,選擇包含文件夾至於爲什麼。

4 - 一旦您被授予訪問權限保存 - 將應用程序「應用程序支持」目錄中的文件夾中的安全範圍書籤存儲到該文件夾​​中。您可以在構建緩存時「修剪」緩存 - 任何文件夾的書籤都不需要在文件系統樹中爲其下的任何文件夾添加書籤。這樣做可以:

2 - 如果您沒有訪問權限,請檢查您保存的書籤緩存,並查看是否有一個用於該文件夾,如果是這樣的話激活它。請注意,此檢查適用於文件系統樹中包含文件夾或其任何父文件夾的書籤。

隨着時間的推移使用此過程,您將累積對用戶使用的文件夾的訪問權限。您應該爲用戶提供清理緩存的方法。

它不像聽起來那麼糟! HTH。

+0

非常感謝您的回覆......您的答案非常具有說服力和完整性......但這對我來說太令人頭痛了...所以我採用了另一種解決方案......非常感謝您的非常有幫助的答案......和平.. 。Massy – Blue

+0

我需要使用NSOpenPanel來請求權限,因爲我正在編寫的文件是styles.css.gz,而原始文件是styles.css。我把這個類放在一起,包裝所有的邏輯,在必要時請求許可,並堅持這種權限。 https://github.com/leighmcculloch/AppSandboxFileAccess –