美文网首页
iOS 11:Files相关笔记

iOS 11:Files相关笔记

作者: ghost__ | 来源:发表于2019-05-29 16:58 被阅读0次

    首先看几篇文章:
    官方介绍:使用方向
    针对Files做的一些分析性文章
    偏重多应用之间文件的相互共享

    个人整理:
    1.Files提供了云端和本地应用文件的管理,但不包含系统文件的操作。这里的云端指的是所有被apple支持的云,并不仅仅指iCloud。本地应用么,指的便是所有支持了Files的应用。
    2.当然所有的设备都是连通的,你可以从任何iPhone,iPad和iPod touch查看和管理这些应用程序。然后,无论你在何处保存或使用何种设备,都可以轻松找到您要查找的内容。
    3.还有一个东西,Files中查看到的应用内的数据,都是存在于Documents中的。所以关于这一点,需要注意。你是否愿意将所有文件都显示到Files中,供用户操作

    先看一张图,整理的初衷都是从这张图开始的,最终想要做到的就是希望能够在自己的app内,获取到其它应用内的文件。事实上,不管你的应用是否有添加权限支持Files,你都可以打开这个界面。权限对于你应用的意义在于:你的应用是否能在Files中查看到。


    这是通过我的demo打开的界面,和系统Files界面是一样的.PNG

    进到具体配置与代码实现:

    1. 配置权限:让自己的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

    相关文章

      网友评论

          本文标题:iOS 11:Files相关笔记

          本文链接:https://www.haomeiwen.com/subject/ynpytctx.html