Xcode Swift 5 MacOs 应用程序存档时为空窗口,但在从 Xcode 运行时有效

Posted

技术标签:

【中文标题】Xcode Swift 5 MacOs 应用程序存档时为空窗口,但在从 Xcode 运行时有效【英文标题】:Xcode Swift 5 MacOs app empty window when archived but works when running it from Xcode 【发布时间】:2019-07-20 20:13:16 【问题描述】:

我正在为 Mac 构建一个应用程序,该应用程序基于从文本字段和安全文本字段收集的登录名和密码登录网站,然后应用程序打开一个 url,该 url 基于日期范围选择在我的应用程序中创建,并使用两个日期选择器单元格日历。下一个应用程序在 webWiev 中显示 html 数据(使用 WKWebView),使用扩展名 NSAttributedString 将 html 转换为字符串,然后将检索到的数据保存为 txt 文件。只要应用程序从 Xcode 的“播放”按钮运行,一切都会按预期工作。问题是如果我存档这个应用程序并启动它,它会打开一个没有任何按钮、日历或文本字段的空窗口。没有错误,管理器上没有崩溃日志,什么都没有。

我决定做一个小测试。我只用一个按钮构建了另一个视图控制器,单击该按钮将显示我的应用程序主视图控制器。在归档这个修改过的应用程序并在 Xcode 之外运行它之后,一个窗口会显示带有一个正确按钮的视图控制器。但是点击后什么都没有。如果在“内部”Xcode 中运行,应用程序会非常好用,按钮会正确显示主 ViewController。你有什么线索可能是错的吗?谢谢!

编辑 1. 所以我找到了关于苹果的讨论,其中提到了这个问题。它与 IB WKWebView 相关联,并且问题已经有一段时间了。现在我必须解决这个问题。苹果论坛链接:https://forums.developer.apple.com/thread/116047

【问题讨论】:

你检查控制台了吗?我得到了打印结果:无法在(NSWindow)上设置(contentViewController)用户定义的检查属性:***-[NSKeyedUnarchiver decodeObjectForKey:]:无法为键(NS.objects)解码类(WKWebView)的对象,因为没有名为“WKWebView”的类“ 被找到;该类需要在源代码中定义或从库中链接(确保该类是正确目标的一部分)。如果类被重命名,使用 setClassName:forClass: 将类转换映射添加到 NSKeyedUnarchiver 【参考方案1】:

您是否将 WebKit.framework 嵌入到您的应用中?

在我写的评论之后,我建立了一个解决方案并用这种方法解决了。

请检查一下。

【讨论】:

我遇到了同样的问题,从 Xcode 启动应用程序时 WKWebView 工作正常,但由于崩溃“无法解码类对象 (WKWebView)”,Apple 拒绝了它。添加 WebKit.framework 解决了这个问题。 这对我也有用。有同样的问题。谢谢@CenoX

以上是关于Xcode Swift 5 MacOs 应用程序存档时为空窗口,但在从 Xcode 运行时有效的主要内容,如果未能解决你的问题,请参考以下文章

C 中的 FTDI D2XX API 在命令行控制台上工作,但在由 Xcode 和 Swift 编程在 macOS 上构建的应用程序中始终返回零

无法在 macOS 的 Swift 应用程序中请求日历事件访问(通过 EKEventStore)

Swift UI Canvas 未在 macOS 10.15 和 Xcode 11.1 中显示

如何在 Swift 5 中以编程方式在特定屏幕(即主显示器而不是外部显示器)上显示窗口? [苹果系统; Xcode 15]

Swift UI 实时预览画布不适用于 macOS Catalina 和 Xcode 11.0

强制 Swift Playgrounds (xcode) 在不模拟 iOS 的情况下使用 MacOS SpriteKit