Hello, World!

Sandbox机制

字数统计: 569阅读时长: 2 min
2017/05/14 Share

iOS为每个应用程序提供了一个独立的文件空间,该空间称为沙盒。应用程序与系统交互时候大多数情况都限制在自己沙盒,不可以去其它地方访问,所以非代码文件都要保存在沙盒,例如图像,图标,声音,映像,属性列表,文本文件等。

1.每个应用程序都有自己的存储空间。
2.应用程序不能翻过自己的围墙去访问别的存储空间的内容。
3.应用程序请求的数据都要通过权限检测,假如不符合条件的话,不会被放行。

Sandbox结构

Sandbox结构如下:

1
2
3
4
5
6
7
8
9
Documents (iTunes同步设备时会备份该目录)

Library

Caches

Preferences (iTunes同步设备时会备份该目录)

tmp

Documents

保存应用运行时生成的需要持久化的数据(重要的、备份的)。
系统会自动备份该文件夹下面的所有文件。如果大文件(音视频,多媒体)放置在该文件夹下面的话,提交Appstore审核可能被拒接。解决办法:对大文件做非备份设置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#import <sys/xattr.h>

@implementation BackupTool

/// 对指定路径的文件做非备份设置
/// @param URL 文件的路径
+ (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL {
const char* filePath = [[URL path] fileSystemRepresentation];
const char* attrName = "com.apple.MobileBackup";
u_int8_t attrValue = 1;

int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, XATTR_NOFOLLOW);
return result == 0;
}

@end

Caches

保存应用运行时生成的需要持久化的数据(体积大、不重要、不备份)。
系统不会自动清理cache目录中的文件,需要程序开发时,”必须提供 cache目录的清理解决方案”。
网络请求的系统缓存会以db的形式存在Caches中。

Preferences

保存应用的所有偏好设置,iTunes同步设备时会备份该目录。
通过NSUserDefaults类添加的偏好设置,都在该文件夹中。

tmp

保存应用运行时所需要的临时数据或文件,使用完毕后文件会从该目录删除(例如断点下载)。
不定期清理:1.重新启动手机,tmp目录会被清空。2.系统磁盘空间不足时,系统也会自动清理,即使应用没有运行。

CATALOG
  1. 1. Sandbox结构
    1. 1.1. Documents
    2. 1.2. Caches
    3. 1.3. Preferences
    4. 1.4. tmp