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;//自定义新的文件夹videoNSString *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<prearr.count; i++) {NSDictionary *dict=prearr[i];NSString *filePath=dict[@"filepath"];//重新拼接路径,每一次重新打包app,沙盒路径都会变,最后的文件名不变NSString *documentstr=@"";if([preorback isEqualToString:@"prefilepath"]){documentstr=@"prevideo";}else if([preorback isEqualToString:@"backfilepath"]){documentstr=@"backvideo";}else if([preorback isEqualToString:@"capture"]){documentstr=@"capture";}NSString *documentPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;//自定义新的文件夹videoNSString *video = [documentPath stringByAppendingPathComponent:documentstr];NSString *fileName = [filePath componentsSeparatedByString:@"/"].lastObject;NSString *newsPath = [video stringByAppendingPathComponent:fileName];[[NSFileManager defaultManager]removeItemAtPath:newsPath error:nil];}NSUserDefaults *predefault=[NSUserDefaults standardUserDefaults];[predefault removeObjectForKey:preorback];
}
//钥匙串存储
-(void)keychainstoreWith:(NSString *)filepathstr cameraname:(NSString *)cameraname key:(NSString *)preorbackkey identifier:(NSString *)keychainidentifier{KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc]initWithIdentifier:keychainidentifier accessGroup:nil];NSArray *pretemparr=[wrapper 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];}[wrapper setObject:prefilepatharr forKey:preorbackkey];}//从钥匙串中取
-(NSArray *)getdatafromkeychainWithkey:(NSString *)preorbackkey identifier:(NSString *)keychainidentifier{KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc]initWithIdentifier:keychainidentifier accessGroup:nil];//    NSString *username = [wrapper objectForKey:(id)kSecAttrAccount];
//    NSString *password = [wrapper objectForKey:(id)kSecValueData];NSArray *pretemparr = [wrapper objectForKey:preorbackkey];NSArray *prefilepatharr=nil;if(!pretemparr){prefilepatharr=[[NSArray alloc]init];}else {prefilepatharr=pretemparr;}return prefilepatharr;
}//清空钥匙串
-(void)clearKeychainWithidentifier:(NSString *)keychainidentifier{KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc]initWithIdentifier:keychainidentifier accessGroup:nil];[wrapper resetKeychainItem];
}

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

https://blog.csdn.net/RollingPin/article/details/82773079

iOS 沙盒机制,沙盒存储,钥匙串相关推荐

  1. iOS开发:沙盒机制以及利用沙盒存储字符串、数组、字典等数据

    iOS开发:沙盒机制以及利用沙盒存储字符串.数组.字典等数据 1.初识沙盒:(1).存储在内存中的数据,程序关闭,内存释放,数据就会丢失,这种数据是临时的.要想数据永久保存,将数据保存成文件,存储到程 ...

  2. iOS 开发之沙盒机制 文件操作 (NSFielManager)

    原文链接:http://www.jianshu.com/p/349855b5a8ae iOS APP 可以在自己的沙盒里读写文件,但是,不可以访问其他 APP 的沙盒.每一个 APP 都是一个信息孤岛 ...

  3. ios keychain 不被清理_苹果手机卸载软件会不会有残留?带你认识iOS沙盒机制!...

    iPhone能干净的卸载软件吗,会不会有残留_苹果手机怎么样完全清除软件残留个人信息? 这种问题,最容易发生在你换手机的时候,旧手机给家人使用或者是当二手机出给别人,就要使用到这种方法! 首先得了解下 ...

  4. iOS开发之沙盒机制(SandBox)

    iOS APP可以在自己的沙盒里读写文件,但是,不可以访问其他APP的沙盒.每一个APP都是一个信息孤岛,相互是不可以进行通信的,唯独可以通过URL Scheme.沙盒里面的文件可以是照片.声音文件. ...

  5. IOS沙盒机制(SandBox)

    IOS中的沙盒机制(SandBox)是一种安全体系,它规定了应用程序只能在为该应用创建的文件夹内读取文件,不可以访问其他地方的内容.所有的非代码文件都保存在这个地方,比如图片.声音.属性列表和文本文件 ...

  6. ios沙箱软件_iOS 开发之沙盒机制

    1.iOS 沙盒机制简介 沙盒也叫沙箱,英文standbox,其原理是通过重定向技术,把程序生成和修改的文件定向到自身文件夹中.在沙盒机制下,每个程序之间的文件夹不能互相访问.iOS系统为了保证系统安 ...

  7. 产品经理们是如何越过 iOS 沙盒机制的?

    点击上方篮字,轻松关注! 小咖导读 产品经理们是如何越过 iOS 沙盒机制的?今天PMcaff小咖就带大家来看看东方产品汪的暴力美学. iOS 沙盒机制 先来解释一下什么是 iOS 沙盒机制. iOS ...

  8. android强制选择器,谷歌手软了:不再强制在Android Q采用隔离存储沙盒机制

    原标题:谷歌手软了:不再强制在Android Q采用隔离存储沙盒机制 IT之家4月26日消息 在Android Q的首个Beta版中,谷歌推出了一个隐藏的.激进的隔离存储沙盒机制,名为"Sc ...

  9. ios 获取沙盒文件名_iOS沙盒机制

    沙盒机制每个应用都有自己独立的存储空间 应用不能翻过围墙去访问别的存储空间 应用请求的数据都要进行权限检查,如果不符合,就不会被放行 ios app只能在自己的沙盒目录下读取文件,在沙盒中,bundl ...

最新文章

  1. Spring Boot 中的 RestTemplate 不好用?试试 Retrofit!
  2. java m4a文件拼接_面试官:为啥不提倡字符串拼接?看阿里java开发手册怎么说
  3. oracle数据库多表联查并排序,oracle数据库之多表联接查询(一)
  4. 初始序列为1 8 6 2 5 4 7 3一组数采用堆排序,当建堆(小根堆)完毕时,堆所对应的二叉树中序遍历序列为
  5. [luogu3380][bzoj3196]【模板】二逼平衡树【树套树】
  6. 苹果将于 2025 年推出的 Apple Car 长什么样?
  7. unity3d android debug log,调试 – 如何在连接到设备时看到MonoDevelop Unity中的Debug.Log输出?...
  8. HashMap深度解析
  9. 关于郭天祥51开发板无法烧敲代码问题的解决(Prolific USB-to-Serial Comm Port)
  10. 安装Oracle 11.2.0
  11. 品味.NET经典[转载]
  12. 树莓派:Adafruit的I2C SSD1306 OLED驱动
  13. 邮件、社交营销最全“勾搭”策略
  14. 抽样调查之分层随机抽样
  15. DNN常见激活函数与其求导公式及来源
  16. 无限级分类之递归查找家谱树
  17. 2016年全国高中数学联合竞赛试题及详细解答
  18. 用Python帮你选注双色球号码
  19. AI遮天传 DL-深度学习在计算机视觉中的应用
  20. matlab中Add什么意思,add detail是什么意思

热门文章

  1. PostGIS 操作geometry方法
  2. NDK R20编译Ffmpeg集成Android命令
  3. 零差云控(zeroerr)eCoder35S-R20B开箱
  4. oracle中如果值为空null则取默认值0,nvl函数
  5. python中while not循环_Python学习-while循环逻辑运算符
  6. 对CrossFire根目录下的窥探和分析(Lithtech引擎)
  7. 【愚公系列】2022年04月 微信小程序-地图的使用之API相关函数案例
  8. Kubernetes Python Client
  9. QQ三国 秘制机簧去哪打?打的太慢?
  10. 软考项目管理师(高级)快速通过分享