IOS应用沙盒文件操作

简介:

iOS沙盒机制

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

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


复制代码
 1 //获得document文件路径,名字方便记忆  2 +(NSString *)documentsPath {
 3 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
 4 return [paths objectAtIndex:0];
 5 }
 6  7 //获取Cache目录  8 +(NSString *)cachePath {
 9 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
 10 return [paths objectAtIndex:0];
 11 }
 12 //获取Library目录  13 +(NSString *)libraryPath{
 14 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
 15 return [paths objectAtIndex:0];
 16 }
 17 //获取tmp目录  18 +(NSString *)tmpPath{
 19 NSString *tmpDir = NSTemporaryDirectory();
 20 return tmpDir;
 21 }
 22 +(NSString *)homePath{
 23 NSString *paths = NSHomeDirectory();
 24 return paths;
 25 }
 26 //获得document文件路径,名字方便记忆  27 +(NSString *) DocumentPath:(NSString *)filename {
 28 NSString *documentsPath = [self documentsPath];
 29 //NSLog(@"documentsPath=%@",documentsPath);  30 return [documentsPath stringByAppendingPathComponent:filename];
 31 }
 32  33 //====================================================================================//  34 //获得document文件路径  35 +(NSString *)fullpathOfFilename:(NSString *)filename {
 36 NSString *documentsPath = [self documentsPath];
 37 // NSLog(@"documentsPath=%@",documentsPath);  38 return [documentsPath stringByAppendingPathComponent:filename];//这里就是 documentsPath + filePath   39 }
 40  41 //写入文件沙盒位置NSDictionary  42 +(void)saveNSDictionaryForDocument:(NSDictionary *)list FileUrl:(NSString*) FileUrl {
 43 NSString *f = [self fullpathOfFilename:FileUrl];//调用了前面一个方法  44  [list writeToFile:f atomically:YES];
 45 }
 46 /*  47  * resourcePath: /Users/HeYang/Library/Developer/CoreSimulator/Devices/-
 48  * -A089E19C-0F9D-4D69-AA33-D253157E4B94/data/Containers/Bundle/Application/088B4C6E-A765-4CFE-AD9B-2F12E9E0AB28/OCUITest.app
 49 */  50 //====================================================================================//  51  52 //NSDictionary对象写入文件存放到工程位置  53 +(void)saveNSDictionaryForProduct:(NSDictionary *)list FileUrl:(NSString*) FileUrl{
 54 NSString *ProductPath =[[NSBundle mainBundle] resourcePath];
 55 NSString *f=[ProductPath stringByAppendingPathComponent:FileUrl];//这里就是 resourcePath + filePath   56  [list writeToFile:f atomically:YES];
 57 }
 58  59 //Array写入文件 -> 工程  60 +(void)saveOrderArrayListProduct:(NSMutableArray *)list FileUrl:(NSString*)FileUrl {
 61 NSString *ProductPath =[[NSBundle mainBundle] resourcePath];
 62 NSString *f=[ProductPath stringByAppendingPathComponent:FileUrl];
 63  [list writeToFile:f atomically:YES];
 64 }
 65 //Array对象 写入文件 -> 沙盒  66 +(void)saveOrderArrayList:(NSMutableArray *)list FileUrl:(NSString*) FileUrl{
 67 NSString *f = [self fullpathOfFilename:FileUrl];
 68  [list writeToFile:f atomically:YES];
 69 }
 70 //加载文件沙盒的文件 ->NSDictionary  71 +(NSDictionary *)loadNSDictionaryForDocument:(NSString*)FileUrl {
 72 NSString *f = [self fullpathOfFilename:FileUrl];
 73 NSDictionary *list = [[NSDictionary alloc] initWithContentsOfFile:f];
 74 return [list autorelease];
 75 }
 76 //加载文件工程位置的文件 ->NSDictionary  77 +(NSDictionary *)loadNSDictionaryForProduct:(NSString*)FileUrl {
 78 NSString *f = [self ProductPath:FileUrl];
 79 NSDictionary *list =[NSDictionary dictionaryWithContentsOfFile:f];
 80 return list;
 81 }
 82 //加载文件沙盒的文件 -> NSArray  83 +(NSArray *)loadArrayList:(NSString*) FileUrl {
 84 NSString *f = [self fullpathOfFilename:FileUrl];
 85 NSArray *list = [NSArray arrayWithContentsOfFile:f];
 86 return list;
 87 }
 88 //加载文件工程位置的文件 -> NSArray  89 +(NSArray *)loadArrayListProduct:(NSString*) FileUrl {
 90 NSString *f = [self ProductPath:FileUrl];
 91 NSArray *list = [NSArray arrayWithContentsOfFile:f];
 92 return list;
 93 }
 94  95 //====================================================================================//  96 //获得document文件路径  97 +(NSString *)fullpathOfFilename:(NSString *)filename {
 98 NSString *documentsPath = [self documentsPath];
 99 // NSLog(@"documentsPath=%@",documentsPath); 100 return [documentsPath stringByAppendingPathComponent:filename];//这里就是 documentsPath + filePath  101 }
102 //拷贝文件到沙盒 103 +(int) CopyFileToDocument:(NSString*)FileName{
104 NSString *appFileName =[self fullpathOfFilename:FileName];
105 NSFileManager *fm = [NSFileManagerdefaultManager];
106 //判断沙盒下是否存在  107 BOOL isExist = [fm fileExistsAtPath:appFileName];
108 if (!isExist) //不存在,把工程的文件复制document目录下 109  {
110 //获取工程中文件 111 NSString *backupDbPath = [[NSBundle mainBundle] 
112  pathForResource:FileName 
113 ofType:@""];
114 //这一步实现数据库的添加, 
115 // 通过NSFileManager 对象的复制属性,把工程中数据库的路径复制到应用程序的路径上  116 BOOL cp = [fm copyItemAtPath:backupDbPath toPath:appFileName error:nil];
117 return cp;
118 } else {
119 return -1; //已经存在 120  }
121 }
122 //====================================================================================// 123 124 //判断文件是否存在 125 +(BOOL) FileIsExists:(NSString*)checkFile{
126 if([[NSFileManager defaultManager] fileExistsAtPath:checkFile])
127  {
128 return true;
129  }
130 return false;
131 }
132 133 //读取工程文件 134 +(NSString *) ProductPath:(NSString*)filename{
135 NSString *path = [[NSBundle mainBundle] pathForResource:filename ofType:@""];
136 return path;
137 }
复制代码

打开模拟器沙盒目录

下面看看模拟器的沙盒文件夹在mac电脑上的什么位置。

文件都在个人用户名文件夹下的一个隐藏文件夹里,中文叫资源库,他的目录其实是Library。

方法1、可以设置显示隐藏文件,然后在Finder下直接打开。设置查看隐藏文件的方法如下:打开终端,输入命名

显示Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool true

隐藏Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool false

输完单击Enter键,退出终端,重新启动Finder就可以了
重启Finder:鼠标单击窗口左上角的苹果标志-->强制退出-->Finder-->

现在能看到资源库文件夹了。

打开资源库后找到/Application Support/iPhone Simulator/文件夹。这里面就是模拟器的各个程序的沙盒目录了。

方法2、这种方法更方便,在Finder上点->前往->前往文件夹,输入/Users/username/Library/Application Support/iPhone Simulator/ 前往。

username这里写你的用户名。


相关文章
|
3月前
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
361 4
|
4月前
|
设计模式 安全 Swift
探索iOS开发:打造你的第一个天气应用
【9月更文挑战第36天】在这篇文章中,我们将一起踏上iOS开发的旅程,从零开始构建一个简单的天气应用。文章将通过通俗易懂的语言,引导你理解iOS开发的基本概念,掌握Swift语言的核心语法,并逐步实现一个具有实际功能的天气应用。我们将遵循“学中做,做中学”的原则,让理论知识和实践操作紧密结合,确保学习过程既高效又有趣。无论你是编程新手还是希望拓展技能的开发者,这篇文章都将为你打开一扇通往iOS开发世界的大门。
|
4月前
|
搜索推荐 IDE API
打造个性化天气应用:iOS开发之旅
【9月更文挑战第35天】在这篇文章中,我们将一起踏上iOS开发的旅程,通过创建一个个性化的天气应用来探索Swift编程语言的魅力和iOS平台的强大功能。无论你是编程新手还是希望扩展你的技能集,这个项目都将为你提供实战经验,帮助你理解从构思到实现一个应用的全过程。让我们开始吧,构建你自己的天气应用,探索更多可能!
97 1
|
3月前
|
安全 Swift iOS开发
Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法
本文深入探讨了 Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法。Swift 以其简洁、高效和类型安全的特点,结合 UIKit 丰富的组件和功能,为开发者提供了强大的工具。文章从 Swift 的语法优势、类型安全、编程模型以及与 UIKit 的集成,到 UIKit 的主要组件和功能,再到构建界面的实践技巧和实际案例分析,全面介绍了如何利用这些技术创建高质量的用户界面。
72 2
|
3月前
|
JSON 前端开发 API
探索iOS开发之旅:打造你的第一个天气应用
【10月更文挑战第36天】在这篇文章中,我们将踏上一段激动人心的旅程,一起构建属于我们自己的iOS天气应用。通过这个实战项目,你将学习到如何从零开始搭建一个iOS应用,掌握基本的用户界面设计、网络请求处理以及数据解析等核心技能。无论你是编程新手还是希望扩展你的iOS开发技能,这个项目都将为你提供宝贵的实践经验。准备好了吗?让我们开始吧!
|
3月前
|
Swift iOS开发 UED
如何使用Swift和UIKit在iOS应用中实现自定义按钮动画
本文通过一个具体案例,介绍如何使用Swift和UIKit在iOS应用中实现自定义按钮动画。当用户点击按钮时,按钮将从圆形变为椭圆形,颜色从蓝色渐变到绿色;释放按钮时,动画以相反方式恢复。通过UIView的动画方法和弹簧动画效果,实现平滑自然的过渡。
96 1
|
4月前
|
Swift iOS开发 UED
如何使用Swift和UIKit在iOS应用中实现自定义按钮动画
【10月更文挑战第18天】本文通过一个具体案例,介绍如何使用Swift和UIKit在iOS应用中实现自定义按钮动画。当用户按下按钮时,按钮将从圆形变为椭圆形并从蓝色渐变为绿色;释放按钮时,动画恢复原状。通过UIView的动画方法和弹簧动画效果,实现平滑自然的动画过渡。
82 5
|
5月前
|
存储 IDE 开发工具
移动应用开发之旅:打造你的首个iOS应用
【9月更文挑战第23天】在数字化浪潮中,移动应用已成为连接用户与数字世界的关键桥梁。本文将带领读者踏上开发属于自己的第一个iOS移动应用的旅程,从理解移动操作系统的核心概念出发,逐步深入到实际的应用构建过程中。通过简洁明了的语言和具体的代码示例,我们将一起探索如何在苹果的iOS平台上实现一个简单的“待办事项列表”应用,让读者不仅能够学习到编程知识,还能体会到将想法转化为现实产品的成就感。无论你是编程新手还是希望扩展技能的开发者,这篇文章都将为你提供一个实用的指南,帮助你迈出成为移动应用开发者的第一步。
|
5月前
|
开发框架 Android开发 iOS开发
探索安卓与iOS开发的差异:构建未来应用的指南
在移动应用开发的广阔天地中,安卓与iOS两大平台各占半壁江山。本文将深入浅出地对比这两大操作系统的开发环境、工具和用户体验设计,揭示它们在编程语言、开发工具以及市场定位上的根本差异。我们将从开发者的视角出发,逐步剖析如何根据项目需求和目标受众选择适合的平台,同时探讨跨平台开发框架的利与弊,为那些立志于打造下一个热门应用的开发者提供一份实用的指南。
85 5
|
5月前
|
开发工具 Android开发 iOS开发
探索安卓与iOS开发的差异:构建未来应用的关键考量
在数字时代的浪潮中,安卓和iOS这两大操作系统如同双子星座般耀眼夺目,引领着移动应用的潮流。它们各自拥有独特的魅力和深厚的用户基础,为开发者提供了广阔的舞台。然而,正如每枚硬币都有两面,安卓与iOS在开发过程中也展现出了截然不同的特性。本文将深入剖析这两者在开发环境、编程语言、用户体验设计等方面的显著差异,并探讨如何根据目标受众和项目需求做出明智的选择。无论你是初涉移动应用开发的新手,还是寻求拓展技能边界的资深开发者,这篇文章都将为你提供宝贵的见解和实用的建议,帮助你在安卓与iOS的开发之路上更加从容自信地前行。

热门文章

最新文章

  • 1
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 2
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 3
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
  • 4
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 5
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
  • 6
    iOS8 中无需开源库的内置功能一览
  • 7
    iOS7应用开发7:自定义视图、手势操作
  • 8
    IOS小工具以及精彩的博客
  • 9
    Facebook SDK(iOS)初学讲解
  • 10
    iOS - Swift NSPoint 位置
  • 1
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    24
  • 2
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    29
  • 3
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    38
  • 4
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    32
  • 5
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    26
  • 6
    uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
    143
  • 7
    【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
    245
  • 8
    app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
    90
  • 9
    深入探索iOS开发中的SwiftUI框架
    145
  • 10
    ios样式开关按钮jQuery插件
    61