2013-11-22 24 views
0

我在沙盒應用中遇到與閱讀桌面圖片相關的崩潰問題,這些問題我無法在Mac上重現,但我在應用商店因爲崩潰而遭到拒絕,其他用戶報告已崩潰。在沙盒應用中閱讀桌面圖片

從「/ Library/Desktop Pictures」或使用NSWorkspace的desktopImageURLForScreen方法讀取桌面圖片。這些工作在我的Mac上很好,但我有點困惑,因爲我不知道如何在沒有在NSOpenPanel中手動選擇目錄的情況下訪問「/ Library/Desktop Pictures」。至於desktopImageURLForScreen,我不確定這是否是沙盒安全,取決於文件在用戶屏幕上的存儲位置。

任何人都可以驗證這兩種獲取桌面圖片的方法在任何情況下都是安全的嗎?或者我是否需要請求用戶選擇桌面圖片在NSOpenPanel中存儲的目錄(甚至是desktopImageURLForScreen)?

回答

0

首先,讓沙箱拒絕訪問URL不會導致崩潰 - 方法將返回錯誤指示。因此,如果您的應用程序崩潰,則可能是因爲您無法訪問網址,或者因爲您沒有正確測試失敗。

如果您希望安靜地訪問桌面圖像,您可以指定com.apple.security.assets.pictures.read-only授權 - 這將使您的應用能夠訪問常見圖像位置。它保證您的應用程序可以訪問桌面圖像的URL,只是增加了概率。所以你仍然必須測試成功或失敗。

如果您的程序要求訪問,並且如果無提示訪問失敗,則可以再打開一個標準文件對話框;具有適當定製的提示,按鈕等;要求用戶授予訪問URL的權限。

HTH

+0

我仍然不確定我是否可以期望訪問/庫/桌面圖片或從其他方法,雖然。如果他們在某些Mac上隨機失敗,我甚至不想在這些地方尋找。我顯然需要更好地處理失敗並防止崩潰,但我不想爲新用戶彈出一個窗口,讓他們選擇「/ Library/Desktop Pictures」,如果我不需要的話。謝謝。 – GenericPtr

+0

添加授權,獲取URL - 桌面圖片可以在磁盤上的任意位置*檢查*如果您有權訪問 - 通過嘗試和失敗或使用access(),如果您沒有訪問權限只有這樣你才能從用戶那裏請求它。 – CRD

+0

是的,我只是想讓錯誤處理在啓動時更加健壯和預先請求,如果它不存在的話。我很確定desktopImageURLForScreen授予對該目錄的持久訪問權限,「/ Library/Desktop Pictures」可以在容器外訪問,但我無法單獨在我的Mac上證明它。感謝這些想法,我很欣賞它。 – GenericPtr