【问题标题】:Sandbox policy error in a non-sandboxed app非沙盒应用程序中的沙盒策略错误
【发布时间】:2021-07-06 14:21:20
【问题描述】:

我正在为我的基于文档的应用程序使用临时(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)autosavesDrafts+(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

【问题讨论】:

  • 它是基于文档的应用程序吗?
  • 是的,很好,我会在问题中澄清这一点。
  • 您是否使用其他权利,例如用户读/写?您使用哪个版本的 macOS?
  • 我在 10.15.4。我拥有files.user-selected.read-writenetwork.clientprint 的安全权利。
  • 所以只是为了确保。您有一个文档子类并且没有被覆盖 +(BOOL)autosavesinplace 返回 YES?

标签: swift objective-c xcode macos cocoa


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    相关资源
    最近更新 更多