2011-01-10 31 views
5

就我所知(並且無處不在),應用程序的文檔目錄應該位於iPhone上的/var/mobile/Library/的某個位置,但是如果我記錄獲得的目錄,則它是/var/mobile/Documents是iPhone應用程序的文檔目錄/ var/mobile/Documents或/ var/mobile/Library/AppName?

我得到的目錄如下:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 

這是一個問題,如果我創建了一個名爲Settings.xml文件在這裏還是有毛病我的應用程序的/ etc?

信息:我已經越獄iPhone 4的iOS 4.2.1和我的應用程序通過Cydia或SSH安裝。


更新

啊,但是這個目錄是不是真的與我的應用程序。 例如,我正在創建一個文檔settings.xml,以及如果另一個應用程序使用相同的NSDocumentDirectory和相同的文件名? 是的,我知道。 Cydia應用程序已安裝到/ Applications中,但應用程序也應該有一個文檔目錄,甚至不包含/ var/mobile/Documents。如果你看看http://thebigboss.org/hosting-repository/submit-your-app/compile-for-cydia-submission這個目錄應該是/ var/mobile/Library /但是正如我之前描述的那樣,我從來沒有得到這個目錄。

+0

你應該有一個`/ var/mobile/Library`目錄。我有一個運行iOS 5.1.1的iPhone 3GS,我用Absinthe越獄了。 – Chris 2012-08-12 00:23:25

回答

0

通過安裝在另一個文件夾中的Cydia應用程序,這就是爲什麼你得到不同的目錄。

0

某些Cydia二進制文件安裝到/private/var/lib/(如apt-get,openssh等)。其他人被安裝到/Applications/(如Cydia.app,遊戲等)。

0

我也遇到了這個問題...我還沒有找到發生了什麼,所以我已經接受在/ var/mobile/Documents工作。不過,我不得不在我的設備上手動創建該目錄(通過ssh或移動終端),並將其權限設置爲666 [chmod -r 777/var/mobile/Documents],以讓我的應用程序保存並加載文件。

見你!

0

你所做的是在應用程序啓動時,檢查你想在文檔目錄中找到的文件是否存在,如果不存在,則將其複製到只讀應用程序包中。每次啓動應用程序時,它都會在那裏。而且,如果由於某種愚蠢的原因蘋果改變了它,你不必調整你的代碼,因爲它足夠多才多藝以適應變化。它會將原始數據複製到新的位置(這不是最優的,但它比假設它位於靜態位置更好,這會導致用戶之間的各種混淆,或者更糟糕:崩潰)。

0

使用您的包ID作爲名稱,例如com.companyname.appname.Settings.xml。它們在不同的應用程序中很少相同。您也可以使用UUID命名您的文件並存儲名稱中的UUID,但它有其優點和缺點: Pro:文件永遠不會被另一個應用程序覆蓋 Con:這樣做會很棘手事情。

0

由應用程序創建的所有文件都將被限制在應用程序沙箱中(例如/ var/stash/Applications/AppName。當您查找文件settings.xml時,可以使用代碼示例獲取filePath名稱

不推薦將文件存儲在沙盒外。

2

運行越獄應用程序時,使用常量NSDocumentDirectory實際上會爲您/ var/mobile/Documents。將應用程序的文檔直接轉儲到那裏是一種糟糕的政策,即使您認爲它們是唯一命名的。

如果您查看/ var/mobile/Library /文件夾的內容,您會看到很多應用程序都將其數據存儲在那裏,包括越獄應用程序。我不清楚是否有像NSDocumentDirectory這樣的方便常數,你可以用它來獲得。但是,您始終可以將源代碼硬編碼爲在@"/var/mobile/Library/APPNAME"中查找文件。這個文件夾不太可能會改變(如果是這樣,它可能會打破其他應用程序,並且當然是一個簡單的修復方法)。

如果你看一下文件you link to,它並註明:

應用商店應用有一個由 安裝過程中創建的文檔文件夾。越獄應用程序沒有。這是由應用程序到 創建自己的文件夾。如果您需要這種類型的文件夾,您必須使用 applicationDidFinishLaunching函數中的簡單mkdir命令創建此文件夾。只需添加一個簡單的功能: mkdir(「/ var/mobile/Library/YOURAPPNAME」,0755);如果該文件夾已存在,則不會造成任何損害。您希望這樣做是因爲安裝過程 以root用戶身份運行,並且該應用程序以用戶移動版運行。如果Cydia爲您做這 那麼該文件夾將具有不正確的權限。

... 所以你需要自己創建子目錄。如果你不這樣做,它不會在那裏。

根據我的經驗,編寫越獄應用程序只涉及這些稍微有點臭的編碼實踐(硬編碼路徑並自己創建它們)......它可能只是我們必須處理的事情。

更新:請務必在下方看到Saurik的評論。

+0

一個小警告。/var/mobile/Library /顯然假設你的應用程序是作爲默認的'mobile'用戶運行的。一些越獄應用程序需要以root身份運行。如果確實如此,那麼你應該使用文件夾/ var/root/Library/APPNAME。我用一個需要運行的應用程序來做到這一點,並將數據保存爲root。越獄傢伙抱怨了一下,但最終同意讓我使用該位置。 – Nate 2011-06-24 06:14:02

相關問題