天天看點

沙盒機制--SandBox

        IOS中的沙盒機制(SandBox)是一種安全體系,它規定了應用程式隻能在為該應用建立的檔案夾内讀取檔案,不可以通路其他地方的内容。所有的非代碼檔案都儲存在這個地方,比如圖檔、聲音、屬性清單和文本檔案等。

1.每個應用程式都在自己的沙盒内

2.不能随意跨越自己的沙盒去通路别的應用程式沙盒的内容

3.應用程式向外請求或接收資料都需要經過權限認證

檢視模拟器的沙盒檔案夾在Mac電腦上的存儲位置,首先,這個檔案夾是被隐藏的,是以要先将這些檔案顯示出來,打開指令行:

顯示Mac隐藏檔案的指令:defaults write com.apple.finder AppleShowAllFiles -bool true

隐藏Mac隐藏檔案的指令:defaults write com.apple.finder AppleShowAllFiles -bool false

然後重新啟動Finder,點選螢幕左上角蘋果标志——強制退出——選擇Finder然後點選重新啟動,這個時候在重新打開Finder就可以看到被隐藏的檔案了。

還有一種比較簡單的辦法就是直接點選Finder圖示右鍵——前往檔案夾——輸入/Users/your username/Library/Application Support/iPhone Simulator/ ,然後确認就可以了。your username是你本機的使用者名

然後按下圖進入相應的檔案夾,就可以到模拟器的沙盒檔案目錄了:

接着進入一個模拟器版本,我這裡是5.1

然後可以看到Applications下面存放的就是模拟器中所裝的開發的應用程式,随便進入一個後可以看到,一個沙盒中包含了四個部分,如圖所示:

分别是

            .app檔案:這個就是可運作的應用檔案,

            Documents:蘋果建議将程式中建立的或在程式中浏覽到的檔案資料儲存在該目錄下,iTunes備份和恢複的時候會包括此目錄;

            Library:存儲程式的預設設定或其它狀态資訊;

            Library/Caches:存放緩存檔案,iTunes不會備份此目錄,此目錄下檔案不會在應用退出删除;

            Library/Preferences:?

            tmp:建立和存放臨時檔案的地方,但不需要持久化,在應用關閉後,該目錄下的資料将删除,也可能系統在程式不運作的時候清除。

沙盒機制--SandBox

注意:這裡很容易和bundle混淆在一起,下面根據自己的一點了解說明二者的差別:  

        bundle :生成 iOS 應用程式時,Xcode 将它捆綁成一個包。捆綁包 (bundle) 是檔案系統中的一個目錄,它将相關資源成組在一個地方。一個 iOS 應用程式捆綁包中,含有其可執行檔案和支援資源檔案(如應用程式圖示、圖像檔案和已本地化的内容)。

A bundle(包裹、捆、束) is a directory with a standardizedhierarchical structure that holds executable code and the resources used by that code.

是以可以将整個應用程式其實就可以看做一個bundle。

沙箱的概念和bundle沒直接關系,沙箱隻是說明程式資源與外界隔離

這個問題對于新手來說很容易了解錯誤

下面通過一個簡單的例子說明一下bundle和sandbox。

        說明:我們首先在項目中建立一個plist檔案(root項的類型為數組),添加了3個元素。因為建立的plist檔案是在應用程式中的,我們可以通過bundle擷取到這個plist檔案,讀取出這個數組,添加一個資料元素後,重新寫回plist檔案中。接着我們擷取沙箱document的path,然後将這個檔案寫入到沙箱中的data.plist檔案中(如果不存在,會自動建立一個的),然後再從data.plist讀取出這個數組。

關于建立的MyPlist.plist檔案,我們寫回檔案的數組中添加了一項新的元素,但是我們在xcode中檢視這個MyPlist.plist檔案時,發現并沒有顯示出新增的數組元素,但是我們到沙箱中檢視就可以看到了,這個估計是xoode本身的問題。

關于document中data.plist檔案檢視我們也可以到沙箱中進行檢視。如下圖:

沙盒機制--SandBox
沙盒機制--SandBox

下面通過代碼來擷取這些目錄:

輸出結果如下:

2012-08-03 11:10:24.325 SandBoxTest[12549:f803] Home目錄:/Users/Ryan/Library/Application Support/iPhone Simulator/5.1/Applications/A6B99E5A-E2C7-46E9-867A-4E7619F0DA45

2012-08-03 11:10:24.325 SandBoxTest[12549:f803] Documents目錄:/Users/Ryan/Library/Application Support/iPhone Simulator/5.1/Applications/A6B99E5A-E2C7-46E9-867A-4E7619F0DA45/Documents

2012-08-03 11:10:24.326 SandBoxTest[12549:f803] Cache目錄:/Users/Ryan/Library/Application Support/iPhone Simulator/5.1/Applications/A6B99E5A-E2C7-46E9-867A-4E7619F0DA45/Library/Caches

2012-08-03 11:10:24.326 SandBoxTest[12549:f803] Library目錄:/Users/Ryan/Library/Application Support/iPhone Simulator/5.1/Applications/A6B99E5A-E2C7-46E9-867A-4E7619F0DA45/Library

2012-08-03 11:10:24.326 SandBoxTest[12549:f803] temp目錄:/var/folders/7z/1wj5h8zx7b59c02pxmpynd500000gn/T/

下面開始向目錄裡面建立檔案,然後向檔案裡面寫入内容:

建立成功後打開檔案夾目錄,可以看到test.txt檔案:

接下來是把該檔案中的内容讀出來:

2012-08-03 11:26:53.594 SandBoxTest[12642:f803] 檔案内容:(

    Title,

    Contents

)