macOS授权沙盒应用程序完全访问磁盘未起作用。

7

我正在尝试使用全磁盘访问功能,但无法让它正常工作。以下是我执行的步骤列表:

  1. 启用了沙箱。实际上,授权文件看起来像:
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.files.bookmarks.app-scope</key>
<true/>
<key>com.apple.security.files.user-selected.read-write</key>
<true/>
  1. 我创建了应用的存档,并尝试使用开发者IDDevelopment方法进行分发
  2. 我将应用程序的二进制文件放置在/Applications文件夹中
  3. 我打开系统偏好设置 -> 安全性与隐私 -> 隐私 -> 完全磁盘访问,并添加了对我在/Applications文件夹中的应用程序的访问权限
  4. 当然,我没有使用Xcode附加到该应用程序

我正在Xcode 11和Catalina上进行测试。这是一个虚拟应用程序,打开NSOpenPanel以让用户选择要解压缩的存档文件,并尝试在相同目录中进行解压缩。

实际上这不是关于NSOpenPanel的问题,而是:

要使基于沙箱的应用程序使用完全磁盘访问,需要做什么?

有什么提示吗?我做错了什么吗?


你的应用程序使用启动脚本还是仅仅是二进制执行文件? - Richard Barber
我对macOS开发还比较新,因此我的目标是学习一些新知识,并使用libarchive作为库来实现一个简单的压缩/解压缩应用程序。该应用程序可以打开和解压关联文件、拖放文件、使用NSOpenPanel选择的文件或从FinderSync打开的文件。 没有什么特别的,只是普通的应用程序,不使用启动脚本或XPC服务。 - Martin Pilch
好的,使用启动脚本的应用程序需要在Catalina中由用户授予特定的shebang解释器文件系统访问权限。但这里并非如此。请同时发布您收到的任何错误消息。 - Richard Barber
libarchive一直说它无法读取文件。当沙箱关闭时,它的工作效果是正常的。 - Martin Pilch
这意味着您需要使用扩展沙盒授权。 - Richard Barber
显示剩余2条评论
1个回答

3
这里有关于iTerm2的解决方案(点击链接可以了解如何找到这个解决方案)。只需将以下内容添加到应用程序plist中即可: https://github.com/gnachman/iTerm2/pull/382
<key>NSSystemAdministrationUsageDescription</key>
<string>I want to read all your files</string>

文档 有点模糊。

不幸的是,这个解决方案对于 launchctld 守护程序无效(这正是我需要的)。我认为守护程序是一个例外,因为它们根本看不到 UI。

但对于普通应用程序,它应该可以完美地工作(我还没有测试过)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接