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

Objective c 监视沙盒应用程序中的文件夹,objective-c,macos,cocoa,Objective C,Macos,Cocoa,如何监视用户垃圾,以便在添加文件时发送操作 提前谢谢 沙盒应用程序无法访问垃圾箱。沙盒应用程序出于安全原因被沙盒化,垃圾箱中可能是用户已删除的所有类型的文档,沙盒应用程序在其以前的目标中永远无法访问这些文档。当然,用户希望这些文件在放入垃圾桶后仍能保存 如果你的应用程序访问垃圾真的有意义,例如,因为它是垃圾管理应用程序(我知道这是一个愚蠢的例子),苹果仍然会允许你的应用程序访问垃圾,如果你只是要求的话。因此,您需要指定一个临时异常权限,类型为 com.apple.security.tempora

如何监视用户垃圾,以便在添加文件时发送操作


提前谢谢

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

如果你的应用程序访问垃圾真的有意义,例如,因为它是垃圾管理应用程序(我知道这是一个愚蠢的例子),苹果仍然会允许你的应用程序访问垃圾,如果你只是要求的话。因此,您需要指定一个临时异常权限,类型为

com.apple.security.temporary-exception.files.home-relative-path.read-only
如果只读访问对您足够,或

com.apple.security.temporary-exception.files.home-relative-path.read-write
如果您还需要写访问权限。这些是授权字典中的键,值是字符串数组,每个字符串指定一个目录。在您的情况下,它们的数组将包含
/.Trash
,对于当前用户,这将转换为
/Users//.Trash
。例如:

<key>com.apple.security.temporary-exception.files.home-relative-path.read-write</key>
<array>
  <string>/.Trash</string>
</array>
com.apple.security.temporary-exception.files.home-relative-path.read-write
webside(您必须登录才能看到这一面,并且您需要具有使用App Store Connect权限的Apple ID)

AFAIK这些条件包括你必须提交一份bug报告(同样,你必须登录到网站,但这次每个苹果ID都可以登录),你必须向苹果解释为什么你需要这个例外,否则你的应用程序就不能做它应该做的事。你最好善于解释!如果苹果不认为你的用例是合法的,他们会关闭这个bug作为无效的,然后你的应用程序提交将被拒绝。如果该漏洞被认为是有效的,那么您必须在提交应用程序时告诉苹果,您的应用程序使用了临时权限,并且您必须将您创建的漏洞报告指向苹果。他们将再次阅读,如果商店团队同意开发团队的意见,认为这是一个有效的理由,他们将允许您的提交通过


一旦你的应用程序有了相应的权限,你就应该能够像一个没有沙盒的应用程序一样监视垃圾。例如,使用。使用函数
FSEventStreamCreate()
可以创建一个
FSEventStreamRef
,该函数监视某个路径(在本例中为垃圾箱),每当该路径上的内容发生更改时调用用户定义的回调函数,并可以在运行循环上进行调度。一旦计划好,只要目录的内容发生更改,就会调用回调函数。在回调函数中,您可以做任何您想做的事情,例如获取更高级别的事件(因为回调函数只是普通的C,所以您可能希望发布一个NSNotification,您可以在Obj-C代码中处理它,例如在UI代码中),或者直接调用某个对象的Obj-C方法(存储在回调上下文、全局变量或可作为单例访问的变量等中)

我正在解决类似的问题,但由于某些原因,您的解决方案对我不起作用。我有一个带有XPC服务的应用程序,它应该监控用户选择的资源和一些众所周知的地方,如下载文件夹。我已添加了对下载文件夹的只读访问权限,并尝试在XPC服务中添加临时访问权限目标,但从未调用FSEventStream回调,尽管我在控制台中没有看到任何错误。我正在运行最新的OS X Yosemite。知道它有什么问题吗?@Matthes XPC服务的权限只能是其应用程序权限的子集,而不是超集。如果你的应用程序无法访问这些文件夹,你的XPC服务可以也不是,无论其权限如何。XPC服务的实体仅用于进一步限制访问(默认情况下,XPC服务继承其应用程序的所有权限)感谢您的解释,这很有趣,我是在阅读文档时错过了这些信息还是没有这些信息?但是,我的主应用程序可以访问Downloads文件夹,以及用户使用powerbox机制打开的任何文件夹,但是XPC中的FSEventStream监控无法正常工作…@Matthes不幸的是,我没有针对y的解决方案我们的问题也是。你应该把这当作自己的问题来问,这样每个人都有机会提供答案。