macOS: 沙盒(sandbox)機制

沙盒機制

蘋果沙盒機制指的是應用(app)只能在系統獨立分配的一塊存儲空間區域裏去使用,包括寫入讀取等都是在這塊區域裏,想要訪問沙盒外的數據須要獲得系統的受權權限。macos

macOS 與 iOS 沙盒機制區別

  • OSX 沙盒路徑無論是xcode的程序或已裝機的APP,若開啓沙盒權限,都是在固定目錄下(/Users/admin/Library/Containers/..)
  • iOS 沙盒路徑: xcode的程序放在xcode的一個緩存目錄下,真機調試放在手機相對應程序的目錄下

這裏對OSX系統的沙盒文件作下介紹使用方法

OSX自從10.6系統開始引入沙盒機制,規定發佈到Mac AppStore的應用,必須遵照沙盒約定。xcode

建立Xcode工程macos項目時,需勾選沙盒開啓功能,並必定要選擇sign簽名證書,由於沙盒的文件緩存目錄是以簽名後的Bundle ID爲名稱建立最外層文件夾的

其中沙盒權限下有若干選項可根據本身的需求選擇:
1.Network:網絡訪問控制
   Incoming Connections(Server) :應用作爲Server對外提供HTTP,FTP等服務時須要打開
   Outgoing Connections(Client) :作爲客戶端,訪問服務器時須要打開
複製代碼
2.Hardware:硬件資源控
  Printing爲必須勾選。App的默認第一個頂級菜單中有打印功能的子菜單。
  Camera (相機)
  Micophone (麥克風)
  USB (USB插口)
  Printing
複製代碼
3.App Data:獲取系統的聯繫人,位置,日曆服務時須要打開
  Contacts
  Location
  Calendar
複製代碼
4.File Access:文件和用戶目錄的訪問控制,分爲禁止none,只讀,讀寫3類
  User Selected File:文檔類應用或者須要用戶選擇打開某個文件時,須要選擇合適的訪問權限.
  Downloads Folder
  Pictures Folder
  Music Folder
  Movies Folder
複製代碼

上圖的沙盒配置表示應用須要鏈接服務器獲取數據;應用菜單中有打印功能的菜單;緩存

沙盒配置信息存儲

選擇配置了沙盒的訪問控制信息後,Xcode會自動保存到一個擴展名爲.entitlements的plist文件中bash

應用打包時會對這個文件進行簽名

沙盒中每一個須要訪問權限的項都對應一個key,對應的value,YES 或 NO表示是否容許訪問。 服務器

應用運行期間要獲取某個權限時,系統都會經過.entitlements去檢查應用是否有受權,若是沒有就拒絕訪問。markdown

文件目錄訪問 (利用NSUserDefaults)

OSX相對iOS要更爲開放一些,好比在訪問應用文件目錄,是能夠在電腦的文件目錄下找到的網絡

好比咱們想要用OC的NSUserDefaults區存儲一些能夠快速訪問的數據,下面咱們就來舉例說明一下如何在文件中找到這些存儲文件所在目錄位置app

此時打印路徑爲spa

沙盒緩存地址:/Users/admin/Library/Containers/SD.OSXkeepgoing/Data/Library
複製代碼

com+shift+G ,快捷鍵快速訪問文件夾調試

能夠看到當前macos應用所建立的沙盒目錄,其中Documents與Library爲固有文件夾,其餘的文件都爲OSX系統文件的替身鏡像文件夾。而咱們以前NSUserDefaults所保存的數據都是以plist表的形式保存在

../Library/Preferences/XXX.plist
複製代碼

相關文章
相關標籤/搜索