swift - 非沙盒应用程序中的沙盒策略错误
问题描述
我正在为我的基于文档的应用程序使用临时(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
while+(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 已将捆绑标识符注册为属于沙盒应用程序,并且可能出于安全原因,不再希望允许它在非沙盒环境中运行。
我创建了一个新的Info.plist
,并更改了捆绑标识符,错误就消失了。
推荐阅读
- c# - 如何编译包含错误的 .sln 文件?
- c# - Watson Visual Recognition API C# 授权
- cordova - firebase 云消息中的 phonegap 推送插件 v1.10.4 以获得支持
- java - 在 android studio 中同步依赖项时出错,例如配置“compile”已过时,已被“implementation”和“api”取代
- clojure - Clojure apply 没有实现惰性序列的前四个元素?
- javascript - 未写入数组 - 异步 NodeJS
- mysql - 如何编写 SQL 查询以将两个表与映射表连接起来,并获得每个结果只有一行的格式化输出?
- python - 类型错误:装饰器()缺少 1 个必需的位置参数:'func'
- mysql - leetcode 574 获胜候选查询
- python - 当 njobs 大于 1 时,gridsearch 输出的行数过多