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
复制代码

相关文章
相关标签/搜索