问题标签 [security-scoped-bookmarks]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
113 浏览

ios - 通过安全范围的书签在多个设备上访问 iCloud 文件

我有一个安全范围的书签,存储在我的应用程序的 iCloud 目录中,它指向一个也存储在 iCloud 中的文件,因此即使重新安装应用程序后书签和文件仍然可用。现在我想访问另一台设备上的书签和文件,使用同一个 iCloud 帐户同步。

是否可以通过在另一台设备上创建的书签访问此类文件?Apple 的文档在该主题中很难掌握。文档说:

对于应用程序范围的书签,除了创建书签的应用程序之外,没有沙盒应用程序可以访问 URL(从书签中获得)指向的文件系统资源。具体来说,如果调用者与创建书签的调用者没有相同的代码签名身份,则使用安全范围创建的书签将无法解析。

对于文档范围的书签,任何有权访问书签数据本身并有权访问拥有书签的文档的沙盒应用程序都可以获得对资源的访问权限。

所以我想创建文档范围的书签,但到目前为止我所有的尝试都以错误告终。文档范围的书签是否仅保留给 macOS 而在 iOS 上不可用?

更新

我正在使用代码保存书签:

其中 url 由 UIDocumentBrowserViewController 返回(并指向已下载且可用的 iCloud 文件),并且 bookmarkUrl 指向 iCloud 应用程序目录书签位置。然后我使用代码阅读它:

在运行 iOS 13.6 的同一设备上重新安装应用程序之间可以正常工作。在运行 iOS 14.4 的另一台设备上,即使在重新安装应用程序后,我在最后一行仍出现错误:

看起来我缺少与新 iOS 14 权限规则相关的内容。此外,可以在另一部手机上访问在一部手机上创建的书签,但尝试从书签解析资源 url 以错误结束:

0 投票
0 回答
280 浏览

macos - MacOS 内部沙箱错误

我正在构建一个允许用户编辑文件的 MacOS 应用程序。要访问文件,我使用安全范围的书签,如下所示:

当用户完成并且 NSDocument 被取消初始化时,我停止访问书签,如下所示:

但是,当尝试调用 .stopAccessingSecurityScopedBookmark() 时,我收到了几个日志错误。

我不确定这些错误是否会造成问题。无论哪种方式,一切似乎都正常,但我担心在部署中会出现问题。

我正在使用以下安全授权密钥:

0 投票
0 回答
78 浏览

swiftui - ReferenceFileDocument 和文档范围的书签

上下文 我正在编写一个允许用户选择文件夹,然后扫描它们以查找文件的应用程序。该文件夹可以在用户的​​机器、iCloud 或外部存储上。该应用程序将这些文件和源文件夹的详细信息保存到一个文档中,因此用户可以在将来访问这些文件并重新扫描源文件夹。该应用程序是使用 MacOS 和 iPad 的 SwiftUI 框架编写的。

问题 鉴于这是一个沙盒应用程序,我需要创建安全范围的书签,以便能够访问已保存到文档中的文件夹。我有两个问题:

  1. 使用 ReferenceFileDocument 协议时,如何创建文档范围的书签。我需要文档的 URL,但我永远无法访问它。我想在实现 fileWrapper 函数时实现这样的目标(裸骨示例):
  1. 理想情况下,用户将能够:
  • 将外部驱动器连接到他们的 Mac
  • 选择该驱动器上的文件夹
  • 保存文档,这会将书签保存到该文件夹​​的 URL
  • 将文档发送到 iPad(通过电子邮件或 iCloud 驱动器)
  • 使用 iPad 版 App 打开文档
  • 将外部书签连接到 iPad
  • 从文件夹中重新扫描文档中标记为书的文件夹

但是考虑到 1) 中的问题以及文档书签不能指向文件夹的事实,有没有办法?

任何想法或建议都将受到欢迎。

0 投票
1 回答
98 浏览

swift5 - 如何从沙盒中读取文件?(快速 5,xcode 12)

我需要将文件发送到服务器。我使用提供文件 url 的 UIViewControllerRepresentable 选择此文件,每次尝试上传时都会收到相同的消息:- Domain=NSCocoaErrorDomain Code=257 “无法打开文件“example1.xml”,因为您没有无权查看。” . 我想我需要在 info.plist 上添加权限,但我找不到合适的权限。如果我在沙箱中选择一个文件,它就可以工作。

0 投票
1 回答
68 浏览

nsurl - Xamarin.Mac 使用安全范围的书签

微软的官方文档说:

https://docs.microsoft.com/en-us/xamarin/mac/app-fundamentals/sandboxing#using-security-scoped-bookmarks

尝试访问 SandBox 之外的持久性,但它不起作用。

首先,我NSSavePanel.SavePanel根据 SandBox 安全策略使用并为我可以访问的 URL 添加书签。

然后我检索访问验证的书签并使其可访问。

但是,上面url将只包含null,这将导致错误。

我怎样才能让它工作?

我们需要把任何东西NSData data放在首位吗?

0 投票
0 回答
25 浏览

swift - 从命令行检索文件的权限

我正在尝试编写一个命令行工具,我想在其中访问用户提供的某些文件。例如,我希望这是可能的:

在沙盒模式下,我无法读取和写入文件,因为我没有权限。这没关系,但我想要求用户授予对选定文件的权限。在开发基于 UI 的应用程序时,可以使用NSDocumentController,然后返回一个安全范围的 URL。有没有一些方法可以在没有文档选择器的情况下获得这样一个安全范围的 URL?我知道其他应用程序会这样做,例如,当我第一次打开 Matlab 时,我收到类似“你想允许 Matlab 访问‘文档’吗?”的提示。

0 投票
0 回答
25 浏览

swift - 无法访问安全范围目录 URL 的内容

我有以下代码来枚举目录。目录的 URL 作为参数传递给函数。

在函数开始时startAccessingSecurityScopedResource返回true,但是当我开始枚举时,它会返回false用户选择的原始文件夹中的所有以下文件和子目录。

这是函数的代码。

从上面的代码中,file传递的参数确实返回 true 进行访问。但是,在directoryEnumerator循环中,fileURL没有访问权限。

是否有原因导致我无法访问它说我可以访问的原始目录中的子目录和文件?