• Security-scoped bookmark(音乐访问权限等)


    MacOS 开发 — 最近打开文件(Security-scoped bookmark)

    Mac OS X APP在开发完成,上线的时候必须支持sandbox[https://blog.csdn.net/heroguo_jp/article/details/54862223] 当设置完成SandBox之后 发现,打开最近文件.txt 之后修改保存,当再次打开的时候发现不能 打开运行啦?

    原因:

    Mac OS X系统为了保证系统的安全性采取啦安全保护机制。不允许你在没有文件流的的方式打开文件【没有权限打开】。

    解决方案:
    Security-scoped bookmark

    在File Access中 User Selected File项中选择Read/Write 文件的读写权限 ,沙盒有一个默认的规则: 在APP 运行期间通过NSOpenPanel打开的任意位置的文件,把这个路径保存下载,后面都可以直接使用这个路径继续访问文件获取文件的读写权限。

    但是在APP重新启动以后,这个文件路径不能直接被访问,要想要永久的访问APP之外的路径,就必须使用Security-scoped bookmark

    Security-scoped bookmarks有2种:

    An app-scoped bookmark:可以对应用中打开的文件或者文件夹在以后永久性访问儿不需要再次通过NSOpenPanel打开。这种bookmark方式使用的比较多。

    A document-scoped bookmark: 提供对特定的文档的永久访问权。可以理解针对文档嵌套的一种权利模式。比如你开发一个能编辑ppt文档的应用,里面嵌入了视频文件,图片文件连接。那么下次打开这个ppt文档时就能直接访问这些文件而不需要在通过NSOpenPanel打开获得授权。

    在info.plist文件中添加权限属性

    com.apple.security.files.bookmarks.app-scope  值为true

    方法:

    1、 保存打开文件的URL的Bookmark
    获取URL中的bookmarkData存储到NSUserDefaults中

     NSData *bookmarkData = [fileURL bookmarkDataWithOptions:NSURLBookmarkCreationWithSecurityScope
                             includingResourceValuesForKeys:nil
                                              relativeToURL:nil
                                                      error:&error];

    2、应用启动时通过URL的bookmark获取文件授权
    通过bookmark数据解析获取授权的NSURL,并且执行startAccessingSecurityScopedResource方法得到访问权限。
    执行block回调完成相关内容读取后,执行stopAccessingSecurityScopedResource停止授权。

      NSURL *allowedUrl = [NSURL URLByResolvingBookmarkData:bookmarkData
                                                          options:NSURLBookmarkResolutionWithSecurityScope
                                                    relativeToURL:nil
                                              bookmarkDataIsStale:&isStale
                                                            error:NULL];

    @try {
    [allowedUrl startAccessingSecurityScopedResource];
    block();
    } @finally {
    [allowedUrl stopAccessingSecurityScopedResource];
    }

    Demo 地址:https://github.com/heroBlog/HGBookmark.git

    如若把app加入到文件属性里边,比如,把自己开发的音乐播放器加入到音乐文件的属性列表中,以属性方式,打开自己开发的播放音乐播放器,

    参考把app加入到文件属性列表

    https://www.cnblogs.com/sundaymac/p/13790457.html

  • 相关阅读:
    Return Largest Numbers in Arrays-freecodecamp算法题目
    Title Case a Sentence-freecodecamp算法题目
    Find the Longest Word in a String-freecodecamp算法题目
    Check for Palindromes-freecodecamp算法题目
    Factorialize a Number-freecodecamp算法题目
    Reverse a String-freecodecamp算法题目
    js拖动div
    Jquery $.ajax()方法详解
    jQuery中$.each()方法的使用
    echarts的pie图中,各区块颜色的调整
  • 原文地址:https://www.cnblogs.com/sundaymac/p/13790186.html
Copyright © 2020-2023  润新知