Mac OS X APP在開發完成,上線的時候必須支持sandbox「http://blog.csdn.net/heroguo_jp/article/details/54862223」當設置完成SandBox之后 發現,打開最近文件.txt 之后修改保存,當再次打開的時候發現不能 打開運行啦?
Mac OS X系統為了保證系統的安全性采取啦安全保護機制。不允許你在沒有文件流的的方式打開文件【沒有權限打開】。
在File access中 User Selected File項中選擇Read/Write 文件的讀寫權限 ,沙盒有一個默認的規則: 在APP 運行期間通過NSOpenPanel打開的任意位置的文件,把這個路徑保存下載,后面都可以直接使用這個路徑繼續訪問文件獲取文件的讀寫權限。
但是在APP重新啟動以后,這個文件路徑不能直接被訪問,要想要永久的訪問APP之外的路徑,就必須使用Security-scoped bookmark
An app-scoped bookmark:可以對應用中打開的文件或者文件夾在以后永久性訪問兒不需要再次通過NSOpenPanel打開。這種bookmark方式使用的比較多。
A document-scoped bookmark: 提供對特定的文檔的永久訪問權。可以理解針對文檔嵌套的一種權利模式。比如你開發一個能編輯PPT文檔的應用,里面嵌入了視頻文件,圖片文件連接。那么下次打開這個ppt文檔時就能直接訪問這些文件而不需要在通過NSOpenPanel打開獲得授權。
1、 保存打開文件的URL的Bookmark 獲取URL中的bookmarkData存儲到NSUserDefaults中
NSData *bookmarkData = [fileURL bookmarkDataWithOptions:NSURLBookmarkCreationWithSecurityScope includingResourceValuesForKeys:nil relativeToURL:nil error:&error];2、應用啟動時通過URL的bookmark獲取文件授權 通過bookmark數據解析獲取授權的NSURL,并且執行startAccessingSecurityScopedResource方法得到訪問權限。 執行block回調完成相關內容讀取后,執行stopAccessingSecurityScopedResource停止授權。
NSURL *allowedUrl = [NSURL URLByResolvingBookmarkData:bookmarkData options:NSURLBookmarkResolutionWithSecurityScope relativeToURL:nil bookmarkDataIsStale:&isStale error:NULL];@try {[allowedUrl startAccessingSecurityScopedResource];block();} @finally {[allowedUrl stopAccessingSecurityScopedResource];}Demo 地址:https://github.com/heroBlog/HGBookmark.git
新聞熱點
疑難解答