ios沙箱模式开启_iOS沙盒篇

本文详细介绍了iOS系统的沙盒机制,包括沙盒的限制、四大文件夹的用途及其在iTunes同步中的行为。AppName.app目录是只读的,包含应用的资源和可执行文件;Documents用于存储不可再生数据并会被iTunes同步;Library/Inbox用于外部应用传递文件;Library/Caches存储可再生数据,不会被iTunes同步;tmp则用于临时文件,系统可能会清理。
摘要由CSDN通过智能技术生成

iOS系统在安全性上的一大亮点就是沙盒。

每个iOS应用SDK都被限制在沙盒中,我们可以把沙盒当成一个设置了仅当前SDK可以访问的文件夹,苹果对沙盒有以下几条限制:

应用程序可以在自己的沙盒中运行,但不能访问任何其他应用程序的沙盒。

应用程序间不能共享数据。

禁止应用程序读写沙盒以外的文件夹。

沙盒根目录中有四个文件夹:

AppName.app

Documents

Library

tmp

iTunes在与iPhone同步时,备份所有的Documents和Library文件。

iPhone在重启时,丢弃所有的tmp文件。

一、以下从存放内容、是否会被iTunes同步两个方面来分别描述沙盒中四个文件夹的功能情况:

1. AppName.app

①存放内容

这是应用程序的程序包目录,包含了应用程序本身的数据、资源文件、可执行文件等等。程序启动以后,会根据需要从该目录中动态的加载代码或者资源到内存(懒加载:lazy loading)。

注意:AppName.app目录是只读的。为了防止被篡改,应用在安装的时候会将该目录签名。非越狱情况下,该目录中的内容是无法更改的;如果更改了目录内容,对应的签名就会发生改变,会导致应用程序无法启动。

②是否会被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文件中。

②是否会被iTunes同步

7. tmp

①存放内容

主要存放各种临时文件,保存应用再次启动时不需要的文件。而且,当应用不再需要这些文件时应该主动将其删除,因为该目录下的东西随时有可能被系统清理掉,目前已知的一种可能清理的原因是系统磁盘存储空间不足的时候。

②是否会被iTunes同步

二、获取沙盒路径

1. 获取沙盒主目录路径

NSString *homePath = NSHomeDirectory();

2. 获取Documents路径

NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

3. 获取Library路径

NSString *libraryPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0];

4. 获取Caches路径

NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];

5. 获取tmp路径

NSString *tmpDir = NSTemporaryDirectory();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值