「上班第一天。祝大家新的一年工作顺利」
#####「摘要:OS X 沙箱机制 从OS X10.6之后引进该机制。在之前的OS X10.9之前没有做强制的要求。但是在OS X10.9 之后,提交到MAC APPStore的应用,必须遵守并且支持沙箱协议。沙箱对访问系统的资源做啦充分的限定说明。」
沙箱机制是什么
苹果引入沙箱机制后,要求上线到APP Store的MAC应用必须支持遵守沙箱机制。沙箱对应用访问的系统资源、硬件外设、文件、网络做啦严格的限制。这样防止恶意的APP攻击系统获得控制系统的权限,保证啦OS X的系统安全。
沙箱把每个应用分配一个独立的空间,每个应用只能在自己的小天地里面耍。要想获取自己空间之外的资源必须获得授权「如图」。
在应用中设置
应用开发完成提交到APP Store,必须设置沙盒机制,如果不设置则会报错「ERROR ITMS-90168 」。
切换到工程的target------->capabilities。
第一项就是APP Sandbox开关,点击ON,开始沙箱机制。
1、 Network: 网络访问控制
Incoming Connections(Server) :应用做为Server对外提供HTTP,FTP等服务时需要打开
Outgoing Connections(Client):做为客户端,访问服务器时需要打开
2、Hardware:硬件资源控制。
Camera : 摄像头
Micophone:麦克风
USB :USB接口
Printing: 打印功能
根据自己的APP进行设置。
3、APP Data:采集信息
Contacts:系统联系人
Location:位置
Calendar:日历
4、File Access:文件和用户目录的访问控制,分为禁止none,只读,读写3类
User Selected File:文档类应用或者需要用户选择打开某个文件时,需要选择合适的访问权限
Downloads Folder:下载文件夹
Pictures Folder:图库
Music Folder:音乐库
Movies Folder:电影库
沙盒设置表示应用需要连接服务器获取数据;应用菜单中有打印功能的菜单;允许用户打开文件并进行读写操作。
如果应用中不需要的权限项,一律不要打开。否则App Review团队会拒绝你的应用上架「ERROR ITMS-90168 」。
沙盒配置信息存储
沙盒中每个需要访问权限的项都对应一个key,对应的value,YES 或 NO表示是否允许访问。
选择配置了沙盒的访问控制信息后,Xcode会自动保存到一个扩展名为.entitlements的plist文件中
应用打包时会对这个文件进行签名
.entitlements文件是一个plist文件,里面存储了sandbox的访问权限配置项信息.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.assets.pictures.read-write</key>
<true/>
<key>com.apple.security.device.usb</key>
<true/>
<key>com.apple.security.files.downloads.read-write</key>
<true/>
<key>com.apple.security.files.user-selected.read-write</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
<key>com.apple.security.network.server</key>
<true/>
</dict>
</plist>
应用运行期间要获取某个权限时,系统都会通过.entitlements去检查应用是否有授权,如果没有就拒绝访问。