首页 > 解决方案 > 非沙盒应用程序中的沙盒策略错误

问题描述

我正在为我的基于文档的应用程序使用临时(App Store 外部)分发。该应用程序未经过盒处理,并且权利设置正确:

    <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)autosavesDraftswhile+(BOOL)autosavesInPlace返回NO。我还覆盖- (NSURL *)autosavedContentsFileURL指向 App Support 文件夹,并且 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

标签: swiftobjective-cxcodemacoscocoa

解决方案


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

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


推荐阅读