监视沙盒应用程序中的文件夹

时间:2013-01-21 20:37:03

标签: objective-c macos cocoa

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

提前致谢!

1 个答案:

答案 0 :(得分: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。 E.g:

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

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

请注意,Apple只会在iTunes Connect网站上列出的某些条件下批准使用临时例外权利之一的应用程序(您必须登录以查看该方面,并且您需要Apple ID才能使用iTunes Connect。

AFAIK这些条件包括您必须使用Apple's Bug System提交错误报告(同样,您必须登录到网站,但这次允许每个Apple ID登录)你必须向Apple解释为什么你需要这个例外,否则你的应用程序无法做任何应该做的事情。你最好擅长解释一下!如果Apple认为您的用例不合法,他们会将此错误视为无效,然后您的应用提交将被拒绝。如果该错误被认为是有效的,您必须告知Apple您的应用程序在您提交应用程序时使用临时权利,并且您必须将Apple指向您创建的错误报告。他们会再次阅读,如果商店团队同意开发团队认为这是一个正当理由,他们将允许您的提交通过。

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