• iOS应用软件沙盒sandbox相关知识(整理)


    1、iOS沙盒机制原理

     iOS应用程序只能在该程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等。

     1.1、每个应用程序都有自己的存储空间
     1.2、应用程序不能翻过自己的围墙去访问别的存储空间的内容
     1.3、应用程序请求的数据都要通过权限检测,假如不符合条件的话,不会被放行。
         通过这张图只能从表层上理解sandbox是一种安全体系,应用程序的所有操作都要通过这个体系来执行,其中核心内容是:sandbox对应用程序执行各种操作的权限限制。

    2.获取应用软件沙盒sandbox方法:

    通过在iOS程序viewDidLoad中打印NSString *path = NSHomeDirectory(); 然后在Finder中前往该打印出的路径,即可看到该程序的沙盒sandbox.

    例如:/Users/wujia121/Library/Developer/CoreSimulator/Devices/3FDEE527-D4DB-492F-9490-1D04AF9559A8/data/Containers/Data/Application/82A190D8-C6F2-444F-90A5-17B051CC0021 

    (可见sandbox保存在Mac用户文件夹下,而SDK保存在Xcode包content中)

    3.iphone沙盒模型的有四个文件夹:

    分别是 documents,Library,tmp,app包。 手动保存的文件在documents文件里,NSUserdefaults保存的文件在tmp文件夹里。

    1、Documents 目录:一般需要持久的数据都放在此目录中,可以在当中添加子文件夹,iTunes备份和恢复的时候,会包括此目录。您应该将所有de应用程序数据文件写入到这个目录下。这个目录用于存储用户数据或其它应该定期备份的信息。

    2、Library 目录:这个目录下有两个子目录:Caches 和 Preferences

         Preferences 目录:包含应用程序的偏好设置文件。您不应该直接创建偏好设置文件,而是应该使用NSUserDefaults类来取得和设置应用程序的偏好.

         Caches 目录:用于存放应用程序专用的支持文件,保存应用程序再次启动过程中需要的信息。

    3、tmp 目录:这个目录用于存放临时文件,当iOS设备重启时,文件会被自动清除。

    4、AppName.app 目录:这是应用程序的程序包目录,包含应用程序的本身。由于应用程序必须经过签名,所以您在运行时不能对这个目录中的内容进行修改,否则可能会使应用程序无法启动。(Xcode 6以后似乎.app不保存在沙盒中)

     

    4.获取Sandbox下各文件夹路径的方法:

     //1. 沙盒根目录/

        NSString *homePath = NSHomeDirectory();

        NSLog(@"homePath:%@",homePath);

        

        //2. 沙盒/Documents/

        NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];

        NSLog(@"docPath:%@",docPath);

        

        //3. 沙盒/Library/

        NSString *libPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) firstObject];

        NSLog(@"libPath:%@",libPath);

        //3.1 沙盒/Library/Preferences

        //NSString *preferPath = [NSSearchPathForDirectoriesInDomains(NSPreferencePanesDirectory, NSUserDomainMask, YES) firstObject];

        //此方法获取路径是沙盒/Library/PreferencePanes并不存在这样的路径,想要访问Preferences文件夹,需要拼接路径。或者直接使用NSUserDefaults便可以在Preferences文件夹下创建plist文件。

        NSString *preferPath = [libPath stringByAppendingPathComponent:@"Preferences"];

        NSLog(@"preferPath:%@",preferPath);

        //3.2 沙盒/Library/Cache

        NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];

        NSLog(@"cachePath:%@",cachePath);

        

        //4. 沙盒/tmp

        NSString *tmpPath = NSTemporaryDirectory();

        NSLog(@"tmpPath:%@",tmpPath);

     

        //5. 打印xx.app位置

        NSLog(@".appPath:%@",[[NSBundle mainBundle] bundlePath]);//打印app安装包的在模拟器/手机上的位置(~users/Application文件夹下)

     

    真机打印结果:

    homePath:         /var/mobile/Containers/Data/Application/849F64A3-BE4A-44FE-A789-6790A77E567A
    docPath:          /var/mobile/Containers/Data/Application/849F64A3-BE4A-44FE-A789-6790A77E567A/Documents
    libPath:          /var/mobile/Containers/Data/Application/849F64A3-BE4A-44FE-A789-6790A77E567A/Library
    preferPath:       /var/mobile/Containers/Data/Application/849F64A3-BE4A-44FE-A789-6790A77E567A/Library/Preferences
    cachePath:        /var/mobile/Containers/Data/Application/849F64A3-BE4A-44FE-A789-6790A77E567A/Library/Caches
    tmpPath:  /private/var/mobile/Containers/Data/Application/849F64A3-BE4A-44FE-A789-6790A77E567A/tmp/
    .appPath: /private/var/mobile/Containers/Bundle/Application/429B6769-6D90-4782-844C-CA95E8B28166/打印程序的沙盒地址2015.10.app

    5.沙盒路径截图:

     
    iOS开发者交流群:180080550
  • 相关阅读:
    MFC和Qt优缺点 (MFC几乎没有优点、全面下风)
    获得WIN7管理员权限(可通过修改注册表,或者组策略改变)
    tolua#是Unity静态绑定lua的一个解决方案
    C#实现拼图游戏
    FastDFS分布式文件系统
    生成动态Lambda表达式1
    Azure IoT
    SignalR
    延迟队列功能
    监控知识体系
  • 原文地址:https://www.cnblogs.com/stevenwuzheng/p/5189114.html
Copyright © 2020-2023  润新知