`
啸笑天
  • 浏览: 3462606 次
  • 性别: Icon_minigender_1
  • 来自: China
社区版块
存档分类
最新评论

iOS的SandBox的结构

 
阅读更多

 

在模拟器中运行iOS程序,都会为该程序创建一个沙盒(SandBox)。首先声明,我用的系统是Max OS X 10.7.3,编译器是Xcode 4.3.2。想要找到沙盒目录,先运行Finder,然后在Finder的菜单栏找到前往—前往文件夹…,在打开的窗口输入

/Users/UserName/Library/Application Support/iPhone Simulator/

其中,UserName是指用户在Mac系统中的用户名。

点击“前往”,就来到了模拟器目录:

上图中的5.0、5.1就是模拟器的版本。这里打开5.1:

上图中的目录结构类似于实际的iOS设备中的目录结构。

Applications目录就是安装程序的地方。打开它:

可以看到有两个文件夹,文件夹的名字很复杂。这两个文件夹就可以看成是现在安装在5.1模拟器中的两个程序。它们的名称是在Xcode中运行是自动创建的,名称是随机产生的全局唯一标识符。这里展开其中第二个文件夹。它就是上篇文章小例子运行时产生的:

如上图所示,程序中包含三个文件夹:Documents、Library和tmp。

1、Documents:

这个目录用于存放程序中的数据,除了那些基于NSUserDefaults的设置数据。

获取程序的Documents目录的代码是:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

则documentsDirectory中存储的就是Documents目录的地址。

Ps:

NSUserDomainMask常量表示我们希望搜索限制于我们应用程序的沙盒。

2、Library:

这个目录包含两个子目录:Caches与Preferences。(可能还有其他很多,Cookies等文件夹)

Preferences这个目录存放的是基于NSUserDefaults的设置数据,例如上图中可以看到一个plist文件,它就是我们上次进行的设置项,是Settings程序读写的。打开它,可以看到我们上次做的设置是保存在这个文件中的:

2.1 获取Library目录地址的代码与Documents类似:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *libraryDirectory = [paths objectAtIndex:0];

2.2 获取Caches目录地址:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString* cachesDirectory = [paths objectAtIndex:0];

3、tmp:

我们可以在这个目录下存放临时文件。我们的程序应当要负责删除tmp目录下的内容。

获取tmp目录:

我看很多资料上写的获取tmp目录的方法是:

NSString *tempPath = NSTemporaryDirectory();

但是我发现获得的却不是程序的tmp目录,而是:

/var/folders/tp/pl9mdxtx199bs8_k29n89ff80000gn/T/

貌似也没有一个像NSLibraryDirectory那样的参数可以直接用来获取这个目录。

不过,如果我们可以获得这个程序的根目录,就可以获取tmp目录了:

//获取程序的根目录
NSString *homeDirectory = NSHomeDirectory();
//获取tmp目录的地址
NSString *tmpDirectory = [homeDirectory stringByAppendingPathComponent:@"tmp"];

tmpDirectory中存储的就是本程序的tmp目录。

 

 

我使用FileManager向其中创建子目录和文件时都可以执行,不过我有个程序试图用FTP向其中下载文件,却出现了文件写入错误。

 

 

获取了上述目录地址后,想要获得其中的文件或者子目录,只要:

NSString *filename = [documentsDirectory stringByAppendingPathComponent:@"filename.txt"];

在真机上,NSTemporaryDirectory对应的就是app目录的tmp目录。感谢@xeonwell大侠的指导。

from:http://my.oschina.net/plumsoft/blog/56655

  • 大小: 14.7 KB
  • 大小: 27.6 KB
  • 大小: 23.9 KB
  • 大小: 44.7 KB
  • 大小: 50.1 KB
分享到:
评论
1 楼 啸笑天 2013-06-01  
- (NSURL *)applicationDocumentsDirectory
{
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}

相关推荐

    iOS_SandBox沙盒路径获取

    在iOS应用开发中,"沙盒"(Sandbox)是一个重要的概念,它是每个应用程序的专属运行环境,确保了不同应用之间的数据隔离和安全性。每个iOS应用都有自己的沙盒目录,包含若干子目录,用于存储应用的数据、缓存、文档...

    简单掌握iOS应用开发中sandbox沙盒的使用

    在iOS应用开发中,了解和熟练使用Sandbox沙盒机制是非常关键的一环。Sandbox是一种安全机制,旨在限制应用程序的权限,确保它们只能访问属于自己的特定区域,而不能侵犯其他应用或系统的隐私。沙盒为每个应用提供了...

    sandBox沙盒机制的学习

    沙盒机制(SandBox)是计算机安全领域中的一个重要概念,主要用于限制程序的权限,防止它们对系统进行未经授权的访问或操作。在IT行业中,尤其是在移动设备应用开发(如iOS和Android)、网络安全和云计算环境中,...

    iOS内核漏洞挖掘_xKungfoo20151

    然而,在iOS设备上,由于Sandbox机制的存在,内核漏洞通常需要在Sandbox内部或外部触发,可能通过Mobile或Root权限才能利用。这增加了漏洞利用的复杂性。 为了防御内核漏洞,iOS引入了多种安全机制,如Code Sign,...

    iOS沙盒写入读取文件

    在iOS应用开发中,沙盒(Sandbox)是一种安全机制,用于限制应用程序的访问权限,以保护用户数据的安全。每个iOS应用都有自己的独立沙盒,其中包含多个特定的文件夹,如Documents、Library、tmp等。这个“iOS沙盒...

    ios沙盒数据存储

    在iOS应用开发中,每个应用程序都有自己的独立空间,被称为“沙盒”(Sandbox)。这个沙盒为每个应用提供了一个安全、隔离的环境,确保应用只能访问其内部的数据,而不能随意访问其他应用或系统资源。沙盒数据存储是...

    针对iOS调用相机的二次封装支持本地保存

    总的来说,这个项目通过二次封装iOS系统的相机功能,实现了更简洁的代码结构、更灵活的配置选项以及强大的本地保存和删除功能,为iOS开发者提供了一个高效、易用的相机解决方案。这有助于开发者快速集成相机功能,...

    ios-沙盒文件管理.zip

    在iOS应用开发中,每个应用程序都有自己的专属空间,被称为“沙盒”(Sandbox)。这个沙盒文件管理系统是iOS安全模型的重要组成部分,旨在保护用户的数据安全,并限制应用程序之间的相互访问。"ios-沙盒文件管理.zip...

    iOS 文件浏览器

    另外,iOS 11后引入了App Sandbox,限制了应用对文件系统的访问,需要在Info.plist中配置相应的权限。 8. **网络请求与数据流**:在线浏览文件涉及到网络请求,需要理解`URLSession`的工作原理,以及如何处理数据流...

    ios-IOS沙盒Files目录说明和常用操作.zip

    4. **sandbox**: 新版本的iOS引入了App Groups,允许不同应用共享特定的存储区域,这就是所谓的共享容器。在这个目录下,开发者可以为App Group创建自定义的子目录。 对于数据持久化操作,常见的方法包括: - **...

    ios总结1

    11. **Sandbox**:iOS应用运行在沙盒环境中,每个应用都有自己的独立空间,不能访问其他应用的数据,保障了系统的安全性和隐私。 12. **观察者模式(Observer Pattern)**:观察者模式是一种行为设计模式,允许一个...

    iOS Hackers Handbook

    沙盒(Sandbox)是一种广泛应用于iOS系统的安全模型,其核心思想是在每个应用程序之间创建一个虚拟隔离环境。这样即使某个应用受到攻击也不会危及其他应用的安全性。 #### 在应用程序中应用沙盒 接下来详细介绍...

    Sandbox 获取沙盒路径

    2. **沙盒路径的结构** 沙盒路径通常包含以下部分: - **Documents**:用于存储应用生成的持久化数据,例如用户文档。 - **Library**:包括三个子目录:Preferences(偏好设置)、Caches(缓存数据)和...

    Thinkphp5实现给IOS推送消息

    总的来说,ThinkPHP5实现给iOS推送消息的过程涉及到了APNs服务、证书管理、消息结构的构建以及网络通信等多方面的知识。在实际开发中,为了简化这一流程和提高可维护性,通常会封装成一个服务类或者使用第三方推送...

    iOS-Code-Analyze:关于iOS的原始码解析

    9. **安全与隐私**:iOS强调用户隐私,如Keychain、App Sandbox等机制。解析这部分源码有助于开发者确保应用的安全性和合规性。 10. **性能优化**:通过源码分析,开发者可以学习到如何利用Instruments工具进行性能...

    ios push java 服务端程序

    - 消息结构包括一个Header和一个Payload。Header包含设备Token(由苹果分配给每个安装了你的应用的设备)、通知类型和消息ID。Payload则包含了显示给用户的信息,如标题、正文、声音等。 - JSON格式常被用来编码...

    JAVA IOS消息推送依赖jar

    9. **测试环境和生产环境**: Apple提供了两个不同的环境,开发(sandbox)和生产,以支持开发阶段和正式上线后的推送。开发者需要分别配置相应的证书以连接到对应的APNS服务器。 综上所述,实现Java iOS消息推送...

    sandbox:供儿童在上面或里面玩耍的结构

    此外,iOS和Android等移动操作系统也使用沙盒机制来隔离应用,确保它们只能访问自己被授权的资源。 总的来说,"sandbox"在IT领域是一个至关重要的概念,它为创新、测试和安全提供了平衡点。无论是HTML的iframe沙盒...

    解析php做推送服务端实现ios消息推送

    总的来说,通过理解deviceToken的获取、SSL证书的创建、消息结构的构建以及与APNs的通信,你可以使用PHP搭建一个基本的iOS消息推送服务端。不过,实际项目中可能还需要考虑更多的细节,比如推送消息的可靠性和性能...

Global site tag (gtag.js) - Google Analytics