繁体   English   中英

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

[英]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>

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

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

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

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

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

- (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 的范围书签(保存后或文档关闭时)会产生错误。

Twitter 上提到了类似的沙箱错误,但我几乎没有访问几个文件,而且不超过 4000 个。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM