“沙盒机制”对iOS开发的软硬件影响


说明:本文为博主全是自己对“沙盒”的个人理解,中间必定存在各种纰漏,希望各位高手评论指出。

本文图片较多,且为高清原图较大,浏览本文中,若图片无法完全显示,请ctrl+“-”(减号--------在键盘最右上角),缩小页面。

mac缩小页面是commend+“-”。


硬件部分


iOS的ipa可以随便乱装而不用担心会像windows一样产生很多垃圾文件,因为几乎一个程序所有的东西都放在/User/Application中,少部分放在/Application中

下面进去看看有什么东西:

/User/application :

进入iFile,按照路径分别进入:

(1)磁盘(侧边栏上的)-Application

(2)    应用程序(侧边栏上的

         或主页(侧边栏上的)-Application

         或磁盘(侧边栏上的)-/User/application

      (三者效果一样)














































进入一个.app:


点击侧边栏的应用程序,可以看到:

(2)   应用程序

         或主页-Application

          或磁盘-/User/application



进入其中一个文件夹:



软件部分


下面我们将尝试通过编程对沙盒进行操作:


对沙盒进行操作实例(1):

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    NSString *homePath = [[NSString alloc] initWithFormat:@"%@",NSHomeDirectory()];
    NSLog(@"%@",homePath);
    NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDirectory, YES) objectAtIndex:0];
    NSLog(@"%@",docPath);
    NSString *tmpPath = NSTemporaryDirectory();
    NSLog(@"%@",tmpPath);
    [[NSUserDefaults standardUserDefaults] setFloat:23.4 forKey:@"float"];
    return YES;
}




输出结果:

/Users/rjxyrjxy/Library/Application Support/iPhone Simulator/5.1/Applications/66504B82-7E7F-4FE4-8871-81348A4D0DD4
/Users/rjxyrjxy/Library/Application Support/iPhone Simulator/5.1/Applications/66504B82-7E7F-4FE4-8871-81348A4D0DD4/Documents
/var/folders/fd/61_st6k93vbcnn7z7kkmcdh40000gn/T/


下面是调试过程:

本部分图片较多,且为高清原图较大,若图片无法完全显示,请ctrl+“-”(减号--------在键盘最右上角),缩小页面。

mac缩小页面是commend+“-”。












长按commend+

NSDocumentDirectory可进入:

其中将上图标出的两个变量,效果相同。即将

NSUserDirectory

换为

NSUserDomainMask也可。



进入响应文件夹,

如何进入?如图所示:



或者这样


在“前往文件夹”中输入想前往的文件夹

打开后你所见到的就是沙盒文件夹。

也就是说:你通过打开沙盒进入了沙盒文件夹。

新概念:Bundle

Bundle=.app文件,

下面我们来看一下,Bundle中有什么内容:

点击.app文件,右键打开包内容:

Bundle是下面沙盒中的四个文件中的哪个?

Bundle是四个中的.app文件


 



打开前,可将沙盒文件夹下的其他文件夹打开看看:







注意:你在这里看到的这个所谓的沙盒文件夹,并不是正真意义上的沙盒。因为他是模拟器模拟的。


所以你可以这样

打开包内容可见:其中我们把Bundle中的这些文件的各自的路径统称为mainBundle;

和沙盒之于应用程序自己数据文件和偏好设置文件,犹mainBundle之于Bundle;

不同的是沙盒和mainBundle区别在于:

mainBundle只关注应用程序,而沙盒也关注应用程序的数据和偏好设置;

//在博主看来mianBundle也是沙盒,不过是沙盒中的沙盒;




这些东西是不是很熟悉?这些文件你在哪里见过?没错,是xcode工程文件见过。一模一样,博主在没有了解到沙盒概念时,经常把[NSBundle mainBundle]这样的消息,理解我调用xCode工程文件夹下的文件呢。

也可以这样理解,因为他们还是会原封不动地被移植进iPad或iPhone中:

进入iFile,


点击侧边栏的应用程序,可以看到:

------------不同应用程序的沙盒文件夹



进入其中一个文件夹:

bundle中的文件会出现三次:

xCode工程文件夹、 模拟器创建的模拟沙盒的Bundle中、移动终端的沙盒(上图)的Bundle中



对沙盒进行操作实例(2):


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    NSString *homePath = [[NSString alloc] initWithFormat:@"%@",NSHomeDirectory()];
    NSLog(@"%@",homePath);
    NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDirectory, YES) objectAtIndex:0];
    NSLog(@"%@",docPath);
    NSString *tmpPath = NSTemporaryDirectory();
    NSLog(@"%@",tmpPath);
    //偏好设置
    [[NSUserDefaults standardUserDefaults] setFloat:23.4 forKey:@"float"];
    NSString *appPath = [[NSBundle mainBundle] resourcePath];
    NSLog(@"%@",appPath);
    NSString *bundlePath = [[NSBundle mainBundle ] bundlePath];
    NSLog(@"%@",bundlePath);
    NSString *execPath = [[NSBundle mainBundle ] executablePath];
    NSLog(@"%@",execPath);
    NSString *filePath = [[NSBundle mainBundle ] pathForResource:@"Chen_Yilong" ofType:@"rtf"];
    NSLog(@"%@",filePath);
    NSString *file = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
    NSLog(@"%@",file);
    return YES;
}


运行结果:

/Users/rjxyrjxy/Library/Application Support/iPhone Simulator/5.1/Applications/66504B82-7E7F-4FE4-8871-81348A4D0DD4
/Users/rjxyrjxy/Library/Application Support/iPhone Simulator/5.1/Applications/66504B82-7E7F-4FE4-8871-81348A4D0DD4/Documents
/var/folders/fd/61_st6k93vbcnn7z7kkmcdh40000gn/T/
/Users/rjxyrjxy/Library/Application Support/iPhone Simulator/5.1/Applications/66504B82-7E7F-4FE4-8871-81348A4D0DD4/HomeDictionaryTest.app
/Users/rjxyrjxy/Library/Application Support/iPhone Simulator/5.1/Applications/66504B82-7E7F-4FE4-8871-81348A4D0DD4/HomeDictionaryTest.app
/Users/rjxyrjxy/Library/Application Support/iPhone Simulator/5.1/Applications/66504B82-7E7F-4FE4-8871-81348A4D0DD4/HomeDictionaryTest.app/HomeDictionaryTest
Users/rjxyrjxy/Library/Application Support/iPhone Simulator/5.1/Applications/66504B82-7E7F-4FE4-8871-81348A4D0DD4/HomeDictionaryTest.app/Chen_Yilong.rtf
 {\rtf1\ansi\ansicpg936\cocoartf1138\cocoasubrtf470
{\fonttbl}
{\colortbl;\red255\green255\blue255;}
\paperw11900\paperh16840\margl1440\margr1440\vieww10800\viewh8400\viewkind0
}





分边打开沙盒路径:可看到新的沙盒文件夹:




下面是打开第四行的也是第四个NSLog的输出结果的内容:

生成了一个plist



下面是关于沙盒的一些负面报道:iOS对系统安全的要求必然要付出一些代价。同时也可以看出沙盒的主要是限制app的访问权限的。



拓展阅读:

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值