回答
是的,但它需要「臨時例外」權利。 「臨時」意味着它可能在未來版本的操作系統中消失,但這不是一個很大的風險。更大的問題是「異常」一詞:這意味着您必須證明您對該權利的使用是合理的,否則App Store審覈人員可能會拒絕您。
提交一份錯誤報告,解釋您認爲自己應該能夠做什麼,但今天不能訪問~/Library
,並且最好在主題上啓動一個論壇主題。他們可能會建議使用替代方法,而不是訪問~/Library
(甚至可能使用私有API),在這種情況下,請按照他們的說法進行操作。或者他們可能會說現在使用暫時的例外,在這種情況下,這樣做。或者他們可能不會迴應,在這種情況下,您會使用暫時的例外情況並穿過手指。無論如何,請確保您的App Store提交評論註釋鏈接到錯誤報告和/或論壇主題。
您將不得不手動編輯項目的權利plist來執行此操作,但這不是很難。創建一個com.apple.security.temporary-exception.files.home-relative-path.read-only
數組,其中一個字符串爲"/Library/"
。就像這樣:
<key>com.apple.security.temporary-exception.files.home-relative-path.read-only</key>
<array>
<string>/Library/</string>
</array>
額外/
末是沙盒是如何知道你要訪問的目錄,而不是文件。如果你離開它,你將可以訪問~/Library
中的所有文件,這是你所要求的,但不能訪問~/Library
(遞歸)子目錄中的文件,如~/Library/LaunchAgents/com.mycompany.myapp.myoldagent.12345678-ABCD-EF00-1234-567890ABCDEF.plist
,這可能是你想要的。請參閱權利密鑰參考文檔中的File Access Temporary Extensions。
此外,請注意,您已經可以免費訪問~/Library
下的某些內容,無論是因爲它們被複制到容器中,還是在使用合適的API而不是使用路徑時間接訪問。因此,可能有更好的方法來完成您正在做的事情 - 例如,讀取以前的非沙盒版應用程序留下的文件,您可能可以將它們遷移到容器中並在那裏讀取它們。
一兩件事:只要有訪問〜/ Library不改變什麼NSHomeDirectory()
,URLsForDirectory:inDomains:
等將返回 - you'll仍然得到~/Containers/com.mycompany.myproduct/Data/Library
來代替。蘋果的處理這個半官方的建議是使用BSD API來獲取用戶的真正的家目錄,最簡單的方法是這樣的:
const char *home = getpwuid(getuid())->pw_dir;
NSString *path = [[NSFileManager defaultManager]
stringWithFileSystemRepresentation:home
length:strlen(home)];
NSURL *url = [NSURL fileURLWithPath:path isDirectory:YES];
的幾個注意事項:
- 這通常不是一個好主意太頻繁地打電話給
getpwuid
。最好的解決方案是儘早調用此代碼,然後緩存結果NSURL
。 - 這顯然也可以用於獲取其他用戶的家(因此也可以用於
Library
)目錄,但App Store幾乎肯定不會允許任何真正嘗試這種操作的軟件。 - 圖書館在
~/Library
這個事實被認爲是一個「實現細節」,可能會有一天發生變化,這是另一個原因(在權利之上),這必須被認爲是暫時的解決方法,直到Apple提供真正的解決方案到您的更高級別的問題,這可能值得在您的評論說明中提及。
感謝您的回答! – dot
Upvoted,雖然你提出的使用'getpwent() - > pw_dir'的解決方案爲我返回'/ var/virusmails'。 –
這對我有效:'getpwnam([NSUserName()UTF8String]) - > pw_dir' –
- 1. 允許的應用文件位置 - 有或沒有沙盒
- 2. 訪問我不是所有者的沙盒應用程序ios
- 3. 有沒有辦法讓Url訪問Android擴展文件中的特定文件?
- 4. 有沒有辦法只讀python中的csv文件頭?
- 5. Mac應用沙盒和forkpty()
- 6. 有沒有什麼辦法可以讓我的C#XMLManager工作?
- 7. 訪問沙盒外的視頻文件
- 8. 有沒有什麼辦法讓對象只在課堂以外閱讀?
- 9. 有沒有辦法讓scanf從文件中讀取
- 10. 有沒有辦法讓glob()只有文件?
- 11. 有沒有辦法讓文件大小隻有FileDescriptor?
- 12. 有沒有什麼辦法讓c#中的pdf文件第一頁的圖像?
- 13. 有沒有辦法讓CTabItem不能被用戶訪問?
- 14. 蘋果應用沙盒系統訪問
- 15. 有什麼辦法讓我的android應用程序更小?
- 16. NetBeans IDE:有沒有辦法讓文件只讀或鎖定內容?
- 17. 有沒有辦法讓ms訪問來顯示外部文件的圖像
- 18. 有沒有辦法讓我的「文件關聯」不被應用程序打開?
- 19. 有沒有辦法讓一個值只能訪問嵌套類VB.NET的父類?
- 20. 有沒有辦法讓NERDtree只加載我指定的目錄?
- 21. 沒有辦法訪問Context.USAGE_STATS_SERVICE
- 22. 當用戶選擇一個文件夾時,Mac沙盒應用程序可以訪問什麼?
- 23. 有沒有辦法讓FlexBuilder 3將項目視爲應用程序和LIbrary?
- 24. 訪問鉻沙盒文件系統
- 25. 有沒有辦法將g ++中的-std = ***應用於只有一個文件
- 26. 有沒有辦法監控c#文件的訪問?
- 27. 有沒有什麼辦法來顯示,如果火柴盒
- 28. 有沒有什麼辦法讓Firefox的API的
- 29. 有沒有什麼辦法用彈簧
- 30. 有沒有什麼辦法讓雙擊.ps1文件的PowerShell腳本工作?
是否有可能得到一個寫權限,我的應用程序「com.apple.security.temporary-exception.files.absolute-path.read寫 啓用在讀/寫訪問指定的文件或目錄指定的絕對路徑「。 – iGo