从Xcode5 到Xcode 6 iOS应用的沙盒目录有所变化,基于Xcode5已经过时,所以这里就只介绍Xcode6 下的文件目录:
1、下图展示了Xocde6中app的目录
由上图可以看到Xcode6是通过 设备管理-》应用管理来组织文件的,在整个设备中存在不同操作系统的模拟器(通过GUID来命名),每个模拟器下有各自安装的应用(也是通过GUID来区分的),每个应用的data/containers目录下分别存在Bundle,Data,Shared三个目录。
Bundle文件夹下的存放的是应用的包,如下图
data文件夹下存放的是应用的数据文件,如下图
其中NSUserDefault(属性文件)文件存放在Libaray/Preference文件目录下
2、各个文件的作用
- <Application_Home>/AppName.app:存放应用程序自身
- <Application_Home>/Documents/:存放用户文档和应用数据文件
- <Application_Home>/Library/:应用程序规范的顶级目录,下面有一些规范定义的的子目录,当然也可以自定义子目录,用于存放应用的文件,但是不宜存放用户数据文件,和document一样会被itunes同步,但不包括caches子目录
- <Application_Home>/Library/Preferences,这里存放程序规范要求的首选项文件
- <Application_Home>/Library/Caches,保存应用的持久化数据,用于应用升级或者应用关闭后的数据保存,不会被itunes同步,所以为了减少同步的时间,可以考虑将一些比较大的文件而又不需要备份的文件放到这个目录下
- <Application_Home>/tmp/,保存应用数据,但不需要持久化的,在应用关闭后,该目录下的数据将删除,也可能系统在程序不运行的时候做
4、代码获取路径
(1)获取沙盒数据路径
NSString *bundlePath =NSHomeDirectory();
NSLog(@"沙盒路径:%@",bundlePath);
(2)获取Documents文件路径
NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString *documentPath = [pathsobjectAtIndex:0];
NSLog(@"document路径:%@",documentPath);
(3)获取Library文件路径
paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *libraryPath = [paths objectAtIndex:0];
NSLog(@"library路径:%@",libraryPath);
(4)获取Caches文件路径
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES);
NSString *cachesPath = [pathsobjectAtIndex:0];
NSLog(@"caches路径:%@",cachesPath);
(5)获取temp文件路径
NSString *tempPath =NSTemporaryDirectory();
NSLog(@"temp路径:%@",tempPath);