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

news/2025/1/23 9:33:01/

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

相关文章

大华相机DH-IPC-HFW3237M支持的ONVIF协议

使用libONVIF C库。 先发现相机。 配置 lib目录 包含 编译提示缺的文件&#xff0c;到libonvif里面拷贝过来。 改UDP端口 代码 使用msvc 2022的向导生成空项目&#xff0c;从项目的main示例拷贝过来。 CameraOnvif.h #pragma once#include <QObject> #include &l…

Node.js 能做什么

一、服务器端开发 1. 构建 Web 服务器 使用内置的 http 模块或流行的框架&#xff08;如 Express、Koa 等&#xff09;创建 Web 服务器&#xff0c;处理 HTTP 请求和响应。可以处理各种类型的请求&#xff0c;如 GET、POST、PUT、DELETE 等&#xff0c;并返回相应的 HTML、JS…

《2024年度网络安全漏洞威胁态势研究报告》

2024年&#xff0c;全球网络安全领域继续面对日益严峻的挑战。在数字化转型的大背景下&#xff0c;漏洞利用成为网络攻击的重中之重。根据统计&#xff0c;全球新增漏洞数量再创新高&#xff0c;漏洞的复杂性加剧&#xff0c;修复周期也在不断缩短。然而&#xff0c;攻击者的手…

C++17 新特性解析:Lambda 捕获 this

C17 引入了许多改进和新特性&#xff0c;其中之一是对 lambda 表达式的增强。在这篇文章中&#xff0c;我们将深入探讨 lambda 表达式中的一个特别有用的新特性&#xff1a;通过 *this 捕获当前对象的副本。这个特性不仅提高了代码的安全性&#xff0c;还极大地简化了某些场景下…

R6学习打卡

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 LSTM-糖尿病预测 数据导入初始化模型定义损失训练模型模型评估个人总结 import torch.nn as nn import torch.nn.functional as F import torchvision,torchim…

OpenEuler学习笔记(九):安装 OpenEuler后配置和优化

安装OpenEuler后&#xff0c;可以从系统基础设置、网络配置、性能优化等方面进行配置和优化&#xff0c;以下是具体内容&#xff1a; 系统基础设置 更新系统&#xff1a;以root用户登录系统后&#xff0c;在终端中执行sudo yum update命令&#xff0c;对系统进行更新&#xf…

【面试】Java 记录一次面试过程 三年工作经验

2025 个人工作经验与基础概念 工作挑战及解决方式&#xff1a;这需要根据个人实际工作经历来回答&#xff0c;例如在项目中遇到性能瓶颈&#xff0c;通过代码优化、数据库索引调整或引入缓存机制等方式解决。单例模式&#xff1a; 常见的实现方式有饿汉式、懒汉式&#xff08;…

如何实现亿级用户在线状态统计?

亿级用户在线场景分析与解决方案 目录 亿级用户在线场景分析解决方案 2.1 基于总数的统计方案2.2 基于具体用户详情的统计方案 具体实现 3.1 基于总数的统计方案3.2 基于用户标识的统计实现3.3 Spring Boot 中的实现 总结 1. 亿级用户在线场景分析 以 QQ 在线状态统计为例&am…