博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS 沙盒机制,沙盒存储,钥匙串
阅读量:4289 次
发布时间:2019-05-27

本文共 3527 字,大约阅读时间需要 11 分钟。

SandBox,沙盒机制,是一种安全体系。我们所开发的每一个应用程序在设备上会有一个对应的沙盒文件夹,当前的程序只能在自己的沙盒文件夹中读取文件,不能访问其他应用程序的沙盒。在项目中添加的所有非代码的资源,比如图片、声音、属性列表等都存在自己的沙盒中。此外,在程序运行中动态生成的或者从网络获取的数据,如果要存储,也都是存储到沙盒中。

获取沙盒文件:

获取模拟器的沙盒文件使用断点,在控制台选中输入  po  NSHomeDirectory()复制沙河路径,点击一下桌面空白处,command+shift+G,粘贴沙盒路径,回车即可2.获取真机的沙盒路径  选择Xcode导航栏中的 Window -> Devices  左侧选择手机,右侧选择需要的app  双击需要的app,会出现一个界面,以name+版本号+container命名,但是里面的内容需要加载一段时间,并且内容只能阅读  在所有app的下方存在以 "+",  "-", "齿轮" 构成的区域,左击齿轮,选择 Download Container,进行下载 右击下载包,选择显示包内容,选择AppData,里面就是沙盒文件夹

NSUserDefaults 数据时保存在 沙盒里面的,会随着软件删除而被清空。

 

Application Bundle:包含应用可执行文件和所有资源文件,只读。

Document/ 存放应用运行时生成的并且需要保存的数据。iTunes或iCloud同步设备时备份该目录。

Library/Caches/ 存放应用运行时生成的并且需要保存的数据。iTunes或iCloud不同步。

Library/Preferences/ 存放偏好设置。ios的偏好设置(settings)应用也会在该目录查找应用的设置信息。NSUserDefaults保存在该目录下。iTunes或iCloud同步设备时备份该目录。

temp/ 存放应用运行时所需的临时数据。当某个应用没运行时,ios系统可能会清除该目录下的文件。但不可依赖这种自动清除机制,应该及时手动清除。

 

1、获取沙盒根目录的方法

NSString *homeDir = NSHomeDirectory();

2、获取Document路径

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *docDir = [paths objectAtIndex:0];

3、 获取Caches路径

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);

NSString *cachesDir = [paths objectAtIndex:0];

 

4、获取tmp路径

NSString *tmpDir = NSTemporaryDirectory();

 
iOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等。  1.1、每个应用程序都有自己的存储空间  1.2、应用程序不能翻过自己的围墙去访问别的存储空间的内容  1.3、应用程序请求的数据都要通过权限检测,假如不符合条件的话,不会被放行。  从表层上理解sandbox是一种安全体系,应用程序的所有操作都要通过这个体系来执行,其中核心内容是:sandbox对应用程序执行各种操作的权限限制。

 

//使用的时候需要重新拼接存储路径/** *documentstr   中间文件夹的名字 *filePath      原来的路径 **/-(NSString *)repinjiestorePathWithdocumentstr:(NSString *)documentstr filepath:(NSString *)filePath{    //重新拼接路径,每一次重新打包app,沙盒路径都会变,最后的文件名不变    NSString *documentPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;    //自定义新的文件夹video    NSString *video = [documentPath stringByAppendingPathComponent:documentstr];    NSString *fileName = [filePath componentsSeparatedByString:@"/"].lastObject;    NSString *newsPath = [video stringByAppendingPathComponent:fileName];    return newsPath;}//偏好存储-(void)defaultStoreObject:(NSString *)filepathstr cameraname:(NSString *)cameraname key:(NSString *)preorbackkey{    //存储偏好设置    NSUserDefaults *predefault=[NSUserDefaults standardUserDefaults];    NSArray *pretemparr=[predefault objectForKey:preorbackkey];    NSMutableArray *prefilepatharr=nil;    if(!pretemparr){        prefilepatharr=[[NSMutableArray alloc]init];    }else {        prefilepatharr=[NSMutableArray arrayWithArray:pretemparr];    }    if(filepathstr &&![filepathstr isEqualToString:@""]){        NSDictionary *dict=@{@"cameraname":cameraname?cameraname:@"",@"filepath":filepathstr?filepathstr:@""};        [prefilepatharr addObject:dict];    }    [predefault  setObject:prefilepatharr forKey:preorbackkey];    [predefault synchronize];}//读取偏好存储-(NSArray *)readDefaulfStoreobjectWithkey:(NSString *)preorbackkey{    NSUserDefaults *predefault=[NSUserDefaults standardUserDefaults];    NSArray *pretemparr=[predefault objectForKey:preorbackkey];    NSArray *prefilepatharr=nil;    if(!pretemparr){        prefilepatharr=[[NSArray alloc]init];    }else {        prefilepatharr=pretemparr;    }    return prefilepatharr;}//删除所有沙盒缓存-(void)delAlldatasWith:(NSString *)preorback{    NSArray *prearr=[[HximCommanManager sharedCommonManager] readDefaulfStoreobjectWithkey:preorback];    for (int i=0; i

重新运行app沙盒路径失效的问题:解决--//重新拼接路径,每一次重新打包app,沙盒路径都会变,最后的文件名不变

 

 

转载地址:http://zzmgi.baihongyu.com/

你可能感兴趣的文章
利用iptables来配置linux禁止所有端口登陆和开放指定端口
查看>>
Python模块——struct
查看>>
mysql中select * for update
查看>>
linux vmstat 1 ,watch , pmap -p,
查看>>
MYSQL 相关
查看>>
python 构建client 程序
查看>>
c++ 加载so动态库中的资源
查看>>
加解密 签名
查看>>
linux top 命令分析
查看>>
Linux vmstat命令详解
查看>>
linux pmap命令
查看>>
MySQL数据同步【双主热备】
查看>>
Mysql主从复制实践手册
查看>>
nginx配置正向代理支持HTTPS
查看>>
Perf -- Linux下的系统性能调优神器
查看>>
C++ 用libcurl库进行http通讯网络编程
查看>>
秒杀多线程第十篇 生产者消费者问题
查看>>
信号量与互斥锁
查看>>
linux 查看CPU个数,核数
查看>>
string 序列化
查看>>