iOS開發(fā)應(yīng)用程序沙盒

應(yīng)用程序沙盒(App Sandbox,也稱沙箱)

  • 沙盒應(yīng)用程序是通過將應(yīng)用程序的特權(quán)限制在其預(yù)期功能來保護(hù)系統(tǒng)和用戶的好方法舆瘪,從而增加惡意軟件危及用戶系統(tǒng)的難度浙垫。
  • 應(yīng)用程序?yàn)槭裁葱枰敲炊嗟氖跈?quán)(以下使用了google翻譯)?蘋果這樣說
屏幕快照 2017-07-31 16.34.27.png
  • 如果使用相同的代碼簽名和標(biāo)志符即可重復(fù)使用應(yīng)用程序的容器,而iOS容器還包含了應(yīng)用程序本身

所以我們只要bundleId一致, 就會(huì)直接覆蓋那個(gè)App

  • 對(duì)于每個(gè)用戶,首次運(yùn)行應(yīng)用程序時(shí),自動(dòng)會(huì)創(chuàng)建一個(gè)沙盒
  • 蘋果對(duì)沙箱深度描述:
屏幕快照 2017-07-31 16.40.03.png
  • 一個(gè)特殊的權(quán)利啟用應(yīng)用程序沙箱 - 打開應(yīng)用程序沙箱流酬。啟用沙箱時(shí)奔脐,Xcode會(huì)創(chuàng)建一個(gè).entitlements 屬性列表文件,并在項(xiàng)目導(dǎo)航器中顯示該文件驴剔。

現(xiàn)在還疑惑項(xiàng)目下多了一個(gè):項(xiàng)目名+.entiliements文件嗎?

沙盒下的目錄

  • 在AppDelegate中使用NSHomeDirectory打印,注意在模擬器下打印,真機(jī)同樣有沙盒,只是在電腦上我們看不到(或者說不好看,可以在Devices中查看):
NSString *path = NSHomeDirectory();
NSLog(@"path = %@", path);
  • 打印結(jié)果:
屏幕快照 2017-07-31 16.51.37.png
  • 復(fù)制path的路徑,在mac首頁點(diǎn)擊前往->前往文件夾->黏貼該路徑并且點(diǎn)擊前往即可看到沙盒下的目錄:
屏幕快照 2017-07-31 16.53.36.png

Documents疑問和測(cè)試

  • 為什么說Documents的數(shù)據(jù)在App升級(jí)的時(shí)候會(huì)跟隨遷移,卸載的時(shí)候就不會(huì)存在?
  • 我們新建一個(gè)App,并且使用歸檔的方式將數(shù)據(jù)存在Documents下:
    _responseObject = [NSMutableDictionary dictionary];
    for (NSInteger i = 0; i < 100; i++) {
        [_responseObject setObject:[NSString stringWithFormat:@"test %ld",i] forKey:[NSString stringWithFormat:@"test %ld",i] ];
    }
    // 是路徑也是存儲(chǔ)的鍵
    NSString *filePath = @"responseObject";
    // 存儲(chǔ)數(shù)據(jù)
    [LXKArchiverTool archiverObject:_responseObject key:filePath filePath:filePath];

屏幕快照 2017-07-31 17.16.17.png
  • 根據(jù)蘋果官網(wǎng)介紹,那么我們重新建一個(gè)App,并且使用相同的BundleId,是否能夠獲取到responseObject數(shù)據(jù)?
  • 同樣在AppDelegate下打印家目錄,對(duì)比得出目錄是不一致的,但是responseObject數(shù)據(jù)是存在的,并且可以直接讀取
    // 是路徑也是存儲(chǔ)的鍵
   NSString *filePath = @"responseObject";
   
   // 存儲(chǔ)數(shù)據(jù)
//    [LXKArchiverTool archiverObject:_responseObject key:filePath filePath:filePath];
   // 讀取數(shù)據(jù)
    id object = [LXKArchiverTool unarchiverPath:filePath key:filePath];

屏幕快照 2017-07-31 17.18.34.png
  • 如果我們刪除App后重新運(yùn)行則數(shù)據(jù)不會(huì)再存在了

Library

preference

  • Library/preference,用戶的偏好設(shè)置,我們可以使用上面的方法在一個(gè)App使用NSUserDefaults來測(cè)試是否存在這里和是否會(huì)刪除;
  • 存儲(chǔ)代碼:
NSUserDefaults *userDef = [NSUserDefaults standardUserDefaults];
   [userDef setObject:@"test" forKey:@"test"];
   [userDef synchronize];
  • 根據(jù)目錄我們可以看到是NSUserdefaults是以plist格式存儲(chǔ)在preference里面的:
屏幕快照 2017-07-31 17.36.38.png
  • 再次在另一個(gè)App獲取發(fā)現(xiàn)依然可以讀取數(shù)據(jù),并且刪除一樣不存在,所以preference跟隨沙盒數(shù)據(jù)在遷移,App升級(jí)的時(shí)候preference的plist一樣會(huì)存在

caches

屏幕快照 2017-07-31 17.54.53.png
  • 一下在連tmp都不用測(cè)試了....

幾個(gè)目錄獲取

  • 沙盒路徑:
// 沙盒路徑
NSString * path = NSHomeDirectory()
  • Documents:
NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  • Library:
NSArray *paths1 = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
  • caches:
NSArray *paths2 = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
  • preference
preference

-tmp:

//temp路徑
NSString * tmpDir = NSTemporaryDirectory();

總結(jié)

  • Documents是用于存儲(chǔ)用戶生成的內(nèi)容,該目錄的內(nèi)容共享提供給用戶,此目錄只能包含想用戶公開的文件,并且跟隨App的升級(jí)一樣存在,如果刪除將不存在
  • Library中可以創(chuàng)建自定義子目錄哦(當(dāng)我們有需求可以在這這兒創(chuàng)建),Library存儲(chǔ)的是不想想用戶公開的文件的子目錄,跟隨App升級(jí)都存在,除了caches子目錄存在
  • tem文件就是系統(tǒng)每一次重新啟動(dòng)都可能被清除,更不用說備份了
  • 由此,基本可以說我們存儲(chǔ)的數(shù)據(jù)都會(huì)跟隨App升級(jí)存在,但是刪除App就不會(huì)存在了,會(huì)重新創(chuàng)建一個(gè)新的沙盒(keychian刪除也會(huì)存在,不過最好慎用).
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末抄沮,一起剝皮案震驚了整個(gè)濱河市跋核,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌叛买,老刑警劉巖砂代,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異聪全,居然都是意外死亡泊藕,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門难礼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來娃圆,“玉大人,你說我怎么就攤上這事蛾茉∷夏兀” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵谦炬,是天一觀的道長(zhǎng)悦屏。 經(jīng)常有香客問我节沦,道長(zhǎng),這世上最難降的妖魔是什么础爬? 我笑而不...
    開封第一講書人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任甫贯,我火速辦了婚禮,結(jié)果婚禮上看蚜,老公的妹妹穿的比我還像新娘叫搁。我一直安慰自己,他們只是感情好供炎,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開白布渴逻。 她就那樣靜靜地躺著,像睡著了一般音诫。 火紅的嫁衣襯著肌膚如雪惨奕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評(píng)論 1 290
  • 那天竭钝,我揣著相機(jī)與錄音梨撞,去河邊找鬼。 笑死香罐,一個(gè)胖子當(dāng)著我的面吹牛聋袋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播穴吹,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼嗜侮!你這毒婦竟也來了港令?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤锈颗,失蹤者是張志新(化名)和其女友劉穎顷霹,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體击吱,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡淋淀,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了覆醇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片朵纷。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖永脓,靈堂內(nèi)的尸體忽然破棺而出袍辞,到底是詐尸還是另有隱情,我是刑警寧澤常摧,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布搅吁,位于F島的核電站威创,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏谎懦。R本人自食惡果不足惜肚豺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望界拦。 院中可真熱鬧吸申,春花似錦、人聲如沸寞奸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽枪萄。三九已至隐岛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瓷翻,已是汗流浹背聚凹。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留齐帚,地道東北人妒牙。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像对妄,于是被迫代替她去往敵國(guó)和親金抡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容