簡單掌握iOS應用開發中sandbox沙箱的使用_IOS

來源:互聯網
上載者:User

一、iOS沙箱機制

iOS的應用只能訪問為該應用建立的地區,不可訪問其他地區,應用的其他非代碼檔案都存在此目錄下,包括圖片,屬性檔案plist,bundle,nib檔案等,這塊地區稱之為沙箱(sandBox)。

每個應用都有屬於自己的儲存空間,即沙箱。
應用只能訪問自己的沙箱,不可訪問其他地區。
如果應用需要進行檔案操作,則必須將檔案存放在沙箱中,尤其是資料庫檔案,在電腦上操作時,可以去訪問,但是如果要裝在真機上可以使用,必須將資料庫檔案拷貝至沙箱中。
二、開啟沙箱路徑

1、如果不知道沙箱路徑,可以在自己的應用中列印其路徑。

複製代碼 代碼如下:

NSLog(@"沙箱路徑:%@",NSHomeDirectory());


會得到列印結果*為字母或數字,即為沙箱的路徑

複製代碼 代碼如下:

/Users/apple/Library/Application Support/iPhone Simulator/6.1/Applications/******-****-****-****-************

開啟Finder,選擇前往-前往檔案夾(或選擇快速鍵command+shift+G)輸入列印出來的路徑即可

2、開啟Finder,選擇前往並按住option鍵,進入資產庫

選擇Application Support-iPhone Simulator-選擇模擬器版本,即可看到各個應用的沙箱目錄。

選中其中一個目錄,即可看到程式的名稱的App檔案。

三、目錄結構

沙箱預設情況下有三個目錄檔案夾documents,Library,tmp及應用的App檔案,只可在相應的檔案夾中進行操作

documents:一般用來存放應用中建立的檔案,如資料庫檔案,或程式中瀏覽到的檔案資料。如果進行備份會將此檔案夾中的檔案包括其中;
Library:儲存應用的預設設定及狀態資訊;
Library/cache:用來存放快取檔案,此檔案夾下資料在應用退出時不會刪除。備份時不會包括此檔案夾;
tmp:存放即時穿件的臨時檔案
帶表徵圖的App檔案:

選中後顯示包內容,即可看到儲存的表徵圖,nib檔案,屬性列表等

四、在沙箱中寫檔案

在沙箱目錄的Documents檔案夾下添加一個plist檔案,添加圖片等方法相同

複製代碼 代碼如下:

// 擷取Documents檔案夾目錄
NSString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
 
// 設定plist的路徑
 [rootPath stringByAppendingPathComponent:@"new.plist"];
 
// 然後在plist中寫入內容
NSString *error;
// 序列化一個值“OK”
id plist = [NSPropertyListSerialization dataFromPropertyList:@"OK" format:NSPropertyListXMLFormat_v1_0 errorDescription:&error];
 
if(plist) {
        NSLog(@"No error creating XML data.");
        [plist writeToFile:plistPath atomically:YES];
    }
    else {
        NSLog(@"%@",error);
        [error release];
    }

運行後在Documents檔案夾下將看到一個new.plist檔案

檔案中有一個值OK,也可添加數組,字典等相互關聯類型的內容,只需將上文中的“OK”換成一個(id)類型的值即可

五、拷貝檔案到沙箱目錄下

下面拷貝一個public.xml檔案至document路徑下,也可拷貝其他檔案,只需將檔案名稱和類型對應即可,尤其是database檔案,一定要拷貝至沙箱才能使用。此檔案不能是電腦中的檔案,必須加入工程的Bundle中

複製代碼 代碼如下:

// 擷取Documents路徑
    NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES) lastObject];
 
    // 設定要拷貝檔案的路徑及名稱
    NSString *xmlSandBoxPath = [documentsPath stringByAppendingPathComponent:@"public.xml"];
 
    NSFileManager *fileManager = [NSFileManager defaultManager];
 
    // 判斷檔案是否已經存在
    BOOL isExisting = [fileManager fileExistsAtPath:xmlSandBoxPath];
 
    if (!isExisting) {
 
        // 本地無此檔案,則將此檔案拷貝到本地目錄。
        NSString *xmlFilePath = [[NSBundle mainBundle] pathForResource:@"public" ofType:@"xml"];
        NSError *err;
        // 將Bundle中的檔案拷貝至沙箱目錄下
        [fileManager copyItemAtPath:xmlFilePath toPath:xmlSandBoxPath error:&err];
    }

操作之後,Documents路徑下就有這個檔案了

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.