ios文件管理,沙盒机制以及如何操作“文件”APP,把文件共享到文件app

embedded/2025/1/23 8:42:27/

首先,系统是一个整体,那每个app是相互独立的,系统为每个app分配了一定的存储空间,也就是我们说的沙盒,每个app有自己独立的沙盒,文件存储在沙盒中,正常情况下app相互之间数据是不可以共享以及访问的,我们在手机上也是看不到每个应用的沙盒的。相互共享访问需要做相关的一些处理才可以,这个后面讲。

1、沙盒

每个iOS程序都有一个独立的文件系统(存储空间),而且只能在对应的文件系统中进行操作,此区域被称为沙盒

下面这个就是一个完整的沙盒目录

Documents: 该目录用于存放用户生成的文件,用户可以直接访问(itunes备份时会备份)。
Library: 该目录用于存放应用的支持文件和数据,通常不需要用户的直接访问。
Caches: Library下的Caches目录用于存放缓存数据,可以被系统清理。
tmp: 临时目录,用于存放临时文件,系统可能会在应用不运行时清除这些文件。

2、把沙盒中的文件共享到“文件”app中

我们说每个app有自己的沙盒,并且沙盒中的文件不能被其他app访问,但是我们有时候需要把app内部的文件暴露出来怎么办呢,比如我在app中下载文件,下载完后希望大家手机可以找到这个文件并常看。这个需求其实是可以实现的,ios系统自带一个叫做文件的app,假如我们能把沙盒的文件弄到这个文件app中来不就解决问题了吗?

首先系统的“文件”这个app不是可以管理全部的app下的文件,他只能管理对“文件”这个app开放权限的APP,所以想要把文件弄到这个文件app中,就需要给app开放被文件来管理的权限。

操作如下:

(1)首先打开开发者账号,选择你要添加icloud的boundid把icloud配置勾选上

(2)项目工程配置

点击Caoablity左侧的加号,搜索iCloud,然后添加即可

(3)设置info.plist

第一个是在info.plist中添加Application supports iTunes file sharing,并设置成YES,这个有权限使 iTunes 分享你文件夹内的内容

第二个是在info.plist中添加Supports opening documents in place,并设置成YES,它保证了你文件夹内本地文件的获取权限

(4)控制哪些文件显示在文件app,哪些不显示

首先只有可以被itunes备份的文件才会分享到文件app中,上面我们说沙盒的几个目录也提到,Documents文件夹下的文件会被分享,所以想要文件在文件app中显示,只需要把文件移动到Documents目录下就可以

3、如何实现两个app共享一份数据

首先这里涉及两个app,这两个app必须在一个开发者账号下,通过创建一个App Groups来实现这个功能,也就是两个app对应一个App Groups

(1)创建App Groups

打开开发者账号,选择Identifiers下面的App Groups,选择之后点continue

然后确认就行了,到这里两个app共同需要的App Groups就创建好了

(2)开发者账号中分别找到两个app项目对应的bundleID,选择之后编辑,在bundleID里添加刚才创建好的App Groups

(3)配置工程

分别打开两个程序,切换到Capabilities选项卡,找到App Groups选项,刷新一下,将App developer中的App Groups同步下来,然后勾选上咱们刚才创建的开发组。

Xcode中配置App Groups

当我们配置完以后,会在文件目录下多出来一个.entitlements的文件。


(4)用代码创建实现共享文件

        通过NSFileManager的方式主 App写入数据

//Main App 通过TextField来向共享文件appGroup.txt中写入数据
- (void)textFieldDidEndEditing:(UITextField *)textField {//获取App Group的共享目录NSURL *groupURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"GroupID"];NSURL *fileURL = [groupURL URLByAppendingPathComponent:@"appGroup.txt"];//写入文件[textField.text writeToURL:fileURL atomically:YES encoding:NSUTF8StringEncoding error:nil];
}

        通过NSUserDefaults的方式主 App写入数据

NSUserDefaults *sharedDefaults = [[NSUserDefaults alloc] initWithSuiteName:"GroupID"];
[sharedDefaults setObject:fileName forKey:FileKey];
[sharedDefaults synchronize];

       接下来通过NSFileManager的方式子app读取数据

//Sub App 通过获取appGroup.txt中的数据,展现在label上//获取App Group的共享目录NSURL *groupURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"GroupID"];NSURL *fileURL = [groupURL URLByAppendingPathComponent:@"appGroup.txt"];//读取文件NSString *str = [NSString stringWithContentsOfURL:fileURL encoding:NSUTF8StringEncoding error:nil];self.shareLabel.text = str;

    通过NSUserDefaults的方式子app读取数据

NSUserDefaults *sharedDefaults = [[NSUserDefaults alloc] initWithSuiteName:"GroupID"];
NSString *fileName = [sharedDefaults objectForKey:FileKey];


http://www.ppmy.cn/embedded/156265.html

相关文章

leetcode169.多数元素

给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入:nums [3,2,3] 输出:3 示例 2…

PHP CRM售后系统小程序

💼 CRM售后系统 📺这是一款基于PHP和uniapp深度定制的CRM售后管理系统,它犹如企业的智慧核心,精准赋能销售与售后管理的每一个环节,引领企业步入精细化、数字化的全新管理时代。系统集成了客户管理、合同管理、工单调…

llama 3 笔记

0.简介 llama 3 是在 15 万亿个 Token 上预训练的语言模型,具有 8B 和 70B 两种参数规模,可以支持广泛的用户场景,在各种行业基准上取得了最先进的性能,并提供了一些新功能,包括改进的推理能力。 1.改进亮点 参数规模与模型架构:Llama 3提供了8B和70B两种参数规模的模…

基于Python django的音乐用户偏好分析及可视化系统设计与实现

1.1 论文背景 随着信息技术的快速发展,在线音乐服务已成为日常生活的重要组成部分。QQ音乐,凭借其创新的音乐推荐算法和独特的社交特性,成功在竞争激烈的市场中获得一席之地。该平台的歌单文化和评论文化不仅满足了用户自尊和自我实现的需求…

利用现有模型处理面部视频获取特征向量(1)

第一步:挑选合适的模型 目前有两个比较符合心意的模型,一个是video-features另外一个是STPN 让我来检验一下,哪一个比较好 STPN 在按照readme安装环境和配置的时候,发现mmpycocotools死活报错,重装Cython至0.29.33…

【深度解析Java 20天速成】04_IDEA的安装与使用

【Why IDEA ?】 【注】JetBrains官方说明: 尽管我们采取了多种措施确保受访者的代表性,但结果可能会略微偏向 JetBrains 产品的用户,因为这些用户更有可能参加调查。 此外,2022年,某美国软件开发商在对近千名专业的Ja…

JAVA-Exploit编写(6)--http-request库文件上传使用

目录 1.http-request简介 2. 依赖导入 3.文件上传页面代码 4. http-request文件上传简单使用 5.请求https的网站解决SSL证书的问题 5. 1 直接请求带https域名的网站 5.2 信任所有证书 1.http-request简介 http-request 是一个库 里面提供很多方法,使得很容易就…

期货行业专题|基于超融合实现 IT 基础设施现代化与国产化转型实践合集

SmartX 期货行业重要进展 帮助近 60 家期货用户部署 730 超融合节点,含 230 信创节点。 深入 5 大应用场景: 核心生产资源池 主席灾备资源池 信创云资源池 云原生存储与容器资源池 分布式存储资源池 更多超融合金融核心生产业务场景实践&#xf…