1

我将如何监控用户垃圾箱,以便在添加文件时可以发送操作。

提前致谢!

4

1 回答 1

3

沙盒应用程序无法访问垃圾箱。出于安全原因,沙盒应用程序被沙盒化,垃圾箱中可能是用户已删除的所有类型的文档,而沙盒应用程序在其以前的目的地永远无法访问这些文档。当然,用户希望这些文件在放入垃圾箱后仍然可以保存。

如果您的应用程序访问垃圾箱确实有意义,例如因为它是一个垃圾管理应用程序(我知道这是一个愚蠢的例子),如果您只要求它,Apple 仍会授予您的应用程序访问垃圾箱的权限。因此,您需要指定Temporary Exception Entitlement类型

com.apple.security.temporary-exception.files.home-relative-path.read-only

如果只读访问对您来说足够了,或者

com.apple.security.temporary-exception.files.home-relative-path.read-write

如果您还需要写权限。这些是权利字典中的键,值是字符串数组,每个字符串指定一个目录。在您的情况下,它们数组将包含/.Trash,它转换/Users/<username>/.Trash为当前用户。例如:

<key>com.apple.security.temporary-exception.files.home-relative-path.read-write</key>
<array>
  <string>/.Trash</string>
</array>

这将允许您的应用程序从其沙箱中部分释放,只要它只访问此目录(或其子目录)。

请注意,Apple 只会批准在App Store Connect网页上列出的特定条件下使用临时例外权利之一的应用程序(您必须登录才能看到该页面,并且您需要具有使用 App Store Connect 权限的 Apple ID) .

AFAIK 这些条件包括您必须向Apple 的反馈助手提交错误报告(同样,您必须登录网页,但这次允许每个 Apple ID 登录)并且您必须向 Apple 解释为什么您需要此例外,否则您的应用程序将无法执行它应该执行的任何操作。你最好善于解释!如果 Apple 认为您的用例不合法,他们会将这个错误视为无效而关闭,然后您的应用提交将被拒绝。如果错误被认为是有效的,您必须在提交应用程序时告诉 Apple 您的应用程序使用临时授权,并且您必须将 Apple 指向您创建的错误报告。他们会再次阅读,如果商店团队同意开发团队认为这是一个正当理由,他们将允许您的提交通过。

一旦您的应用程序具有适当的权利,您应该能够像非沙盒应用程序那样监控垃圾箱。例如使用FSEvent API。使用该功能FSEventStreamCreate(),您可以创建一个FSEventStreamRef监视某个路径(在您的情况下为垃圾箱),只要此路径的内容发生更改,就会调用用户定义的回调函数,并且可以在 RunLoop 上安排。一旦安排好,只要目录内容发生变化,就会调用回调函数。在回调函数中,您可以做任何您想做的事情,例如获取更高级别的事件(因为回调函数只是纯 C 语言,所以您可能想要发布可以在 Obj-C 代码中处理的 NSNotification,例如在您的 UI 代码中)或者可能直接调用某个对象的 Obj-C 方法(存储在回调上下文中、全局变量或可作为单例访问等)

于 2013-01-21T21:16:42.060 回答