“沙盒机制”对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)机制和文件操作
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- “沙盒机制”对iOS开发的软硬件影响
- 分布式计算对计算机软硬件的影响
- Android6.0之后的权限机制对App开发的影响
- jsessionid传送对session实现机制的影响 jsessionid传送对session实现机制的影响
- iOS取消导航对视图的影响
- 漫谈软硬件的开发(转载)
- 输入法对pb开发工具的影响
- html5移动开发对SEO的影响
- listView的可重用机制对性能的影响
- listView的可重用机制对性能的影响
- 看一个前辈对软硬件的认识
- 对底层软硬件的一些胡思乱想
- 游戏机制对IT员工激励的影响
- 恢复和复制对 innodb 锁机制的影响
- 探寻不同版本的SDK对iOS程序的影响
- 软硬件开发方面要做的事情
- iOS 开启热点后对状态栏的影响
- iOS9 对ShareSDK的影响(适配iOS 9必读)
- 双语不用教 下载地址!!!
- 从N[百万]个随机整数中查找出现频率最高的所有整数
- 中断触发流程三(中断控制器)
- iOS系统的沙盒机制
- oracle %TYPE 和 %ROWTYPE
- “沙盒机制”对iOS开发的软硬件影响
- 替换jar的同名不同版本时出现奇怪的NoClassDefFoundError
- 浅谈代理服务器的作用
- 基于rtsp的手机视频点播
- 回顾HTML5这一年:在痛并快乐中前进(2012)
- Linux常用命令查询
- 新兴Web技术杂谈 之 WebSocket
- ECSHOP订单信息页或ECSHOP打印页显示商品缩略图
- Tautology