iOS 11:Files相关笔记
首先看几篇文章:
官方介绍:使用方向
针对Files做的一些分析性文章
偏重多应用之间文件的相互共享
个人整理:
1.Files提供了云端和本地应用文件的管理,但不包含系统文件的操作。这里的云端指的是所有被apple支持的云,并不仅仅指iCloud。本地应用么,指的便是所有支持了Files的应用。
2.当然所有的设备都是连通的,你可以从任何iPhone,iPad和iPod touch查看和管理这些应用程序。然后,无论你在何处保存或使用何种设备,都可以轻松找到您要查找的内容。
3.还有一个东西,Files中查看到的应用内的数据,都是存在于Documents中的。所以关于这一点,需要注意。你是否愿意将所有文件都显示到Files中,供用户操作
先看一张图,整理的初衷都是从这张图开始的,最终想要做到的就是希望能够在自己的app内,获取到其它应用内的文件。事实上,不管你的应用是否有添加权限支持Files,你都可以打开这个界面。权限对于你应用的意义在于:你的应用是否能在Files中查看到。
这是通过我的demo打开的界面,和系统Files界面是一样的.PNG
进到具体配置与代码实现:
- 配置权限:让自己的app,显示到Files中。
info.plist --> Supports Document Browser :YES
2.实现app内打开Files界面,如上图。下面代码整个.m文件,主要在touchBegin里面的相关
#import "ViewController.h"
@interface ViewController ()<UIDocumentPickerDelegate>
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor redColor];
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
/*
支持的文件类型
尝试将这个设置成一个空数组 验证效果。会很快明白这个设置是干嘛用的
*/
NSArray *types = @[@"public.content",@"public.text",@"public.source-code",@"public.image",@"public.audiovisual-content",@"com.adobe.pdf",@"com.apple.keynote.key",@"com.microsoft.word.doc",@"com.microsoft.execl.xls",@"com.microsoft.powerpoint.ppt"];
UIDocumentPickerViewController *vc = [[UIDocumentPickerViewController alloc]initWithDocumentTypes:types inMode:UIDocumentPickerModeOpen];
vc.delegate = self;
[self presentViewController:vc animated:YES completion:nil];
}
#pragma mark -- UIDocumentPickerDelegate
//选取到文件 回调
- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentsAtURLs:(NSArray <NSURL *>*)urls {
}
//取消的回调
- (void)documentPickerWasCancelled:(UIDocumentPickerViewController *)controller {
}
@end
到这里,也基本结束了。
还有一个遗留问题:如果存在于Documents中的文件都会在Files中看到, 那该如何进行处理不必要的文件显示??(暂时没想到什么好方法,如果将这一类的文件存到其它目录,那该存到那个目录呢??)
==>找到了一个办法,利用unix文件系统的特性,在文件命名的时候加了一个点“.”实现了隐藏文件的效果。||按照下面的方法验证,主要的点就在文件夹前面的那一个 .
//这里的hidden 前面加了一个 .
NSString *hiddenPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@".hidden"];
BOOL result = [[NSFileManager defaultManager] createDirectoryAtPath: hiddenPath withIntermediateDirectories:YES attributes:nil error:nil];
if (result) {
NSString *writeDocument = [hiddenPath stringByAppendingPathComponent:@"hide.txt"];
NSError *error;
[@"write hidden messages" writeToFile:writeDocument atomically:YES encoding:NSUTF8StringEncoding error:&error];
if (error) {
NSLog(@"数据写入失败-%@",error);
}else {
NSLog(@"数据写入成功");
}
}else {
NSLog(@"文件夹创建成失败");
}
题外话:这个感觉和这一篇关联不大,就是在iTunes的文件共享中看到我们自己的app
这个只需要在app中info.plist配置相应的权限就好了:
Application supports iTunes file sharing -> YES
iTunes显示开发的app.png