沙盒环境中 FinderSync 扩展的读写访问权限

2023-11-26

场景

用户右键单击 Finder 中的目录并找到自定义菜单项。单击该项目将告诉我的应用程序打开一个窗口,用户可以在其中完成工作。完成后,需要将文件写入他通过右键单击选择的文件夹。

问题

我现在一切都开始工作了,除了最后一部分。扩展程序无法写入所选文件夹。

用户选择他想要与之交互的文件夹似乎不是 Powerbox 的一部分,根据我的理解,Powerbox 只能通过以下方式激活:openPanel and savePanel。如何获得与用户通过菜单项选择的文件夹进行交互的权限?我在开发人员库中找不到该问题的任何可能解决方案的参考。不在沙盒指南中,不在扩展指南中。

如果无法使用所选的文件和文件夹,那么添加自定义菜单项的可能性将毫无用处,因此我确信必须有一种方法来访问它们。

也许我尝试写作的方式是错误的。我的主应用程序将临时文件写入共享组文件夹中。之后,它会发送扩展程序侦听的通知:

func copyFile(notification:NSNotification)
{
    NSLog("write file")

    if let target = tmpTarget
    {
        let secureContainer = NSFileManager.defaultManager().containerURLForSecurityApplicationGroupIdentifier("group.de.enie.Nu")
        let contents = NSFileManager.defaultManager().contentsOfDirectoryAtURL(secureContainer!, includingPropertiesForKeys: nil, options: NSDirectoryEnumerationOptions.SkipsHiddenFiles | NSDirectoryEnumerationOptions.SkipsPackageDescendants | NSDirectoryEnumerationOptions.SkipsSubdirectoryDescendants , error: nil)
        
        for content in contents as! [NSURL]
        {
            NSLog("tmp data: \(content.path!)")
            if content.lastPathComponent!.stringByDeletingPathExtension == "SharedData"
            {
                NSLog("found shared file")
                
                NSFileManager.defaultManager().copyItemAtURL(content, toURL: target.URLByAppendingPathComponent(content.lastPathComponent!), error: nil)
                
                NSFileManager.defaultManager().removeItemAtURL(content, error: nil)
            }
        }
        tmpTarget = nil
    }
}

尝试写入文件会导致以下控制台通知:

  • 在 /Users//Desktop/SharedData.png 上打开:不允许操作
  • 拒绝文件写入创建 /Users//Desktop/SharedData.png

任何如何访问用户选择的文件夹的想法都值得赞赏。

Update

我只是保证我没有犯任何错误。虽然我可以通过NSOpenPanel(这意味着权利应该是正确的)我无法在 / 中创建文件夹,甚至无法为我的默认目标网址添加书签FIFinderSyncController.


即使 Finder Sync 应用程序扩展被授予“用户选择的文件”沙箱文件访问权限,selectedItemURLs()用户通过 Finder Sync App Extension 右键单击​​访问的文件看似不被视为“用户选择”。因此,沙箱会拒绝您的 Finder Sync 应用程序访问这些文件。

正如其他答案所指出的,解决此问题的唯一方法是使用临时授权来访问更广泛的文件。或者使用 PowerboxNSOpenPanel让用户选择一个包含文件夹,并使用该安全范围的书签来访问沙盒文件。

请复制我的 Apple 错误报告,请求允许此行为:

Finder 同步应用程序扩展selectedItemURLs()应接收“用户选择的文件”沙箱文件访问权限。

雷达://42874694
https://openradar.appspot.com/radar?id=5063363058991104

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

沙盒环境中 FinderSync 扩展的读写访问权限 的相关文章

随机推荐

  • 如何通过反射获取类及其父类的私有字段?

    我有类 B 及其父类 A 两者都在命名空间 Domain 中 A类 有私有字段a B类 有私有字段b 然后我在命名空间 Reflect 中有一个 Reflection Util 如果我使用这条线 instanceOfB GetType Ge
  • 是否可以访问上下文管理器的 __exit__() 方法内的上下文对象(代码块)?

    我想在中再次调用代码对象exit 方法 如果它引发异常 可能多次 可能有延迟 我知道使用装饰器很容易做到 但我的动机是有时我想重复一些我不想提取到单独的函数并装饰它的代码片段 我正在寻找类似的东西 class again object de
  • Python在另一个文件中导入模块

    我目前正在将一个项目 以前是一个大文件 重构为几个单独的 python 文件 每个文件都运行我的应用程序的特定部分 例如 GUIthread py运行图形用户界面 Computethread py做一些数学等等 每个线程都包含对导入模块中函
  • 错误,TensorSliceReader 构造函数不成功:无法找到 ram 解封文件的任何匹配文件

    我遇到了这个错误 我无法解开我的 jupyter 笔记本上的文件 import os import pickle import joblib import pandas as pd from sklearn preprocessing im
  • 将工具提示添加到 Excel 加载项自定义功能区 UI XML

    我正在创建一个具有自定义功能区 UI 的 Excel 加载项 我想为我的按钮添加工具提示 我可以使用哪些 XML 属性来设置它
  • 如何使用“To”、“CC”和“BCC”发送邮件?

    为了测试目的 我需要在几百个电子邮箱中填充各种消息 我将使用smtplib为了那个原因 我不仅需要将消息发送到特定邮箱 还需要抄送和密件抄送它们 我怎么做 电子邮件标头对于 SMTP 服务器来说并不重要 只需将抄送和密件抄送收件人添加到to
  • 如何在scala中实现惰性序列(可迭代)?

    我想实现一个惰性迭代器 它在 3 级嵌套循环中的每次调用中生成下一个元素 scala 中是否有与 c 的这段代码类似的内容 foreach int i in foreach int j in foreach int k in yield r
  • linux从内核中的pid获取进程名称

    你好 我在内核中使用 sys getpid 来获取进程 ID 如何从内核结构中找到进程名称 它存在于内核中吗 非常感谢 结构体task struct包含一个名为comm 它包含executable name excluding path G
  • Redis事务回滚

    我是 redis 新手 我有一个应用程序 其中有多个进行事务的 redis 命令 如果其中之一失败 redis 会像关系数据库一样回滚事务吗 用户有责任回滚事务吗 Redis 不像关系数据库那样回滚事务 如果您有关系数据库背景 Redis
  • 我有位置,但 z 索引不起作用

    我希望外环位于圆圈后面 但是当我尝试使用时z index它不工作 没有做任何事情 我做了 2 个环 一个环在圆圈的顶部 没有顶部 另一个在圆圈的后面 我无法移动它 我不知道为什么 root size 200px background wid
  • 为什么 Cache::lock() 在 Laravel 7 中返回 false?

    我的框架是 Laravel 7 缓存驱动程序是 Memcached 我想执行原子缓存获取 编辑 放置 为此我使用Cache lock 但它似乎不起作用 这 lock gt get 返回 false 见下文 我该如何解决这个问题 Fort 测
  • 如何用 Gson java 解析这个转义的 Json?

    因此 我收到了以下我无法控制的回复 message someName someLastName has sent you a question parameters firstName someName lastName someLastN
  • Laravel FFMPEG 错误编码使用 Laravel 队列失败

    我在用 php ffmpeg php ffmpeg 0 5 与 Laravel 5 我使用这个库来压缩和转换录制的视频 我先解释一下场景 当我从控制器执行以下代码时 它的工作方式就像魅力一样 ffmpeg FFMpeg create vid
  • Android中逐帧动画导致OutOfMemoryError

    我的 resources drawable 文件夹中有很多图像作为框架 假设大约 200 个 我想使用这些图像来运行动画 最长的动画为80帧 对于某些动画 我可以成功地通过单击按钮来运行动画 但对于某些动画 它会给出 OutOfMemory
  • 在 Java 中使用 WCF WsHttpBinding WebService

    我正在尝试让 Java 客户端与 WCF wshttpbinding WebService 进行通信 但我无法这样做 呼叫要么挂起 要么我得到 musunderstoodheader expcections 我的Web服务只是Visual
  • docker 的 Cron 容器 - 它们实际上是如何工作的?

    我已经使用 docker 几个月了 并且正在致力于对各种不同的服务器映像进行 docker 化 一个一致的问题是许多服务器需要运行 cron 作业 网上有很多关于这个的讨论 包括 Stackoverflow 但我并不完全理解它的机制 目前
  • Laravel 4 虚拟主机和 mod 重写设置

    我已经尝试了几个小时来安装 Laravel 4 并使虚拟主机和路由正常工作 但到目前为止我一直不走运 我提到我正在这样做Windows 7的机器和WAMP 我将描述我已经做过的事情 我已经启用了 rewrite module 使用以下内容更
  • 平台模块之间是否允许循环?

    这是模块声明java rmi module module java rmi requires java base requires java logging exports java rmi activation exports com s
  • 反射类获取任何对象的所有属性

    我需要创建一个函数来获取对象 包括子对象 的所有属性 这是为了我的错误日志记录功能 现在我的代码总是返回 0 个属性 请让我知道我做错了什么 谢谢 public static string GetAllProperiesOfObject o
  • 沙盒环境中 FinderSync 扩展的读写访问权限

    场景 用户右键单击 Finder 中的目录并找到自定义菜单项 单击该项目将告诉我的应用程序打开一个窗口 用户可以在其中完成工作 完成后 需要将文件写入他通过右键单击选择的文件夹 问题 我现在一切都开始工作了 除了最后一部分 扩展程序无法写入