iOS--淺談iOS沙盒目錄

来源:http://www.cnblogs.com/bolin-123/archive/2016/04/07/5361507.html
-Advertisement-
Play Games

原文地址:http://blog.csdn.net/wzzvictory/article/details/18269713 出於安全考慮,iOS系統的沙盒機制規定每個應用都只能訪問當前沙盒目錄下麵的文件(也有例外,比如系統通訊錄能在用戶授權的情況下被第三方應用訪問),這個規則把iOS系統的封閉性展現 ...


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

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

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

每個沙盒下麵都有相似的目錄結構,如下圖所示(出自蘋果官方文檔): 每個應用的沙盒目錄都是相似的,主要包含圖中所示的4個目錄:

1、MyApp.app

①存放內容 該目錄包含了應用程式本身的數據,包括資源文件和可執行文件等。程式啟動以後,會根據需要從該目錄中動態載入代碼或資源到記憶體,這裡用到了lazy loading的思想。 ②整個目錄是只讀的 為了防止被篡改,應用在安裝的時候會將該目錄簽名。非越獄情況下,該目錄中內容是無法更改的;在越獄設備上如果更改了目錄內容,對應的簽名就會被改變,這種情況下蘋果官網描述的後果是應用程式將無法啟動,我沒實踐過。 ③是否會被iTunes同步 否

2、Documents

①存放內容 我們可以將應用程式的數據文件保存在該目錄下。不過這些數據類型僅限於不可再生的數據,可再生的數據文件應該存放在Library/Cache目錄下。 ②是否會被iTunes同步 是  

3、Documents/Inbox

①存放內容 該目錄用來保存由外部應用請求當前應用程式打開的文件。 比如我們的應用叫A,向系統註冊了幾種可打開的文件格式,B應用有一個A支持的格式的文件F,並且申請調用A打開F。由於F當前是在B應用的沙盒中,我們知道,沙盒機制是不允許A訪問B沙盒中的文件,因此蘋果的解決方案是講F拷貝一份到A應用的Documents/Inbox目錄下,再讓A打開F。 ②是否會被iTunes同步 是

4、Library

①存放內容 蘋果建議用來存放預設設置或其它狀態信息。 ②是否會被iTunes同步 是,但是要除了Caches子目錄外

5、Library/Caches

①存放內容 主要是緩存文件,用戶使用過程中緩存都可以保存在這個目錄中。前面說過,Documents目錄用於保存不可再生的文件,那麼這個目錄就用於保存那些可再生的文件,比如網路請求的數據。鑒於此,應用程式通常還需要負責刪除這些文件。 ②是否會被iTunes同步 否。   6、Library/Preferences ①存放內容 應用程式的偏好設置文件。我們使用NSUserDefaults寫的設置數據都會保存到該目錄下的一個plist文件中,這就是所謂的寫道plist中! ②是否會被iTunes同步 是   7、tmp ①存放內容 各種臨時文件,保存應用再次啟動時不需要的文件。而且,當應用不再需要這些文件時應該主動將其刪除,因為該目錄下的東西隨時有可能被系統清理掉,目前已知的一種可能清理的原因是系統磁碟存儲空間不足的時候。 ②是否會被iTunes同步 否    二、獲取主要目錄路徑的方式

1、沙盒目錄

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 為了更好理解浮動和position,建議先看看我寫的這篇文章《Html文檔流和文檔對象模型DOM理解》 正文 一、浮動 CSS設計float屬性的主要目的,是為了實現文本繞排圖片的效果。然而,這個屬性居然也成了創建多欄佈局最簡單的方式。 如何浮動一個元素?先設定其寬度width,再增加樣式規則 ...
  • 0.導入框架準備工作 •1. 將AFNetworking3.0+框架程式拖拽進項目 •2. 或使用Cocopod 導入AFNetworking3.0+ •3. 引入 #import "AFNetworking.h" > 1.UI準備工作 A. 定義一個全局的 NSURLSessionDownload ...
  • 轉載請註明出處:http://blog.csdn.net/guolin_blog/article/details/47803149 之前有很多朋友都問過我,在Android系統中怎樣才能實現靜默安裝呢?所謂的靜默安裝,就是不用彈出系統的安裝界面,在不影響用戶任何操作的情況下不知不覺地將程式裝好。雖說 ...
  • 以下問題都是自己在項目中遇到的,解決問題的方法肯定有多種,我所列舉的不一定就是最好的解決辦法。如有問題歡迎大家指正,補充,交流。 解決同時按兩個按鈕進兩個view的問題。[button setExclusiveTouch:YES]; 在6p模擬器上輸出寬度是414,在6p真機上輸出是375是測試機本 ...
  • 代碼: ...
  • 以下是三個IOS開發中最常用的控制項,作為IOS基礎學習教程知識 ,初學者需要瞭解其基本定義和常用設置,以便在開發在熟練運用。 UIButton按鈕 第一、UIButton的定義 UIButton *button=[[UIButton buttonWithType:(UIButtonType); 能夠 ...
  • 一、響應鏈 在IOS開發中會遇到各種操作事件,通過程式可以對這些事件做出響應。 首先,當發生事件響應時,必須知道由誰來響應事件。在IOS中,由響應者鏈來對事件進行響應,所有事件響應的類都是UIResponder的子類,響應者鏈是一個由不同對象組成的層次結構,其中的每個對象將依次獲得響應事件消息的機會 ...
  • 什麼是廣播 什麼是廣播 生活中的電視頻道、收音機、手機、都有自己的特定廣播,他們不管是否有人關心、收聽等,不管你是否看電視,每個頻道都實施按照自己的進步進行播放、收音機也是!所以我理解的android廣播機制也就是這樣--廣播發佈者只負責把發生的事件發出,至於是否有接聽者或者接聽者接收到怎樣處理並不 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...