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

来源:互联网 发布:龙的传人李青淘宝价格 编辑:程序博客网 时间:2024/05/20 18:20


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

本文图片较多,且为高清原图较大,浏览本文中,若图片无法完全显示,请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/HomeDictionaryTestUsers/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的访问权限的。



拓展阅读:
 

iOS学习之iOS沙盒(sandbox)机制和文件操作


------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
您还可以通过新浪微博@南阳理工微博校园 联系到我:点击上图即可 
 (每日登陆更新,留言必回)   
我的博客:CSDN:关于iOS与嵌入式的专栏


原创粉丝点击