非沙盒应用程序中的沙盒策略错误



我正在为我的基于文档的应用程序使用即席(App Store之外(分发。该应用程序是NOT沙盒,权限设置正确:

<key>com.apple.security.app-sandbox</key>
<false/>

当运行经过公证的应用程序时,它会被Gatekeeper捕获。控制台中反复打印以下内核错误:
Sandbox: App(33811) System Policy: deny(1) file-write-unlink /Users/user/Library/Autosave Information/xx.name.AppName.plist

该应用程序不使用macOS自动保存(保存到位(功能,但如果我没有错的话,这个Autosave Information文件夹用于恢复应用程序会话。我正在使用+(BOOL)autosavesDrafts,而+(BOOL)autosavesInPlace返回NO。我还覆盖了- (NSURL *)autosavedContentsFileURL以指向应用程序支持文件夹,并且URL得到了正确的服务。

如果允许,应用程序会不断地将文件写入Autosave Information文件夹。

为什么以及如何应用程序一直试图访问此文件夹,为什么它违反了沙盒策略,即使不在沙盒内?

编辑

我终于从控制台中找出了真正的错误。该应用程序似乎以某种方式返回了一个错误的路径,用于保存恢复数据。我试着找到一种设置它的方法,但目前没有成功。

-[NSData(NSData) initWithContentsOfFile:options:maxLength:error:] + 111
+[NSArray(NSArray) newWithContentsOf:immutable:] + 112
-[NSDocumentController(NSInternal) _autoreopenRecordsBeingReopened] + 83
-[NSDocumentController(NSInternal) _autoreopenDocumentsIgnoringExpendable:withCompletionHandler:] + 705
-[NSApplication _reopenWindowsAsNecessaryIncludingRestorableState:completionHandler:] + 249

问题是旧的捆绑包标识符的一些残留物。我已经迁移到应用程序的沙盒分发版,在这个过程中的某个时刻,我使用相同的bundle标识符构建了沙盒版本。macOS已经将捆绑包标识符注册为属于一个沙盒应用程序,可能是出于安全原因,它不再希望允许它运行非沙盒应用。

我创建了一个新的Info.plist,并更改了bundle标识符,错误就消失了。

相关内容

  • 没有找到相关文章

最新更新