iOS 沙盒机制,沙盒存储,钥匙串
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 沙盒机制,沙盒存储,钥匙串相关推荐
- iOS开发:沙盒机制以及利用沙盒存储字符串、数组、字典等数据
iOS开发:沙盒机制以及利用沙盒存储字符串.数组.字典等数据 1.初识沙盒:(1).存储在内存中的数据,程序关闭,内存释放,数据就会丢失,这种数据是临时的.要想数据永久保存,将数据保存成文件,存储到程 ...
- iOS 开发之沙盒机制 文件操作 (NSFielManager)
原文链接:http://www.jianshu.com/p/349855b5a8ae iOS APP 可以在自己的沙盒里读写文件,但是,不可以访问其他 APP 的沙盒.每一个 APP 都是一个信息孤岛 ...
- ios keychain 不被清理_苹果手机卸载软件会不会有残留?带你认识iOS沙盒机制!...
iPhone能干净的卸载软件吗,会不会有残留_苹果手机怎么样完全清除软件残留个人信息? 这种问题,最容易发生在你换手机的时候,旧手机给家人使用或者是当二手机出给别人,就要使用到这种方法! 首先得了解下 ...
- iOS开发之沙盒机制(SandBox)
iOS APP可以在自己的沙盒里读写文件,但是,不可以访问其他APP的沙盒.每一个APP都是一个信息孤岛,相互是不可以进行通信的,唯独可以通过URL Scheme.沙盒里面的文件可以是照片.声音文件. ...
- IOS沙盒机制(SandBox)
IOS中的沙盒机制(SandBox)是一种安全体系,它规定了应用程序只能在为该应用创建的文件夹内读取文件,不可以访问其他地方的内容.所有的非代码文件都保存在这个地方,比如图片.声音.属性列表和文本文件 ...
- ios沙箱软件_iOS 开发之沙盒机制
1.iOS 沙盒机制简介 沙盒也叫沙箱,英文standbox,其原理是通过重定向技术,把程序生成和修改的文件定向到自身文件夹中.在沙盒机制下,每个程序之间的文件夹不能互相访问.iOS系统为了保证系统安 ...
- 产品经理们是如何越过 iOS 沙盒机制的?
点击上方篮字,轻松关注! 小咖导读 产品经理们是如何越过 iOS 沙盒机制的?今天PMcaff小咖就带大家来看看东方产品汪的暴力美学. iOS 沙盒机制 先来解释一下什么是 iOS 沙盒机制. iOS ...
- android强制选择器,谷歌手软了:不再强制在Android Q采用隔离存储沙盒机制
原标题:谷歌手软了:不再强制在Android Q采用隔离存储沙盒机制 IT之家4月26日消息 在Android Q的首个Beta版中,谷歌推出了一个隐藏的.激进的隔离存储沙盒机制,名为"Sc ...
- ios 获取沙盒文件名_iOS沙盒机制
沙盒机制每个应用都有自己独立的存储空间 应用不能翻过围墙去访问别的存储空间 应用请求的数据都要进行权限检查,如果不符合,就不会被放行 ios app只能在自己的沙盒目录下读取文件,在沙盒中,bundl ...
最新文章
- Spring Boot 中的 RestTemplate 不好用?试试 Retrofit!
- java m4a文件拼接_面试官:为啥不提倡字符串拼接?看阿里java开发手册怎么说
- oracle数据库多表联查并排序,oracle数据库之多表联接查询(一)
- 初始序列为1 8 6 2 5 4 7 3一组数采用堆排序,当建堆(小根堆)完毕时,堆所对应的二叉树中序遍历序列为
- [luogu3380][bzoj3196]【模板】二逼平衡树【树套树】
- 苹果将于 2025 年推出的 Apple Car 长什么样?
- unity3d android debug log,调试 – 如何在连接到设备时看到MonoDevelop Unity中的Debug.Log输出?...
- HashMap深度解析
- 关于郭天祥51开发板无法烧敲代码问题的解决(Prolific USB-to-Serial Comm Port)
- 安装Oracle 11.2.0
- 品味.NET经典[转载]
- 树莓派:Adafruit的I2C SSD1306 OLED驱动
- 邮件、社交营销最全“勾搭”策略
- 抽样调查之分层随机抽样
- DNN常见激活函数与其求导公式及来源
- 无限级分类之递归查找家谱树
- 2016年全国高中数学联合竞赛试题及详细解答
- 用Python帮你选注双色球号码
- AI遮天传 DL-深度学习在计算机视觉中的应用
- matlab中Add什么意思,add detail是什么意思