2011-09-11 91 views
11

我不知道開發者是否有某種方式可以查看iOS設備上的文件系統,如iFile,但沒有越獄該設備? 需要它的偏差目的。iOS開發者是否可以查看文件系統?

編輯 感謝您的回答!我知道app文件夾內有一個地方,可以讀取和寫入。 但我正在尋找一種快速查看數據的方式,無需編碼,就像iFile一樣。所以我可以檢查我的寫功能是否成功。

+0

請參閱http://stackoverflow.com/q/14114309/82216和http://stackoverflow.com/q/8713093/82216 – sampablokuper

+0

另見http:///stackoverflow.com/questions/6480607 – Johann

回答

6

人們可以在iOS設備上查看文件,但只能查看應用程序的沙箱。每個應用程序都有一個Documents,Cachetemp文件夾。我認爲當你連接你的設備時,前兩個是由iTunes自動備份的,而後者是不備份的。

實例,以獲得緩存目錄路徑 -

- (NSString *)getCacheDirPath 
{ 
    NSString *path = nil; 
    NSArray *myPathList = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
    if([myPathList count]) 
    { 
     NSString *bundleName = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIdentifier"]; 
     path = [[myPathList objectAtIndex:0] stringByAppendingPathComponent:bundleName]; 
    } 
    return path; 
} 

要查看caches目錄中的所有文件 -

- (NSMutableArray *)showFiles 
{ 
    NSError *err  = nil; 
    NSArray *myPathList = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
    NSString *myPath = [myPathList objectAtIndex:0]; 
    NSArray *dirContent = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:myPath error:&err]; 
    if(err) NSLog(@"showFiles() - ERROR: %@",[err localizedDescription]); 
    NSMutableArray *filePaths = nil; 

    int count = (int)[dirContent count]; 
    for(int i=0; i<count; i++) 
    { 
     [filePaths addObject:[dirContent objectAtIndex:i]]; 
    } 
    return filePaths; 
} 
+2

感謝您的答案!我知道app文件夾內有一個地方,可以讀取和寫入。但我一直在尋找一種快速查看數據的方式,而無需編碼,比如iFile。所以我可以檢查我的寫功能是否成功。 –

+0

很難說「無需編碼就能快速查看數據」是什麼意思,但我假設您的意思是您希望能夠輕鬆地將內存中的對象存儲在內存中並將其檢索到磁盤。爲此,我會在您的對象上使用NSCoding協議。使用 – lms

+0

無需編碼就可以輕鬆保存/加載對象/從磁盤加載對象?你可以編寫一個方法來判斷你的寫入是否成功... –

3

是的,你可以訪問文件系統。但是,僅限於您自己的應用程序沙箱。而且無法更改應用程序包,即作爲應用程序一部分下載的所有內容,因此無法更改(出於安全原因,因爲每個應用程序都已簽名)。但是,您可以將文件存儲在應用的「文檔」文件夾中。

看一看這個演講,解釋了你需要知道的一切:

http://www.stanford.edu/class/cs193p/cgi-bin/drupal/system/files/lectures/09_Data.pdf

+0

我很確定蘋果的動機不是安全。 –

1

如果你設置你的plist一個UIFileSharingEnabled鍵爲真,那麼你就可以使用iTunes在Mac上在您的應用程序的沙盒文檔目錄內查看文件系統,無需額外編碼。如果您想查看Caches目錄或查看應用程序沙箱外部,這將無濟於事。

12

雖然iDevice上的文件系統是沙盒,但iPhone模擬器中的文件系統不是。你可以用模擬器上運行你的應用程序,並通過檢查內容:

~/Library/Application Support/iPhone Simulator/5.0/Applications 

它應該滿足您的需求。

+0

這正是我正在尋找的,謝謝Liz! – rooftop

9

對於設備:使用桌面應用程序iPhone-Explorer它通過USB讀取文件系統(它可以讀取和寫入整個用戶指定的區域(應用程序,音樂,照片,視頻,筆記等),但不是整個系統,除非你越獄並安裝afc2add)

爲iPhoneSimulator(如利茲提到):~/Library/Application Support/iPhone Simulator/5.0/Applications

+0

任何猜測如何iExplorer能夠訪問這些。我需要從我的MacOS應用程序訪問我的應用程序共享文檔文件夾 – Shohrab

1

當您的iOS設備連接到您的計算機並正確供應開發時,您可以使用Xcode 4爲您自己的項目下載文件,而不僅僅下載文檔目錄中的文件。

請參閱本其他答案:How to download app data in Xcode 4.2

0

是LMS是正確的。 Apple將文件訪問權限限制在應用程序本身(文檔目錄)。所以沒有其他方式來訪問它。我在其中一個項目中遇到了這個問題,我開始開發完整的文件訪問系統。所有操作都支持像iFile。您可以通過視覺方式以iFile應用程序的方式做所有事

https://github.com/CianApple/FileSystem

我已經發布的項目在github公衆。隨意使用它。它可能會幫助你解決你的問題。

0

itools是一個適用於保護iPhone的蘋果努力的小工具。它因此可能侵犯了一些蘋果的政策,但做的工作

相關問題