iOS應用軟件沙盒sandbox相關知識(整理)


1、iOS沙盒機制原理

 iOS應用程序只能在該程序創建的文件系統中讀取文件,不可以去其它地方訪問,此區域被成為沙盒,所以所有的非代碼文件都要保存在此,例如圖像,圖標,聲音,映像,屬性列表,文本文件等。

 1.1、每個應用程序都有自己的存儲空間
 1.2、應用程序不能翻過自己的圍牆去訪問別的存儲空間的內容
 1.3、應用程序請求的數據都要通過權限檢測,假如不符合條件的話,不會被放行。
     通過這張圖只能從表層上理解sandbox是一種安全體系,應用程序的所有操作都要通過這個體系來執行,其中核心內容是:sandbox對應用程序執行各種操作的權限限制。

 

2.獲取應用軟件沙盒sandbox方法:

通過在iOS程序viewDidLoad中打印NSString *path = NSHomeDirectory(); 然后在Finder中前往該打印出的路徑,即可看到該程序的沙盒sandbox.

例如:/Users/wujia121/Library/Developer/CoreSimulator/Devices/3FDEE527-D4DB-492F-9490-1D04AF9559A8/data/Containers/Data/Application/82A190D8-C6F2-444F-90A5-17B051CC0021 

(可見sandbox保存在Mac用戶文件夾下,而SDK保存在Xcode包content中)

 

3.iphone沙盒模型的有四個文件夾:

分別是 documents,Library,tmp,app包。 手動保存的文件在documents文件里,NSUserdefaults保存的文件在tmp文件夾里。

1、Documents 目錄:一般需要持久的數據都放在此目錄中,可以在當中添加子文件夾,iTunes備份和恢復的時候,會包括此目錄。您應該將所有de應用程序數據文件寫入到這個目錄下。這個目錄用於存儲用戶數據或其它應該定期備份的信息。

2、Library 目錄:這個目錄下有兩個子目錄:Caches 和 Preferences

     Preferences 目錄:包含應用程序的偏好設置文件。您不應該直接創建偏好設置文件,而是應該使用NSUserDefaults類來取得和設置應用程序的偏好.

     Caches 目錄:用於存放應用程序專用的支持文件,保存應用程序再次啟動過程中需要的信息。

3、tmp 目錄:這個目錄用於存放臨時文件,當iOS設備重啟時,文件會被自動清除。

4、AppName.app 目錄:這是應用程序的程序包目錄,包含應用程序的本身。由於應用程序必須經過簽名,所以您在運行時不能對這個目錄中的內容進行修改,否則可能會使應用程序無法啟動。(Xcode 6以后似乎.app不保存在沙盒中)

 

4.獲取Sandbox下各文件夾路徑的方法:

 //1. 沙盒根目錄/

    NSString *homePath = NSHomeDirectory();

    NSLog(@"homePath:%@",homePath);

    

    //2. 沙盒/Documents/

    NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];

    NSLog(@"docPath:%@",docPath);

    

    //3. 沙盒/Library/

    NSString *libPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) firstObject];

    NSLog(@"libPath:%@",libPath);

    //3.1 沙盒/Library/Preferences

    //NSString *preferPath = [NSSearchPathForDirectoriesInDomains(NSPreferencePanesDirectory, NSUserDomainMask, YES) firstObject];

    //此方法獲取路徑是沙盒/Library/PreferencePanes並不存在這樣的路徑,想要訪問Preferences文件夾,需要拼接路徑。或者直接使用NSUserDefaults便可以在Preferences文件夾下創建plist文件。

    NSString *preferPath = [libPath stringByAppendingPathComponent:@"Preferences"];

    NSLog(@"preferPath:%@",preferPath);

    //3.2 沙盒/Library/Cache

    NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];

    NSLog(@"cachePath:%@",cachePath);

    

    //4. 沙盒/tmp

    NSString *tmpPath = NSTemporaryDirectory();

    NSLog(@"tmpPath:%@",tmpPath);

 

    //5. 打印xx.app位置

 

    NSLog(@".appPath:%@",[[NSBundle mainBundle] bundlePath]);//打印app安裝包的在模擬器/手機上的位置(~users/Application文件夾下)

 

真機打印結果:

homePath:         /var/mobile/Containers/Data/Application/849F64A3-BE4A-44FE-A789-6790A77E567A
docPath:          /var/mobile/Containers/Data/Application/849F64A3-BE4A-44FE-A789-6790A77E567A/Documents
libPath:          /var/mobile/Containers/Data/Application/849F64A3-BE4A-44FE-A789-6790A77E567A/Library
preferPath:       /var/mobile/Containers/Data/Application/849F64A3-BE4A-44FE-A789-6790A77E567A/Library/Preferences
cachePath:        /var/mobile/Containers/Data/Application/849F64A3-BE4A-44FE-A789-6790A77E567A/Library/Caches
tmpPath:  /private/var/mobile/Containers/Data/Application/849F64A3-BE4A-44FE-A789-6790A77E567A/tmp/
.appPath: /private/var/mobile/Containers/Bundle/Application/429B6769-6D90-4782-844C-CA95E8B28166/打印程序的沙盒地址2015.10.app

 

5.沙盒路徑截圖:

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM