ios沙箱模式开启_iOS沙盒篇
iOS系統(tǒng)在安全性上的一大亮點(diǎn)就是沙盒。
每個(gè)iOS應(yīng)用SDK都被限制在沙盒中,我們可以把沙盒當(dāng)成一個(gè)設(shè)置了僅當(dāng)前SDK可以訪問的文件夾,蘋果對(duì)沙盒有以下幾條限制:
應(yīng)用程序可以在自己的沙盒中運(yùn)行,但不能訪問任何其他應(yīng)用程序的沙盒。
應(yīng)用程序間不能共享數(shù)據(jù)。
禁止應(yīng)用程序讀寫沙盒以外的文件夾。
沙盒根目錄中有四個(gè)文件夾:
AppName.app
Documents
Library
tmp
iTunes在與iPhone同步時(shí),備份所有的Documents和Library文件。
iPhone在重啟時(shí),丟棄所有的tmp文件。
一、以下從存放內(nèi)容、是否會(huì)被iTunes同步兩個(gè)方面來分別描述沙盒中四個(gè)文件夾的功能情況:
1. AppName.app
①存放內(nèi)容
這是應(yīng)用程序的程序包目錄,包含了應(yīng)用程序本身的數(shù)據(jù)、資源文件、可執(zhí)行文件等等。程序啟動(dòng)以后,會(huì)根據(jù)需要從該目錄中動(dòng)態(tài)的加載代碼或者資源到內(nèi)存(懶加載:lazy loading)。
注意:AppName.app目錄是只讀的。為了防止被篡改,應(yīng)用在安裝的時(shí)候會(huì)將該目錄簽名。非越獄情況下,該目錄中的內(nèi)容是無法更改的;如果更改了目錄內(nèi)容,對(duì)應(yīng)的簽名就會(huì)發(fā)生改變,會(huì)導(dǎo)致應(yīng)用程序無法啟動(dòng)。
②是否會(huì)被iTunes同步
否
2. Documents
①存放內(nèi)容
我們可以將應(yīng)用程序的數(shù)據(jù)文件保存在該目錄下。不過這些數(shù)據(jù)類型僅限于不可再生的數(shù)據(jù),可再生的數(shù)據(jù)文件應(yīng)該存放在Library/Cache目錄下
②是否會(huì)被iTunes同步
是
3. Documents/Inbox
①存放內(nèi)容
該目錄用來保存由外部應(yīng)用請(qǐng)求當(dāng)前應(yīng)用程序打開的文件。
比如:應(yīng)用A向系統(tǒng)注冊(cè)了幾種可打開的文件格式,應(yīng)用B中有一個(gè)A支持的格式的文件F,并申請(qǐng)調(diào)用應(yīng)用A打開文件F。由于F當(dāng)前是在應(yīng)用B的沙盒中,我們知道,沙盒機(jī)制使不允許應(yīng)用A訪問應(yīng)用B沙盒中的文件,因此蘋果的解決方案是將文件F拷貝一份到應(yīng)用A的Documents/Inbox目錄下,再讓應(yīng)用A打開文件F。
②是否會(huì)被iTunes同步
是
4. Library
①存放內(nèi)容
蘋果建議用來存放默認(rèn)設(shè)置或者其他狀態(tài)信息。
②是否會(huì)被iTunes同步
是,但除了Caches子目錄
5. Library/Caches
①存放內(nèi)容
主要是緩存文件,用戶使用過程中緩存都可以保存在這個(gè)目錄中。上面提到過,Documents目錄用于保存不可再生的文件,那么這個(gè)目錄就用于保存那些可再生的文件,比如網(wǎng)絡(luò)請(qǐng)求數(shù)據(jù)。鑒于此,應(yīng)用程序通常還需要負(fù)責(zé)刪除這些文件。
②是否會(huì)被iTunes同步
否
6. Library/Preferences
①存放內(nèi)容
應(yīng)用程序的偏好設(shè)置文件。我們使用NSUserDefaults的設(shè)置數(shù)據(jù)都會(huì)保存到該目錄下的一個(gè)plist文件中。
②是否會(huì)被iTunes同步
是
7. tmp
①存放內(nèi)容
主要存放各種臨時(shí)文件,保存應(yīng)用再次啟動(dòng)時(shí)不需要的文件。而且,當(dāng)應(yīng)用不再需要這些文件時(shí)應(yīng)該主動(dòng)將其刪除,因?yàn)樵撃夸浵碌臇|西隨時(shí)有可能被系統(tǒng)清理掉,目前已知的一種可能清理的原因是系統(tǒng)磁盤存儲(chǔ)空間不足的時(shí)候。
②是否會(huì)被iTunes同步
否
二、獲取沙盒路徑
1. 獲取沙盒主目錄路徑
NSString *homePath = NSHomeDirectory();
2. 獲取Documents路徑
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
3. 獲取Library路徑
NSString *libraryPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0];
4. 獲取Caches路徑
NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];
5. 獲取tmp路徑
NSString *tmpDir = NSTemporaryDirectory();
總結(jié)
以上是生活随笔為你收集整理的ios沙箱模式开启_iOS沙盒篇的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: M82A1大口径半自动狙击步枪
- 下一篇: java 按钮 监听_Button的四种