今天系统讲一下 iOS 沙盒机制 (App Sandbox),这是 iOS 应用安全的核心。
1. 什么是沙盒机制?
- 
沙盒 (Sandbox):指 iOS 给每个应用分配的一个独立的、隔离的文件系统和运行环境。
 - 
目的:
- 
安全性:应用之间互相隔离,防止恶意访问其他应用的数据。
 - 
稳定性:一个应用崩溃不会影响系统和其他应用。
 - 
隐私保护:用户数据不会被随意读取。
 
 - 
 
所以,每个应用运行时,就像被关在"沙盒"里,只能访问自己这片空间。
2. 沙盒内容
每个 iOS 应用安装后,都会生成一个独立的目录,路径类似:
/var/mobile/Containers/Data/Application/<UUID>/
        其中 <UUID> 是系统随机生成的唯一标识,每次重新安装都会变化。
主要目录结构:
<UUID>/
 ├── Documents/         # 用户数据,重要文件(会被备份)
 ├── Library/
 │     ├── Preferences/ # NSUserDefaults 存储位置
 │     └── Caches/      # 缓存数据(不会备份)
 ├── tmp/               # 临时文件,系统可能随时清理
 └── App.app/           # 应用包(只读,存放可执行文件和资源)
        3. 目录用途
- 
Documents/
- 
存放用户创建的重要数据(比如笔记、录音文件)。
 - 
会被 iTunes / iCloud 备份。
 
 - 
 - 
Library/Preferences/
- 存储 
NSUserDefaults的配置。 
 - 存储 
 - 
Library/Caches/
- 
存放缓存数据(比如图片、视频缓存)。
 - 
系统可能清理,不会备份。
 
 - 
 - 
tmp/
- 
临时文件目录,系统可能随时删除。
 - 
适合存放中间文件、下载过程数据。
 
 - 
 - 
App.app/
- 
应用自身的安装包,包含资源文件和可执行文件。
 - 
只读,不能写入。
 
 - 
 
4. 访问权限
- 
应用 不能访问其他应用的沙盒。
 - 
系统也不会让应用访问非授权的区域(例如系统文件)。
 - 
访问敏感资源(相机、麦克风、通讯录)需要 用户授权,走权限申请机制。
 
5. 获取路径的常见方法
// 沙盒根目录
NSString *home = NSHomeDirectory();
// Documents
NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
// Library
NSString *lib = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) firstObject];
// Caches
NSString *cache = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
// tmp
NSString *tmp = NSTemporaryDirectory();
        6. 限制与突破
- 
✅ 沙盒机制保证了安全和稳定。
 - 
❌ 应用不能直接共享文件。
 - 
如果要共享数据:
- 
使用 App Group(同一开发者的多个应用可共享)。
 - 
使用 UIDocumentInteractionController 、UIActivityViewController 进行文件分享。
 - 
或者通过 后台服务器交互。
 
 - 
 
7. 总结
iOS 沙盒机制特点:
- 
独立性:每个应用一个独立目录。
 - 
安全性:无法访问其他应用或系统文件。
 - 
持久化策略:重要数据放 Documents,会备份;缓存放 Caches,不会备份;临时文件放 tmp,会被清理。