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

server/2025/1/21 9:51:28/

首先,系统是一个整体,那每个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/server/160146.html

相关文章

2024:成长、创作与平衡的年度全景回顾

文章目录 1.前言2.突破自我:2024年个人成长与关键突破3.创作历程:从构想到落笔,2024年的文字旅程4.生活与学业的双重奏:如何平衡博客事业与个人生活5.每一步都是前行:2024年度的挑战与收获6.总结 1.前言 回首2024年&a…

华为云Ubuntu中安装配置PostgreSQL与PostGIS

在安装前,确保云服务器安全组放开5432端口。我的云服务器系统为Ubuntu server 64bit,参考如下网址分享的教程进行PostgreSQL与PostGIS的安装。 https://www.cnblogs.com/echohye/p/18005445 https://zhuanlan.zhihu.com/p/467644334 https://cn.linux-c…

PHP异步非阻塞MySQL客户端连接池

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons:JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram,自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 ? 5 IDEA必装的插件&…

【PCIe 总线及设备入门学习专栏 6.1 -- PCIe MCTP】

文章目录 1 什么是 MCTP?2 MCTP 消息在 PCIe 中的传输特点3 PCIe MCTP 的局限性(1) 出站(Outbound)MCTP 消息分解的限制(2) 入站(Inbound)MCTP 消息组装的限制4 MCTP 消息的实际使用流程发送端处理流程接收端处理流程5 实际使用场景例 1:管理命令传输例 2:监控数据报告例…

C#如何获取电脑中的端口号和硬件信息

我们经常在使用一个串口软件的时候,发现软件中的端口号并不是普通的COM1,而是带有硬件信息的。 那么如果我们使用C#编写软件时候,如何获取到串口的硬件信息呢? 思路就是通过读取设备管理器里的条目来实现,我这里给大家…

frameworks 之 AMS与ActivityThread交互

frameworks 之 AMS与ActivityThread交互 1. 类关系2. 流程2.1 AMS流程2.1 ActivityThread流程 3. 堆栈 讲解AMS 如何和 ActivityThread 生命周期调用流程 涉及到的类如下 frameworks/base/core/java/android/app/servertransaction/ResumeActivityItem.javaframeworks/base/cor…

线下陪玩系统架构与功能分析

2015工作至今,10年资深全栈工程师,CTO,擅长带团队、攻克各种技术难题、研发各类软件产品,我的代码态度:代码虐我千百遍,我待代码如初恋,我的工作态度:极致,责任&#xff…

你了解什么是股指期货贴水套利吗?

首先,咱们来聊聊什么是股指期货。股指期货,简单来说,就是一种以股价指数为“标的物”的期货合约。就像咱们平时买卖的商品期货,比如大豆、原油那些,只不过这里交易的“商品”是股价指数,是一种标准化的金融…