如何监控用户垃圾箱,以便在添加文件时我可以发送操作。
提前致谢!
答案 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方法一些对象(存储在回调上下文中,全局变量或可作为单例访问等)。