基于文档的应用程序中的内部沙箱错误

Internal sandbox error in a document-based app

我有一个基于沙盒文档的 (NSDocument) 应用程序。保存文件时,出现奇怪的沙盒错误:

[scoped] handle 0: sandbox_extension_release error [22: Invalid argument]
[scoped] <0x600001278f00 file:///Users/username/Testi%203.exampletext>: internal sandbox error for <StopAccessing>

我还在文档控制器中使用 recentDocumentURLs 获取最近文件的文件属性,并将它们显示在 NSOutlineView 中。当我访问了足够多的文件后,我开始收到新的沙箱错误 sandbox_extension_consume returned 12,然后沙箱有时会阻止应用程序访问任何文件。

从 Xcode 模板创建最小的基于文档的应用程序时甚至会发生这种情况。事情得到正确保存,我可以访问我想要的文件,但错误开始堆积。

这是一个重现该行为的示例项目:
https://www.dropbox.com/s/9v0v65jbqkjb7ra/Sandboxed%20Doc%20App.zip?dl=1

创建一个新文档(window 只显示基本模板,以使其最小化)并保存。立即记录沙箱错误。

示例中的文档子类尽可能简单:

- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError {
    return [_string dataUsingEncoding:NSUTF8StringEncoding];
}

- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError {
    _string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    return YES;
}

AFAIK,NSDocumentController 应该支持没有任何子类化的沙箱。此外,尝试手动停止访问文档 URL 的范围书签(保存后或文档关闭时)会产生错误。

类似的沙箱错误是 referred to on Twitter,但我几乎没有访问几个文件,而且不超过 4000 个。

我做错了什么,或者这是 macOS Big Sur 的错误?如果没有,它怎么会出现在基于文档的应用程序模板中?

这里的问题是我的应用程序正在从 NSDocumentController 请求最近文件的列表,并通过再次请求相同的列表来检查编辑过的日期。

应用程序可以在其沙箱之外快速访问的文件数量似乎有限制,即使它具有这样做的权限,而且沙箱很快就会用完扩展名。

要解决此问题,请检查您的代码中是否存在通过文件列表运行并访问它们的任何内容。