sandbox沙盒介绍以及如何取得沙盒里面各文件的路径,图片导入方式和图片路径获取

本文详细解析了苹果应用的沙盒结构,并提供了通过代码获取沙盒内部文件路径的方法,包括如何找到应用程序的沙盒源文件、使用代码获得沙盒文件路径以及导入图片的方式和获取路径的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

其实每个APP的程序都是单独的一个文件夹,每个APP之间相互之间独立,所以它们的文件夹也是独立的,这个文件夹就是沙盒。沙盒好处,安全。坏处,程序之间彼此共享数据较为困难。

(1)如何找到应用程序的沙盒源文件?

一般沙盒源文件都存放在~/Library/Application Support/iPhone Simulator/版本号/Applications/的文件夹中,但是这个Library(中文名叫资源库)文件夹是隐藏的。所以需要方法才能点击进去:在Finder中按CMD+SHIFT+G,然后再前往的框中输入~/Library,也就是直接前往,而不是通过点击前往。

当然也是可以用终端一直cd进去,注意有的目录名有两个单词中间空格前面要加 \ 转义,如cd ./Library/Application\ Support/iPhone\ Simulator/

后面选择模拟的版本,然后进入Application,里面都是应用程序,当然是用哈希码命名,里面有4个文件:

Documents、Library、tmp和hello.app,存放永久和临时数据的,这就是每个沙盒里面的主要文件。


(2)如何用代码获得沙盒里面的文件路径?

注明:NSBundle就是获取.app文件里面资源的一种方式。

[objc]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
  2.     //获取整个程序所在目录  
  3.     NSString *homePath=NSHomeDirectory();  
  4.     NSLog(@"%@",homePath);  
  5.     //获取.app文件目录  
  6.     NSString *appPath=[[NSBundle mainBundle]bundlePath];  
  7.     NSLog(@"%@",appPath);  
  8.     //Documents目录  
  9.     NSArray *arr1=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
  10.     NSLog(@"%@",[arr1 objectAtIndex:0]);  
  11.     //Library目录  
  12.     NSArray *arr2=NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);  
  13.     NSLog(@"%@",[arr2 objectAtIndex:0]);  
  14.     //Caches目录,在Library下面  
  15.     NSArray *arr3=NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);  
  16.     NSLog(@"%@",[arr3 objectAtIndex:0]);  
  17.     //tmp目录  
  18.     NSString *tmpPath=NSTemporaryDirectory();  
  19.     NSLog(@"%@",tmpPath);  
  20.     //用整个程序目录加上tmp就拼凑出tmp目录,其他目录都可这样完成  
  21.     NSString *tmpPath_1=[homePath stringByAppendingPathComponent:@"tmp"];  
  22.     NSLog(@"%@",tmpPath_1);  
  23.     // Override point for customization after application launch.  
  24.     return YES;  
  25. }  
结果:

[objc]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. 2014-09-23 21:05:58.966 hello[7763:546804] /Users/Andy/Library/Developer/CoreSimulator/Devices/64EDA842-5B0C-448D-BF2B-B063D09B60CB/data/Containers/Data/Application/08972B0F-5ECF-42B2-934B-892E8E3F7F6D  
  2. 2014-09-23 21:05:58.966 hello[7763:546804] /Users/Andy/Library/Developer/CoreSimulator/Devices/64EDA842-5B0C-448D-BF2B-B063D09B60CB/data/Containers/Bundle/Application/E7D6885C-9CC1-461D-867C-8D0DA5AF183A/hello.app  
  3. 2014-09-23 21:05:58.967 hello[7763:546804] /Users/Andy/Library/Developer/CoreSimulator/Devices/64EDA842-5B0C-448D-BF2B-B063D09B60CB/data/Containers/Data/Application/08972B0F-5ECF-42B2-934B-892E8E3F7F6D/Documents  
  4. 2014-09-23 21:05:58.967 hello[7763:546804] /Users/Andy/Library/Developer/CoreSimulator/Devices/64EDA842-5B0C-448D-BF2B-B063D09B60CB/data/Containers/Data/Application/08972B0F-5ECF-42B2-934B-892E8E3F7F6D/Library  
  5. 2014-09-23 21:05:58.967 hello[7763:546804] /Users/Andy/Library/Developer/CoreSimulator/Devices/64EDA842-5B0C-448D-BF2B-B063D09B60CB/data/Containers/Data/Application/08972B0F-5ECF-42B2-934B-892E8E3F7F6D/Library/Caches  
  6. 2014-09-23 21:05:58.967 hello[7763:546804] /Users/Andy/Library/Developer/CoreSimulator/Devices/64EDA842-5B0C-448D-BF2B-B063D09B60CB/data/Containers/Data/Application/08972B0F-5ECF-42B2-934B-892E8E3F7F6D/tmp/  
  7. 2014-09-23 21:05:58.967 hello[7763:546804] /Users/Andy/Library/Developer/CoreSimulator/Devices/64EDA842-5B0C-448D-BF2B-B063D09B60CB/data/Containers/Data/Application/08972B0F-5ECF-42B2-934B-892E8E3F7F6D/tmp  

(3)导入图片的方式以及如何获取路径

我们往程序中导入一个img文件夹或者一张图片时有两种方式:Creat groups和Creat folder reference,前者表示导入进来的图片都在.app(它其实是哥文件夹)中,列示在左侧的img文件夹只是用来分组而不是真正的目录;而后者表示不仅把图片导入进来,还把img目录导入进来,即.app下有个img文件夹,里面存放的时图片。



我们看到如下获取图片路径都用到NSBundle,其实因为都是在.app文件夹中,而NSBundle就是获取.app里资源的,所以在强化记忆一遍。

[objc]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
  2.     //Create groups方式,图片直接在.app里,以下两种方式相同  
  3.     NSString *path1=[[NSBundle mainBundle]pathForResource:@"1" ofType:@"png"];  
  4.     NSString *path2=[[NSBundle mainBundle]pathForResource:@"1.png" ofType:nil];  
  5.     NSLog(@"%@,%@",path1,path2);  
  6.       
  7.     //Create folder reference方式,图片在img里,以下三种方式相同  
  8.     NSString *path3=[[NSBundle mainBundle]pathForResource:@"1" ofType:@"png" inDirectory:@"img"];  
  9.     NSString *path4=[[NSBundle mainBundle]pathForResource:@"1.png" ofType:nil inDirectory:@"img"];  
  10.     NSString *path5=[[NSBundle mainBundle]pathForResource:@"img/1.png" ofType:nil inDirectory:nil];  
  11.     NSLog(@"%@,%@,%@",path3,path4,path5);  
  12.     // Override point for customization after application launch.  
  13.     return YES;  
  14. }  
盘英文名sandbox(sandboxie),也叫箱,顾名思义可以看做是一种容器,里面所做的一切都可以推倒重来。盘也为HIPS的一种,称为盘HIPS。 Sandboxie 原理引用官方网站的一段话:电脑就像一张纸,程序的运行与改动,就像将字写在纸上。而 Sandboxie 就相当于在纸上放了块玻璃,程序的运行与改动就像写在了那块玻璃上,除去玻璃,纸上还是一点改变都没有的。 Sandboxie(英译“盘”)允许你在“盘环境”中运行浏览器或其他程序,这个“盘”个人感觉就是跟“影子”一样的概念罢了。因此,在盘中运行的程序所产生的变化可以随时删除。可用来保护浏览网页时真实系统的安全,也可以用来清除上网、运行程序的痕迹,还可以用来测试软件,测试病毒等用途。即使在盘进程中下载的文件,也可以随着盘的清空而删除。 如果大家对“影子”/“盘”这2个概念还不清楚的话,这里引用官方的一段话:电脑就像一张纸,程序的运行与改动,就像将字写在纸上。而Sandboxie就相当于在纸上放了块玻璃,程序的运行与改动就像写在了那块玻璃上,除去玻璃,纸上还是一点改变都没有的。 如果还需要再解释一下的话,Sandboxie就是相当于在你要运行的程序与系统之间建立一个隔离层,当我们运行程序的时候,就会将程序直接调入该隔层中,此后,程序对系统所做的修改,都会被限制在这个隔离层中,而不会真正地去触及系统。这样的话,就算电脑感染了病毒木马,也不会对系统造成真正的伤害。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值