iOS,在应用之间共享文档

iOS学习笔记-APP之间数据共享空间AppGroups appgroup用于两个app之间共享文件,开扩了一块共同的存储区域!此外扩展( Extension )也需要使用appgroup的相关知识此方法只能使用于同一个开发者账号,如果不同开发者账号请考虑剪切板 UIPasteboard1.创建APPGroup1.登录开发者账号https://developer.apple.com/account/ios/certificate/development点 阅读详情
在iOS开发中,在很多情况下我们需要完成应用之间的文档共享。然而,iOS为应用提供的是一个运行沙箱,一个应用程序无法直接和另一个应用程序通讯,所以应用之间如果要共享文档的话需要通过一些系统提供的应用交互手段。

iOS应用程序之间交互的一个简单手段是“URL Scheme”,就是通过UIApplication的openURL方法,使用“<应用名>://”这样的URL形式指定应用,同时可以在URL中加入一些类似于http的get请求的参数,用于传递简单数据,代码样例如下:

 [[ UIApplication   sharedApplication ]  openURL :[ NSURL   URLWithString : @"myapp://test_page/one?token=12345&user=ABC"  ]];

以上代码会启动应用“myapp”,然后传递参数token和user给应用myapp。
不过这种应用调用无法完成应用间文档共享,这能完成一些简单的数据传递。有关“URL Scheme”的具体使用可以参考iOS官方样例中的LaunchMe。

为了给其它应用程序共享文档,发起共享的应用一般使用的是UIDocumentInteractionController类,通过调用该类实例的presentOpenInMenuFromRect方法显示一个“OpenIn”菜单,该菜单中会显示系统中声明可以支持你所共享的文档的应用图标,由用户选择使用那个应用打开你共享的应用。

下面是一段代码样例,该样例通过UIDocumentInteractionController的interactionControllerWithURL方法创建了一个UIDocumentInteractionController实例,然后调用该实例的 presentOpenInMenuFromRect方法显示“OpenIn”菜单。

NSString *filePath =

    [[NSBundlemainBundle]

     pathForResource:@"PDF Document"ofType:@"pdf"];

    

    NSLog(@"file path is: %@", filePath);

    

    

    self.documentController =

    [UIDocumentInteractionController

     interactionControllerWithURL:[NSURLfileURLWithPath:filePath]];

    self.documentController.delegate =self;

   

    self.documentController.UTI =@"com.adobe.pdf";

    [self.documentControllerpresentOpenInMenuFromRect:CGRectZero

                                          inView:self.view

                                        animated:YES];

将以上代码放置到一个控件对应的action方法中,触发该控件就会让系统弹出“OpenIn”菜单,有用户选者使用什么程序打开你所共享的应用。
注意,在“OpenIn”菜单中会出现所有声称支持对应文档类型的应用,比如上例中的“OpenIn”菜单中会出现所有“声称”支持pdf格式的应用图标,至于用户选择哪个应用,所选择的应用是否真的可以正常处理pdf文档是我们无法控制的。


为了使用其它应用程序共享的文档,接受文档的应用需要完成两个工作。
第一个工作是在应用的Info.plist中加入声明,声明该程序支持什么文档格式。比如你需要支持pdf文档,就可以在你的应用项目配置界面选择“Info”页面的“Document types”区段,在里面加入pdf文档类型的配置,如下图:



第二个工作是接受其它程序共享的数据,正常做法是在应用的openURL方法中加入响应代码,在该代码中去访问参数URL中纪录的文档,该URL指向本应用Documents目录中的inbox目录中的一个文件,该文件就是其它程序共享的文档的一个拷贝。具体代码如下:


- (BOOL) application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation


{

    NSLog(@"openURLmethod was called");

    

    NSLog(@"the source application is: %@", sourceApplication);

    

    

    NSLog(@"url is: %@", url);

    

    NSLog(@"handle the file in above file path for the shared doc");

    

    

    return YES;

}


以上openURL方法通过控制台打印了打印了共享文档的应用名称和所共享的文档在本应用中的访问路径,通过这个访问路径开发人员可以在本应用中访问到其它应用所共享的文档。


实现itunes可以上传文件到应用
用程序可以使用文件共享让用户访问程序的用户数据文件。文件共享允许应用程序通过iTunes向用户显露应用程序 /Documents目录的内容。这样,用户就可以在iPad和桌面计算机来回移动文件。但是,该功能不允许应用程序和同一设备上的其他应用程序共享文件。如果希望在程序间共享文件,请使用剪贴板或者文档交互控制器对象。

您可以通过如下步骤来让应用程序支持文件共享:

  1. 在应用程序的Info.plist文件中添加UIFileSharingEnabled键,并将键值设置为YES。

  2. 将您希望共享的文件放在应用程序的Documents目录。

  3. 一旦设备插入到用户计算机,iTunes 9.1就会在选中设备的Apps标签中显示一个File Sharing区域。

  4. 此后,用户就可以向该目录添加文件或者将文件移动到桌面计算机中。

如果应用程序支持文件共享,当文件添加到Documents目录后,应用程序应该能够识别并做出适当响应。例如说,应用程序可以将新文件的内容显示界面上。请不要向用户展现目录的文件列表并询问他们希望对文件执行什么操作。

补充

IOS的文件系统面向的是设备上的每个运行的应用程序。为了保证IOS系统的可用性和简单性,IOS设备的终端用户是无法直接访问文件系统的,同时设备上的app与用户一样也是不能随便直接访问文件系统的。IOS的app与文件系统之间的交互被限定在了一个指定的空间或者说是一个目录里,该目录存在于每个App自身沙箱(sandbox)内部。每当在IOS设备上安装一个新的app,IOS的设备上的程序安装器会自动为这个新app提供一个主目录(Home Directory),并将app安装在为其创建的主目录下,此外安装器还会创建为app创建其它几个关键性的目录。所有这些创建的目录组合起来就组成了app的文件系统主视图。因此app对文件系统的操作也仅限定在了以上目录的组合,app可以直接读取这些目录及目录下的任何文件,同时app也可以在指定的任何目录创建自己的文件或写入自己的数据。翻过来说,在这个指定范围之外app不能再访问或创建任何目录和文件。比较特殊的情况是,IOS系统会提供系统接口来允许app访问,例如访问用户存储在设备上的联系方式,相册。但访问这些内容背后所对应的文件操作都是由底层的系统框架来完成。这也是app被称为是一个“沙箱”的原因,在自己的沙箱内,app拥有全面的操作控制权;沙箱之外的东西,在有悖访问规则的前提下,app不能做任何事情。

开启iTunes文件共享
       之前对Linux/Unix系统不熟悉(现在其实也不熟悉),对苹果的设备环境,开发体系,硬件特点基本上也处于无知状态,记得起初拿到iPad的时候,一直以为作为移动设备,既然iPad能够与PC端连接,那么就可以把它同时当做是一个移动硬盘来用,可以在PC可iPad之间进行文件的传输,存储,共享。我可以想任意App中放置文件,也可以在PC端像浏览Mac上的文件系统一样,去查看App目录下的内容。后来我发现我错了,根本不是想象中的那样。当iPad连接PC之后,并没有一个设备目录浏览管理界面。其实这也比较苹果系统封闭的风格,苹果希望将用户在苹果设备上的文件都能上传到云端,从而实现可以在多台苹果设备上同步用户数据。

       通过在app工程的Info.plist文件中指定UIFileSharingEnabled关键字,并将其值设置为YES。我们可以很方便的打开app与iTunes之间的文件共享。但这种共享有一个前提:App必须将任何所需要共享给用户的文件,都要存放在<Application_Home>/Documents目录下,<Application_Home>即在app安装时自动创建的app的主目录。下面我们简单说明

在MAC上打开iTunes,在应用程序一栏,默认界面为:


当链接iPad设备后,iTunes界面如下,在面板工具条的右侧会显示iPad当前已连接到Mac上

      点击工具条的"iPad"按钮,显示具体的iPad设备信息,如下:



     被黄色块盖住的是iPad的设备名称,点击“应用程序按钮”,之后在界面上我们可以看到当前iPad设备的一些相关分类信息,包括存储空间大小,iPad上所安装的IOS版本,是否存在可升级的更高版本的IOS;以及一些iPad设备的备份方式。继续下滚屏,如下界面:



      我们看到出现了一个名为“文件共享”的分类。上面很清楚的标明了这个分类的作用是什么,左侧的列表是iPad设备上安装的所有应用程序,右侧列表则是支持iTunes文件共享的App的Documents目录。以苹果的Keynote为例,当我们保存一个文档到iTunes时,Keynotye会讲文件写入到自己的Documents目录下,也就是我们在面板上看到的右侧列表。我们可以直接从MAC上拖文件到该右侧列表,或者从右侧列表选中文件直接拖到MAC上,这样便简单的完成了所谓的iTunes与App的文件共享。可以通过两个按钮完成同样的功能。如图:



      我们新建一个简单的DEMO工程来把整个流程走一遍,工程名为FileShareWithITunesDemo



     在工程的Info.plist文件中添加支持iTunes文件共享的Key,并将值设为YES,



     之后将DEMO工工程发布到iPad设备上,在iTunes的面板上我们可以看到如下图:



       现在左侧列表中有了我们的工程对应的APP,接下来在mainStoryboard中添加简单的描述和两个按钮:



      之后为两个按钮建立action的outline,代码如下

01// 对应第一个按钮
02- (IBAction)logFilePathInDocumentsDir:(id)sender
03{
04    NSString *docsDir = [NSHomeDirectory() stringByAppendingPathComponent:  @"Documents"];
05     
06    NSFileManager *fileManager = [NSFileManager defaultManager];
07     
08    NSDirectoryEnumerator *dirEnum = [fileManager enumeratorAtPath:docsDir];
09     
10    NSString *fileName;
11     
12    while (fileName = [dirEnum nextObject]) {
13        NSLog(@"FielName : %@" , fileName);
14        NSLog(@"FileFullPath : %@" , [docsDir stringByAppendingPathComponent:fileName]) ;
15    }
16 
17}
18// 对应第二个按钮
19- (IBAction)createImageFieldToDocuments:(id)sender
20{
21    NSFileManager *fileManager=[[NSFileManager alloc] init];
22     
23    NSString *docsDir = [NSHomeDirectory() stringByAppendingPathComponent: @"Documents"];
24     
25    NSString *imageFileName = [docsDir stringByAppendingPathComponent:@"myImage.png"] ;
26     
27    UIImage *image = [self generateImage];
28     
29    [fileManager createFileAtPath:imageFileName contents:UIImagePNGRepresentation(image) attributes:nil] ;
30     
31}
32// 创建一个简单的UIImage对象并作为图片文件内容
33- (UIImage*)generateImage
34{
35    UIGraphicsBeginImageContextWithOptions(CGSizeMake(320, 200), NO, 0.0) ;
36     
37    CGContextRef ctx = UIGraphicsGetCurrentContext() ;
38     
39    CGRect imageRect = CGRectMake(0.0, 0.0, 320, 200) ;
40     
41    [[UIColor redColor] setFill] ;
42     
43    CGContextFillRect(ctx, imageRect) ;
44     
45    UIImage *image = UIGraphicsGetImageFromCurrentImageContext() ;
46     
47    UIGraphicsEndImageContext() ;
48     
49    return image ;
50}

       我们先从MAC简单的拖张图片文件到右侧列表,如图示:



     之后点击第一个按钮,输出Documents路径下的所有文件名到控制台



      完成之后,点击第二个按钮完成向Documents目录保存文件的功能(即共享文件到iTunes)



至此,简单的流程完毕。

注:描述于IOS6.1下

ios 选择其他应用打开文件 ios 选择其他应用打开文件 ! 选择本地其他应用打开附件 本地已安装其他应用 如万能阅读器 ...之类 立即下载

相关推荐

软件测试--用例篇(测试用例的好处、测试用例的七种设计方法、测试用例的粒度、测试用例的评价)

作为软件测试工程师,最主要的工作就是:编写测试用例,那么为什么要编写测试用例?它有什么好处?如何编写测试用例?测试用例写简单好还是复杂好?如何评价测试用例的质量? 天呐撸!能说不会吗?! 作为倾向软件测试工程师的老铁们,还是一起来学习吧! 一、编写测试用例的好处 测试用例是测试者的依据 测试用例使得工作可重复,是自动化测试的基础 补充:自动化测试的前提条件是:功能比较稳定,页面...

cherrydreamsover的博客 3734

iOS如何让程序能够支持文件共享

http://blog.youkuaiyun.com/my_programe_life/article/details/49744673 由于iOS的沙盒机制,苹果用户就不能像安卓用户那样能够直接往手机里拷自己喜欢的音视频文件,如果你的程序支持拷贝文件进去,并且能够显示在程序中。 那么就需要以下配置了: 在应用程序的Info.plist文件中添加UIFileSharingEnable

jeffasd的专栏 1万+

【教程4>第1章>第11节】使用MATLAB快速产生批量verilog语句加快FPGA开发

...........如果手动写,那么就非常麻烦,这个时候,我们借助matlab,则可以快速生成上述类型的verilog程序,我们编写如下的MATLAB语句。\n");\n");end。

FPGA/MATLAB学习教程/源码/项目合作开发 1239

iOS 使用UIDocumentInteractionController类打开文件

有时候我们开发的App会从网络上下载下来一些文件,如PDF文件等。 当用户需要查看这些文件的时候,我们就要提供一些方法加载这些文件。 这里举例说明一下怎么使用UIDocumentInteractionController类关联到Adobe Acrobat  pdf阅读器打开pdf文件。 UIDocumentInteractionController的使用非常简单,但是有一点需要注意,代码如

leiyadong800的博客 1564

AI应用工程师面试指南与参考答案

摘要:AnkerAI应用工程师职位面向2024/25届毕业生,要求计算机相关专业背景,强调工程实现与技术探索能力。岗位职责包括全栈开发、AI技术整合(如大模型、图像识别)、团队AI赋能及系统优化。职位更看重编程实践能力(Python/Java等)和学习潜力,而非单纯算法知识。成功候选人将参与智能化产品开发,获得导师指导和技术成长机会。面试准备应聚焦项目经验展示、业务需求理解和技术解决方案能力,通过结构化回答和实操案例体现工程思维与创新潜力。

郑伟强dev的专栏 407

42、多媒体与虚拟现实在艺术和影视领域的创新应用

本文探讨了多媒体与虚拟现实在艺术和影视领域的创新应用,涵盖三个典型案例:影视与人类学融合项目通过协作模式模糊作者与观众界限,推动文化文献的发展;交互式数字短片《分手》利用基于对象的广播技术探索个性化影视体验;威尼斯双年展瑞士馆4D项目则通过虚拟现实技术实现文化遗产的数字化展示。这些案例展示了技术在叙事、用户体验及文化保护中的深度应用,并展望了未来技术融合、个性化深化与文化遗产传承的发展趋势。

kappa的博客 114

iOS SDK:预览和打开文档

翻译自:点击打开链接 iOS中沙盒机制使iOS平台更安全,也使这个平台的使用者受益。然而,由于沙盒的严格限制,在不用应用间共享数据不是微不足道的。一个经常被忽视,被用来帮助共享文档的类是UIDocumentInteractionController类。在这个简易教程中,我将向你展示,如何使用这个类来预览文档和在设备上安装的应用中打开这个文档。 和文件交互 我必须承认,有点吃惊的发现这个自iO

了凡 1493

MCP+A2A:从实验室到生产环境的落地之旅

本文通过实际项目中的落地案例,展示了 MCP+A2A 协议结合使用的强大功能和广泛适用性。同时,我们也探讨了开发者社区的贡献、与其他技术的融合,以及未来技术趋势的展望。希望本文能够帮助读者更好地理解如何将这一架构从实验室推向生产环境,推动 AI 技术的实际应用。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 1492

iOS开发之UIDocumentInteractionController

本文介绍如何利用UIDocumentInteractionController和QuickLook通过第三方的App来快速打开一些文件

shxwork的博客 5216

【华为OD机试真题】6、数组去重和排序 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS)

题目描述 >给定一个乱序的数组,删除所有的重复元素,使得每个元素只出现一次,并且按照出现的次数从高到低进行排序,相同出现次数按照第一次出现顺序进行先后排序

KJ.JK 3887

支持UE4.27、UE5.0、UE5.1、UE5.2、UE5.3、UE5.4、UE5.5的VS2022一键安装方法

本文提供了两种安装VS2022以支持UE5开发的方案。方案一通过百度网盘提供一键安装包,下载解压后以管理员身份运行批处理文件即可完成安装。方案二需从微软官网下载安装程序,通过创建包含特定参数的批处理文件来自定义安装组件。两种方案都需保持联网环境,建议先卸载旧版VS。安装完成后可测试打包UEC++项目Windows包。

2501_93651177的博客 354

iOS开发 ShareExtension文件分享

iOS开发 ShareExtension文件分享,在相册三方APP分享文件打开自己的APP,类似微信分享文件

wuwuFQ的博客 2615

【OpenClaw从入门到精通】第60篇:多智能体协同实战——用“龙虾”搭建你的数字员工团队(2026企业版)

2026年AI Agent企业落地的核心趋势,正从“单Agent单兵作战”转向“多智能体协同组网”。本文以全球开发者先锋大会“百虾大战”真实案例为蓝本,深度拆解OpenClaw多智能体协同的技术内核——三层解耦架构(模型层-技能层-网关层),系统搭建包含项目经理、架构师、执行者、质量把关者的4大核心Agent团队。通过三种主流协作架构对比、全链路配置代码实操、故障自愈实战演练,结合电商新品上架虚拟场景全流程演示,解决企业多Agent部署中的权限隔离、任务协同、运维自治三大核心痛点。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 765

iOS, 在应用之间共享文档。

在iOS开发中,在很多情况下我们需要完成应用之间的文档共享。然而,iOS为应用提供的是一个运行沙箱,一个应用程序无法直接和另一个应用程序通讯,所以应用之间如果要共享文档的话需要通过一些系统提供的应用交互手段。 iOS应用程序之间交互的一个简单手段是“URL Scheme”,就是通过UIApplication的openURL方法,使用“://”这样的URL形式指定应用,同时可以在URL中加入一些类似

keyboardOTA的专栏 8891

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

ios:在应用之间共享文档。

在iOS开发中,在很多情况下我们需要完成应用之间的文档共享。然而,iOS为应用提供的是一个运行沙箱,一个应用程序无法直接和另一个应用程序通讯,所以应用之间如果要共享文档的话需要通过一些系统提供的应用交互手段。 iOS应用程序之间交互的一个简单手段是“URL Scheme”,就是通过UIApplication的openURL方法,使用“://”这样的URL形式指定应用,同时可以在URL中加

欧阳天涵的专栏 866

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

应用文档iOS, 在应用之间共享文档。

本文纯属个人见解,是对前面学习的总结,如有描述不正确的地方还请高手指正~     在iOS开辟中,在很多情况下我们需要实现应用之间的文档同享。然而,iOS为应用提供的是一个运行沙箱,一个应用程序没法直接和另一个应用程序通讯,所以应用之间如果要同享文档的话需要通过一些系统提供的应用交互手段。     iOS应用程序之间交互的一个简略手段是“URL Scheme”,就是通过UIApplicatio...

weixin_34318956的博客 115

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

app、H5、safari、appstore应用主页评分页之间拉起调用、打开手机某些系统功能、app打开文档

定义打开URL的方法 - (void)openURL:(NSString *)urlStr { NSURL *url = [NSURL URLWithString:urlStr]; UIApplication *app = [UIApplication sharedApplication]; if ([app canOpenURL:url]) { #ifdef __IPHONE_10_0 [app openURL:url options:[NSDictionary dicti

ios、Android、j2ee项目实用技能分享 902

使用第三方APP打开本地文档 (UIDocumentInteractionController)

基于IOS的沙盒设计原理,我们并不能随心所欲的去访问IOS文件系统中的每一个文件。用户的文件管理权限是很低的,一般情况下,用户只能通过当前应用来访问其沙盒目录下的文件,而无法访问其他应用程序沙盒内的资源。 但是,苹果也提供了一些方法来实现有限的文件共享功能。 一、设置应用程序的“FileSharing”,将应用程序沙盒内的Document目录开发给用户。文件共享允许用户通过iTunes

yang_iphone的专栏 3527

第三方支持以及如何找到第三方

in this post, we’ll discuss about the new File-Sharing and Document Support features in iPhone OS 3.2. The new File-Sharing feature allows user to access/Documentdirectory through iTunes. Users...

awgyeob2683的博客 173

iOS在app之间共享文件

在iOS开发中,在很多情况下我们需要完成应用之间的文档共享。然而,iOS为应用提供的是一个运行沙箱,一个应用程序无法直接和另一个应用程序通讯,所以应用之间如果要共享文档的话需要通过一些系统提供的应用交互手段。 iOS应用程序之间交互的一个简单手段是“URL Scheme”,就是通过UIApplication的openURL方法,使用“://”这样的URL形式指定应用,同时可以在URL中加

培根芝士的专栏 3248

iOS 共享文件的方法,应用间传文档

在iOS开发中,在很多情况下我们需要完成应用之间的文档共享。然而,iOS为应用提供的是一个运行沙箱,一个应用程序无法直接和另一个应用程序通讯,所以应用之间如果要共享文档的话需要通过一些系统提供的应用交互手段。 iOS应用程序之间交互的一个简单手段是“URL Scheme”,就是通过UIApplication的openURL方法,使用“://”这样的URL形式指定应用,同时可以在U

明明 2606

ios 应用和电脑共享文件夹_使用Documents实现windows和ios的文件共享

Documents可以实现ios系统与其他系统和网盘的共享,也可以让iphone手机直接访问电脑中的文件,听歌、看电影。这里以图片共享为例,其他文件也可以共享,比如在微信中接收的文件,打开后选择“用其他应用打开”,再选择“拷贝到Document”或“存储到文件”(iTunes)就可以保存在本机了。一、开启电脑的网络共享(SMB service)首先确保“控制面板-网络和Internet-网络和共享...

weixin_39839478的博客 2994

IOS程序之间的文件共享

2013-02-22 18:34 381人阅读 评论(0) 收藏 举报 目录(?)[+] 原文 System-Declared Uniform Type Identifiers One of the common tasks that an iOS developer has to do is to import or

欧阳天涵的专栏 3546
上一篇: App Store邮箱列表
下一篇: 天气接口
focusjava
博客等级 码龄14年 127粉丝 528原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值