如何修复“读写数据沙箱:使用 Mac Catalyst 时出错”

Posted

技术标签:

【中文标题】如何修复“读写数据沙箱:使用 Mac Catalyst 时出错”【英文标题】:How to fix "Read-Write-Data Sandbox: error when using Mac Catalyst 【发布时间】:2020-02-11 01:40:51 【问题描述】:

我最近更新到 macOS Catalina,因此我可以使用 Catalyst 更新我的一些应用程序以支持 Mac。每当我运行该应用程序并尝试访问 CloudKit 数据时(我使用 CloudKit 同步核心数据,如果 iCloud 帐户可用,则数据),然后它会因以下错误而崩溃。 [User Defaults] Couldn't write values for keys ( ApplicationAccessibilityEnabled ) in CFPrefsPlistSource<0x600002c07700> (Domain: com.apple.Accessibility, User: kCFPreferencesCurrentUser, ByHost: No, Container: (null), Contents Need Refresh: Yes): setting preferences outside an application's container requires user-preference-write or file-write-data sandbox access

我已尝试在我的签名和功能中将应用沙盒设置中的权限和访问更改为读/写。我也尝试将传入和传出连接更改为开启。

我不确定我应该显示什么代码,所以这里是崩溃的区域。

if isICloudContainerAvailable() 
            print("iCloud Available")
            let container = NSPersistentCloudKitContainer(name: "Shopping_App")
            
            container.loadPersistentStores(completionHandler: 
                (storeDescription, error) in
                if let error = error as NSError? 
                    fatalError("Unresolved error \(error), \(error.userInfo)")
                
            )

            return container

我除了应用程序来创建/获取 CoreData 数据,如果可用(在这种情况下)连接到 CloudKit 同步数据。但它现在甚至在它提出任何让我认为它在 AppDeleget 某处崩溃的视图之前就崩溃了。

10 月 14 日更新 -- 我发现如果我强制跳过应用程序崩溃的断点,我可以继续进入应用程序并且它工作正常。这让我认为错误确实在 AppDeleget 中,特别是说 UI 直到我跳过它在崩溃时设置的断点后才会出现。

11 月 4 日更新 -- 所以这个问题变得更加奇怪了。我忘记了我使用的是 Xcode 的 beta 版本,所以好吧,这可能是在我上周意识到这一点之后。我尝试通过公共版本运行该应用程序,该应用程序从未因断点而停止,而是因Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0) 而完全崩溃。这个错误真的很奇怪。这是我应该向 Apple 报告的错误吗?我想过这样做,但我决定不这样做,因为在我看来,这似乎是我本来可以做的事情,但现在正在重新考虑我是否应该这样做。我希望我能找到这个问题的解决方案,因为我想向公众发布 macOS 版本,但没有找到解决方案。

11 月 8 日更新 -- 在 Xcode 11.2.1 GM 种子中,问题仍然存在。我还没有找到这个问题发生的确切原因,但会继续尝试。我也无法在任何 Xcode 版本上重现 11 月 4 日更新中写入的错误。我没有找到其他任何东西,但想用关于 GM 种子的信息以及这种情况是否仍然发生来更新它。

11 月 13 日更新——我决定继续将应用程序上传到 Apple 以供批准,因为构建应用程序并独立于 Xcode 运行它工作得很好。 Apple 批准了该应用程序,没有对此问题提出任何投诉。这似乎只是一个 Xcode 问题。但是,我将继续更新此内容,如果/当我找到解决方案时,我将发布此问题的解决方案,但没有找到更多解决方法或解决此问题的方法。

11 月 20 日更新 -- 在 Xcode 11.3 Beta Build 11C24b 上,问题仍然存在。没有其他任何改变,我还没有找到其他任何东西来解决这个问题。我将继续保持更新,但还没有发现任何其他内容。

12 月 11 日更新 -- 在 Xcode 11.3 Public 11C29 上,问题仍然存在。但是,现在它并不一致,有时我必须通过断点两次而不是一次才能继续启动应用程序。如果独立于 Xcode 运行,它仍然不会发生。

2020 年 1 月 2 日更新 -- 仍然发生,但现在已验证它发生在真正的 ios 13 设备上。但是没有找到其他解决方案或步骤。我将继续更新这篇文章,但提供任何其他信息。

2020 年 2 月 17 日更新 -- 更新不多,但仍在 Xcode 11.4 Beta (11N111s) 上发生。将继续更新这篇文章,但没有太大变化。 (也修正了这篇文章的一些错误)

2020 年 3 月 10 日更新——我没有意识到 Xcode beta 11N132i 已发布,但在测试后它仍然存在。然而,尽管它可能仍在发生,但至少不太一致。现在它不是每次都发生和这样做,它似乎有点随机。

2020 年 4 月 18 日更新 -- 很抱歉没有更新这篇文章,直到现在我都无法编程。我还没有弄清楚这个问题,但现在似乎并没有真正发生。它现在仍然很少发生。这也在 Xcode 11.4.1 (11E503a) 上,我不知道为什么。我会继续尝试更新这篇文章。谢谢你。如果您有任何尝试找出原因的建议,我愿意倾听。

2020 年 5 月 14 日更新 -- Xcode 11.5 Beta 2 (11N605f) 此问题仍然随机发生,但现在似乎并不总是包含错误,但仍指向该部分代码。感谢您对本文的支持,当我发现更多关于这个问题的信息时,我会继续更新它。

2020 年 6 月 5 日更新 -- 很抱歉没有尽快更新,我完全忘记了我何时更新了 Xcode。在 Xcode 11.5 上,这个问题仍然存在。我也更新到 Catalina 10.15.5 并且几乎没有看到任何变化。然而,就像 cmets 所说的,我听说 Catalina 10.15.4 确实对此有所帮助,但 10.15.5 似乎没有改变任何东西,这很奇怪。

2020 年 6 月 27 日、2020 年 7 月 22 日和 2020 年 8 月 10 日更新 - 我已将我的项目更新为现在支持 Xcode 12,但它似乎仍然存在同样的问题。什么都没有真正改变,日志完全相同。我也欢迎所有愿意继续帮助解决此问题的人。这在 Xcode 12 Beta 2 上也是一样的。对于 beta 3 和 4,excat 相同。

2020 年 9 月 28 日更新 -- 这仍然是 Xcode 12 的 GM 和 Public 版本的问题。我还没有更新到 Xcode 12.0.1,因为我正在等待 macOS Big Sur,但在这一点上,我怀疑那将解决它。我真的没有任何更新,除此之外它仍在发生,我找不到问题。

2020 年 11 月 3 日更新 -- 这似乎仍然是 Xcode 12.1.1 Release Candidate 上的一个问题。很抱歉这么久没有更新这个,正如我之前所说的,我坚持更新 Xcode,但我决定继续更新。但是,更新到候选版本并没有改变任何东西,或者至少我没有注意到。我确实注意到了一个变化;然而,它似乎更早地显示了这个问题,但这可能只是它编译得更快。总而言之,这个问题没有发生重大变化,并且在一段时间内也没有真正改变。

2020 年 11 月 16 日更新

我已经更新到 macOS Big Sur 11.0.1 并将 Xcode 更新到 12.3 beta。在不得不更改一些随机的东西以使其在 Big Sur 上运行后,问题似乎仍然存在。但是,我认为我更改的大多数内容都无关紧要,因为它主要与 UI 元素有关。这可能只是 Big Sur,但它编译得更快,而且错误现在显示得更快;但它仍然是同样的错误。

【问题讨论】:

这似乎是 Xcode 的问题。我想我应该尝试构建应用程序并将其导出为应用程序并运行它,不管你信不信,它工作得很好,没有任何问题。所以这让我认为这是一个 Xcode 问题,而不是我的应用程序的问题。 嘿 MasterChief,我们正在使用 Catalyst 和 cloudkit 开展一个项目,静默通知在 iPhone 和 iPad 上都可以正常工作,但在 Mac App(Catalyst) 中无法正常工作 => (didReceiveRemoteNotification) 没有收到任何通知Mac App,你有什么想法吗? 如果我错过了理解你,我深表歉意,但这可能有点偏离这个问题的主题,所以你可能想打开你自己的问题。但我不完全确定。确保您添加了功能并打开了传入和传出信号。希望如果不考虑以更详细的方式打开一个新问题可能会有所帮助,我可以看看我是否可以提供帮助。谢谢 ***.com/questions/59778113/… 非常感谢您在这里的更新????代表“我有同样的问题”像我这样的人...... 【参考方案1】:

我遇到了同样的问题。 通过删除“All runtime Issue”断点解决。

测试后,

Thread Satinizer(运行时问题)工作正常 未定义的行为(运行时问题)工作正常 主线程检查器(运行时问题)工作正常 系统框架(运行时问题)BREAK

【讨论】:

【参考方案2】:

对我来说,我收到了这条确切的错误消息,但由于下一条错误消息指的是我的 Mac Catalyst 应用程序的 Info.plist 中缺少 CFBundleName ,因此发生了崩溃。

堆栈跟踪的sn-p:

(Domain: com.apple.Accessibility, User: kCFPreferencesCurrentUser, ByHost: No, Container: (null), Contents Need Refresh: No): setting preferences outside an application's container requires user-preference-write or file-write-data sandbox access
2020-06-27 11:01:52.403837-0700 Manga Relay D[17329:517025] [General] An uncaught exception was raised
2020-06-27 11:01:52.403908-0700 Manga Relay D[17329:517025] [General] *** -[__NSDictionaryM setObject:forKey:]: object cannot be nil (key: title)
2020-06-27 11:01:52.404006-0700 Manga Relay D[17329:517025] [General] (
    0   CoreFoundation                      0x00007fff2eb82be7 __exceptionPreprocess + 250
    1   libobjc.A.dylib                     0x00007fff6795a5bf objc_exception_throw + 48
    2   CoreFoundation                      0x00007fff2ec3160e -[__NSCFString characterAtIndex:].cold.1 + 0
    3   CoreFoundation                      0x00007fff2ec3c17c -[__NSDictionaryM setObject:forKey:].cold.3 + 0
    4   CoreFoundation                      0x00007fff2eac0329 -[__NSDictionaryM setObject:forKey:] + 976
    5   UIKitCore                           0x00007fff6f5f2c8f -[_UIMenuBarItem properties] + 99
    6   UIKitMacHelper                      0x00007fff5fd6272a UINSNSMenuItemFromUINSMenuItem + 90
    ...

一旦我在“Bundle name”(又名 CFBundleName)中指定了一个名称,崩溃就消失了,但我仍然收到有关在应用程序容器外设置首选项的错误消息。

更新更多细节:我的 Info.plist 的以下屏幕截图将 CFBundleName 定义为我的用户定义变量,如 $(MangaRelayBundleDisplayName),我发现我从未在任何地方定义过它,所以它是nil 导致崩溃。当我输入诸如“我的应用程序”之类的值时,崩溃就消失了。现在,这个解决方案与原始问题无关,基本上我被“沙盒访问”警告误导,但我认为可能还有其他人被警告误导。

我使用的是 macOS 10.5.5 和 Xcode 11.5。

【讨论】:

如果可以,您能否提供一个示例来说明添加 CGBundleName 的含义? 是的,我刚刚更新了一个屏幕截图和更多解释。 @117MasterChief96 谢谢。我实际上已经有了这个,但谢谢你的建议。希望正如你所说的but I figured there could be other people who are being mislead by the warning。希望您的建议能够帮助其他对此警告感到困惑的人。【参考方案3】:

MasterChief96,你并不孤单。这是我的设置:

MacOS 10.15.3 Xcode 11.4.1

我创建了一个全新的 SwiftUI “Hello World”项目,启用 Mac 作为目标设备,也就是 Catalyst。

我将 iOS 部署目标设置为 13.2(否则我会收到 MacOS 运行时错误,提示我需要 Catalina 10.15.4)

将scheme设置为“My Mac”,编译运行得到:

[User Defaults] Couldn't write values for keys
    ApplicationAccessibilityEnabled
    AccessibilityEnabled
    FullKeyboardAccessFocusRingEnabled
setting preferences outside an application's container requires user-preference-write or file-write-data sandbox access

由于它指的是沙盒,我将应用沙盒的“签名和功能”设置更改为包括用户选择的读/写和下载文件访问。

我很Xcode,删除项目的Derived Data,打开项目运行。在 MacOS 上运行时,错误消息仍然存在。 (在 iOS 上运行时我看不到这些消息。)

只是在这里猜测,但这似乎是 Catalyst 环境中的另一个错误?也许这个错误已在 Catalina 10.15.4 中修复,但该更新对我来说是一场灾难,我不得不将端口返回到 10.15.3。

【讨论】:

我尝试了相同的文件访问类型设置,但实际错误是Domain: com.apple.Accessibility, User: kCFPreferencesCurrentUser, ByHost: No, Container: (null), Contents Need Refresh: No): setting preferences outside an application's container requires user-preference-write or file-write-data sandbox access 而且我没有看到“用户偏好写入设置。我看到了用户选择的文件 (这是对 WholeCheese 的回复)似乎确实如此,但就像你说的那样,更新到 Catalina 10.15.4 并不是最好的主意。奇怪的是我更新到 Catalina 10.15.5 并且还没有发现任何不稳定的问题,但是项目并没有像你在 Catalina 10.15.4 中所说的那样发生变化,就像我从其他人那里听到的那样。

以上是关于如何修复“读写数据沙箱:使用 Mac Catalyst 时出错”的主要内容,如果未能解决你的问题,请参考以下文章

如何修复漏洞

如何修复WMI

PHP网站漏洞怎么修复 如何修补网站程序代码漏洞

如何修复这些漏洞? (npm audit fix 无法修复这些漏洞)

如何修复AppScan漏洞

如何在DOS环境下修复系统