iOS沙盒目錄結構解析 – iPhone手機開發技術文章 iPhone軟體開發教學課程

iOS沙盒目錄結構解析

作者:wangzz

原文地址:https://blog.csdn.net/wzzvictory/article/details/18269713

轉載請註明出處

如果覺得文章對你有所幫助,請通過留言或關註微信公眾帳號wangzzstrive來支持我,謝謝!

出於安全考慮,iOS系統的沙盒機制規定每個應用都隻能訪問當前沙盒目錄下面的文件(也有例外,比如系統通訊錄能在用戶授權的情況下被第三方應用訪問),這個規則把iOS系統的封閉性展現的淋漓盡致。

一、沙盒中幾個主要的目錄

每個沙盒下面都有相似的目錄結構,如下圖所示(出自蘋果官方文檔):
vcTatOajrNXiwO/Tw7W9wctsYXp5IGxvYWRpbme1xMu8z+uhowqi2tX7uPbEv8K8ysfWu7bBtcQKzqrBy7fA1rmxu7TbuMSjrNOm08PU2rCy17C1xMqxuvK74b2ruMPEv8K8x6nD+6Gjt8fUvdP8x+m/9s/Co6y4w8S/wrzW0MTayN3Kx87et6i4/LjEtcSju9Ta1L3T/MnosbjJz8jnufu4/LjEwcvEv8K8xNrI3aOsttTTprXEx6nD+77Nu+Gxu7jEseSjrNXi1tbH6b/2z8LGu7n7udnN+MPoyva1xLrzufvKx9Om08OzzNDyvavO3reoxvS2r6OsztLDu8q1vPm5/aGjCqLbyse38bvhsbtpVHVuZXPNrLK9CrfxCjxoMz4yoaJEb2N1bWVudHM8L2gzPgqi2bTmt8XE2sjdCs7Sw8e/ydLUvavTptPDs8zQ8rXEyv2+3c7EvP6xo7Tm1Nq4w8S/wrzPwqGjsru5/dXi0KnK/b7dwODQzb32z97T2rK7v8nU2cn6tcTK/b7do6y/ydTZyfq1xMr9vt3OxLz+06a4w7Tmt8XU2kxpYnJhcnkvQ2FjaGXEv8K8z8Khowqi2srHt/G74bG7aVR1bmVzzayyvQrKxwo8aDM+M6GiRG9jdW1lbnRzL0luYm94PC9oMz4Kotm05rfFxNrI3Qq4w8S/wrzTw8C0saO05tPJzeKyv9Om08PH68fztbHHsNOm08OzzNDytPK/qrXEzsS8/qGjCrHIyOfO0sPHtcTTptPDvdBBo6zP8s+1zbPXorLhwcu8uNbWv8m08r+qtcTOxLz+JiMyNjY4NDvKvaOsQtOm08PT0NK7uPZB1qez1rXEJiMyNjY4NDvKvbXEzsS8/kajrLKix9LJ6sfrtffTw0G08r+qRqGj08nT2ka1scewysfU2kLTptPDtcTJs7rQ1tCjrM7Sw8fWqrXAo6zJs7rQu/rWxsrHsrvUytDtQbfDzspCybO60NbQtcTOxLz+o6zS8rTLxru5+7XEveK+9re9sLjKx72yRr+9sbTSu7fdtb1B06bTw7XERG9jdW1lbnRzL0luYm94xL/CvM/Co6zU2cjDQbTyv6pGoaMKotrKx7fxu+Gxu2lUdW5lc82ssr0KyscKPGgzPjShokxpYnJhcnk8L2gzPgqi2bTmt8XE2sjdCsa7ufu9qNLp08PAtLTmt8XErMjPyejWw7vyxuTL/Ne0zKzQxc+ioaMKotrKx7fxu+Gxu2lUdW5lc82ssr0KysejrLWrysfSqrP9wctDYWNoZXPX08S/wrzN4go8aDM+NaGiTGlicmFyeS9DYWNoZXM8L2gzPgqi2bTmt8XE2sjdCtb30qrKx7u6tObOxLz+o6zTw7unyrnTw7n9s8zW0Lu6tOa2vL/J0tSxo7Tm1NrV4rj2xL/CvNbQoaPHsMPmy7W5/aOsRG9jdW1lbnRzxL/CvNPD09qxo7Tmsru/ydTZyfq1xM7EvP6jrMTHw7TV4rj2xL/CvL7N08PT2rGjtObEx9Cpv8nU2cn6tcTOxLz+o6yxyMjnzfjC58frx/O1xMr9vt2ho7z409q0y6Os06bTw7PM0PLNqLOju7nQ6NKquLrU8Mm+s/3V4tCpzsS8/qGjCqLayse38bvhsbtpVHVuZXPNrLK9CrfxoaMKPGgzPjahokxpYnJhcnkvUHJlZmVyZW5jZXM8L2gzPgqi2bTmt8XE2sjdCtOm08OzzNDytcTGq7rDyejWw87EvP6ho87Sw8fKudPDTlNVc2VyRGVmYXVsdHPQtLXEyejWw8r9vt22vLvhsaO05rW9uMPEv8K8z8K1xNK7uPZwbGlzdM7EvP7W0KOs1eK+zcrHy/nOvbXE0LS1wHBsaXN01tCjoQqi2srHt/G74bG7aVR1bmVzzayyvQrKxwo8aDM+N6GidG1wPC9oMz4Kotm05rfFxNrI3Qq499bWwdnKsc7EvP6jrLGjtObTptPD1Nm0zsb0tq/KsbK70OjSqrXEzsS8/qGjtvjH0qOstbHTptPDsrvU2dDo0qrV4tCpzsS8/sqx06a4w9b3tq+9q8bkyb6z/aOs0vLOqrjDxL/CvM/CtcS2q873y+bKsdPQv8nE3LG7z7XNs8flwO219KOsxL/HsNLR1qq1xNK71ta/ycTcx+XA7bXE1K3S8srHz7XNs7TFxcy05rSiv9W85LK71+O1xMqxuvKhowqi2srHt/G74bG7aVR1bmVzzayyvQq38Qo8YnI+Cgo8aDE+tv6horvxyKHW99KqxL/CvMK3vra1xLe9yr08L2gxPgoKPGgzPjGhosmzutDEv8K8PC9oMz4KPHByZSBjbGFzcz0=”brush:java;”>NSLog(@”%@”,NSHomeDirectory());輸出結果:

/var/mobile/Applications/326640A7-6E27-4C63-BA5E-7391F203659A

2、tmp

NSLog(@"%@",NSTemporaryDirectory());

輸出結果:

/private/var/mobile/Applications/326640A7-6E27-4C63-BA5E-7391F203659A/tmp/

3、Myapp.app

NSLog(@"%@",[[NSBundle mainBundle] bundlePath]);

輸出結果:

/var/mobile/Applications/326640A7-6E27-4C63-BA5E-7391F203659A/PhoneCall.app

4、Documents

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];
NSLog(@"%@",path);

輸出結果:

/var/mobile/Applications/326640A7-6E27-4C63-BA5E-7391F203659A/Documents

這裡用到的NSSearchPathForDirectoriesInDomains方法需要解釋下,其聲明如下:

FOUNDATION_EXPORT NSArray *NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory directory, NSSearchPathDomainMask domainMask, BOOL expandTilde);

該方法用於返回指定范圍內的指定名稱的目錄的路徑集合。有三個參數:

directory

NSSearchPathDirectory類型的enum值,表明我們要搜索的目錄名稱,比如這裡用NSDocumentDirectory表明我們要搜索的是Documents目錄。如果我們將其換成NSCachesDirectory就表示我們搜索的是Library/Caches目錄。

domainMask

NSSearchPathDomainMask類型的enum值,指定搜索范圍,這裡的NSUserDomainMask表示搜索的范圍限制於當前應用的沙盒目錄。還可以寫成NSLocalDomainMask(表示/Library)、NSNetworkDomainMask(表示/Network)等。

expandTilde

BOOL值,表示是否展開波浪線~。我們知道在iOS中~的全寫形式是/User/userName,該值為YES即表示寫成全寫形式,為NO就表示直接寫成“~”。

三、參考文檔

1、蘋果官方文檔

https://developer.apple.com/library/mac/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40010672-CH1-SW1

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *