IOS沙盒(SandBox)

摘要:
IOS中的沙盒机制是一个安全系统,它规定应用程序只能读取为应用程序创建的文件夹中的文件,不能访问其他地方的内容。另一种简单的方法是右键单击Finder图标-转到文件夹-输入/Users/yourusername/Library/ApplicationSupport/iPhoneSimulator/,然后确认。

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

1.每个应用程序都在自己的沙盒内

2.不能随意跨越自己的沙盒去访问别的应用程序沙盒的内容

3.应用程序向外请求或接收数据都需要经过权限认证

查看模拟器的沙盒文件夹在Mac电脑上的存储位置,首先,这个文件夹是被隐藏的,所以要先将这些文件显示出来,打开命令行:

显示Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool true

隐藏Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool false

然后重新启动Finder,点击屏幕左上角苹果标志——强制退出——选择Finder然后点击重新启动,这个时候在重新打开Finder就可以看到被隐藏的文件了。

还有一种比较简单的办法就是直接点击Finder图标右键——前往文件夹——输入/Users/your username/Library/Application Support/iPhone Simulator/ ,然后确认就可以了。your username是你本机的用户名

然后按下图进入相应的文件夹,就可以到模拟器的沙盒文件目录了:

IOS沙盒(SandBox)第1张

接着进入一个模拟器版本,我这里是5.1

IOS沙盒(SandBox)第2张

然后可以看到Applications下面存放的就是模拟器中所装的开发的应用程序,随便进入一个后可以看到,一个沙盒中包含了四个部分,如图所示:

IOS沙盒(SandBox)第3张

分别是.app文件,这个就是可运行的应用文件,Documents,苹 果建议将程序中创建的或在程序中浏览到的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录;Library,存储程序的默认设置或其它 状态信息;Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除;tmp,创建和存放临时文件的地 方。

下面通过代码来获取这些目录:

复制代码
 1     //获取根目录  
 2         NSString *homePath = NSHomeDirectory();  
 3         NSLog(@"Home目录:%@",homePath);  
 4           
 5         //获取Documents文件夹目录,第一个参数是说明获取Doucments文件夹目录,第二个参数说明是在当前应用沙盒中获取,所有应用沙盒目录组成一个数组结构的数据存放  
 6         NSArray *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);  
 7         NSString *documentsPath = [docPath objectAtIndex:0];  
 8         NSLog(@"Documents目录:%@",documentsPath);  
 9           
10         //获取Cache目录  
11         NSArray *cacPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);  
12         NSString *cachePath = [cacPath objectAtIndex:0];  
13         NSLog(@"Cache目录:%@",cachePath);  
14           
15         //Library目录  
16         NSArray *libsPath = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);  
17         NSString *libPath = [libsPath objectAtIndex:0];  
18         NSLog(@"Library目录:%@",libPath);  
19           
20         //temp目录  
21         NSString *tempPath = NSTemporaryDirectory();  
22         NSLog(@"temp目录:%@",tempPath);  
复制代码

输出结果如下:

2012-08-03 11:10:24.325 SandBoxTest[12549:f803] Home目录:/Users/Ryan/Library/Application Support/iPhone Simulator/5.1/Applications/A6B99E5A-E2C7-46E9-867A-4E7619F0DA45

2012-08-03 11:10:24.325 SandBoxTest[12549:f803] Documents目录:/Users/Ryan/Library/Application Support/iPhone Simulator/5.1/Applications/A6B99E5A-E2C7-46E9-867A-4E7619F0DA45/Documents

2012-08-03 11:10:24.326 SandBoxTest[12549:f803] Cache目录:/Users/Ryan/Library/Application Support/iPhone Simulator/5.1/Applications/A6B99E5A-E2C7-46E9-867A-4E7619F0DA45/Library/Caches

2012-08-03 11:10:24.326 SandBoxTest[12549:f803] Library目录:/Users/Ryan/Library/Application Support/iPhone Simulator/5.1/Applications/A6B99E5A-E2C7-46E9-867A-4E7619F0DA45/Library

2012-08-03 11:10:24.326 SandBoxTest[12549:f803] temp目录:/var/folders/7z/1wj5h8zx7b59c02pxmpynd500000gn/T/

下面开始向目录里面创建文件,然后向文件里面写入内容:

复制代码
 1     NSArray *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);  
 2         NSString *documentsPath = [docPath objectAtIndex:0];  
 3         //写入文件  
 4         if (!documentsPath) {  
 5             NSLog(@"目录未找到");  
 6         }else {  
 7             NSString *filePaht = [documentsPath stringByAppendingPathComponent:@"test.txt"];  
 8             NSArray *array = [NSArray arrayWithObjects:@"Title",@"Contents", nil];  
 9             [array writeToFile:filePaht atomically:YES];  
10         }  
复制代码

创建成功后打开文件夹目录,可以看到test.txt文件:

IOS沙盒(SandBox)第8张

接下来是把该文件中的内容读出来:

复制代码
1     //读取文件  
2     NSArray *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);  
3         NSString *documentsPath = [docPath objectAtIndex:0];  
4         NSString *readPath = [documentsPath stringByAppendingPathComponent:@"test.txt"];  
5         NSArray *fileContent = [[NSArrayalloc] initWithContentsOfFile:readPath];  
6         NSLog(@"文件内容:%@",fileContent);  
复制代码

输出结果如下:

2012-08-03 11:26:53.594 SandBoxTest[12642:f803] 文件内容:(

    Title,

    Contents

)

免责声明:文章转载自《IOS沙盒(SandBox)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇2.4.3 三种基本结构和改进的流程图关于i386和amd64的详细解释下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用unittest的discover方法发现目录中子文件夹中的case

前言:开始用的时候都是把所有的test.py文件放在一个目录下,虽然对运行没什么影响,但是吧,总是不那么好看,且有时候文件名类似,要找好久,就想能不能再创建子文件夹进行分类一下,那又该如何使用discover方法去拿到所有用例呢?下面分享。 可能有人说可以用pytest框架,可以的,我可以用,但是我还想基于Unittest去解决试试。 第一种方法: tes...

linux下的find文件查找命令与grep文件内容查找命令

在使用linux时,经常需要进行文件查找。其中查找的命令主要有find和grep。两个命令是有区的。 区别:(1)find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访问时间,修改时间等。 (2)grep是根据文件的内容进行查找,会对文件的每一行按照给定的模式(patter)进行匹配查找。 一.find命令 基本格式:fi...

iOS 几种加密方法

iOS常见的几种加密方法 普通加密方法是讲密码进行加密后保存到用户偏好设置中 钥匙串是以明文形式保存,但是不知道存放的具体位置 1、base64加密 base64 编码是现代密码学的基础 基本原理: 原本是 8个bit 一组表示数据,改为 6个bit一组表示数据,不足的部分补零,每 两个0 用 一个 = 表示 用base64 编码之后,数据长度会变大,增...

Jboss

是一个基于J2EE的开放源代码的应用服务器。 JBoss代码遵循LGPL许可,可以在任何商业应用中免费使用,而不用支付费用。JBoss是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3的规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。 产品特点 编辑 在J2EE应...

linux svn安装和配置

svn概述 众所周知,svn是一种集中式的版本控制工具,是cvs的改进版,那么svn相比cvs的好处在哪里呢? 基于目录的版本控制系统(传统的CVS都是基于单个文件进行版本控制的,而SVN可以随意去除任何一个文件、目录的任何一个历史版本) 原子提交(提交多个文件时,如果一个文件发生冲突,则其他修改都不会被提交) 高效的分支与标签 多种访问方式(svn提...

乌班图的安装

Ubuntu 系统安装 在VMware中新建虚拟机 指定当前虚拟机使用的系统镜像 设置系统的登录账号密码,设置完成以后一定要记住。 一直等待,系统初始化安装,知道出现下方界面: 输入前面设置的密码,点击Sign In 点击右上角绿色按钮,一路next即可。 点击Install Now,下载最新版本的ubuntu软件...