沙盒机制
苹果沙盒机制指的是应用(app)只能在系统独立分配的一块存储空间区域里去使用,包括写入读取等都是在这块区域里,想要访问沙盒外的数据需要得到系统的授权权限。
macOS 与 iOS 沙盒机制区别
- OSX 沙盒路径不管是xcode的程序或已装机的APP,若开启沙盒权限,都是在固定目录下(/Users/admin/Library/Containers/..)
- iOS 沙盒路径: xcode的程序放在xcode的一个缓存目录下,真机调试放在手机相对应程序的目录下
这里对OSX系统的沙盒文件做下介绍使用方法
OSX自从10.6系统开始引入沙盒机制,规定发布到Mac AppStore的应用,必须遵守沙盒约定。
创建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文件中
沙盒中每个需要访问权限的项都对应一个key,对应的value,YES 或 NO表示是否允许访问。
应用运行期间要获取某个权限时,系统都会通过.entitlements去检查应用是否有授权,如果没有就拒绝访问。
文件目录访问 (利用NSUserDefaults)
OSX相对iOS要更为开放一些,比如在访问应用文件目录,是可以在电脑的文件目录下找到的
比如我们想要用OC的NSUserDefaults区存储一些可以快速访问的数据,下面我们就来举例说明一下如何在文件中找到这些存储文件所在目录位置
此时打印路径为
沙盒缓存地址:/Users/admin/Library/Containers/SD.OSXkeepgoing/Data/Library
com+shift+G ,快捷键快速访问文件夹
../Library/Preferences/XXX.plist