问题描述
我已将WidgetKit添加到我的应用程序中,但是在iOS 13设备上,当应用程序启动时出现此错误时,它会崩溃: dyld`__abort_with_payload
导致崩溃的代码部分是这样的:
static func reloadTimelines () {
if #available(iOS 14,*) {
WidgetCenter.shared.reloadTimelines(ofKind: "com.myDomain.myApp.ProgressWidget")
}
}
我尝试了其他不成功的变化,例如:
@available(iOS 14,*)
static func reloadTimelines () {
WidgetCenter.shared.reloadTimelines(ofKind: "com.myDomain.myApp.ProgressWidget")
}
该项目在Objective-C中,我很快导入了该类。
但是没有在任何地方添加#import“ myApp-Swift-h”或使用该类的情况,它总是崩溃。
有人可以告诉我我在做什么错或正在发生什么事吗?
谢谢。
编辑: 我在Xcode 11上尝试了此代码,然后开始工作!
#if canImport(WidgetKit)
WidgetCenter.shared.reloadTimelines(ofKind: "com.literautas.StoryPlanner.ProgressWidget")
#endif
但是它在Xcode 12 beta 4上崩溃
编辑2:它还在Xcode 12 beta 6上崩溃
解决方法
另一个人(谢谢你,马克)给了我解决方案。 将WidgetKit.framework标记为“可选”就可以了!
,对于那些仍然有问题的人。尝试这些更改。
进行可选导入
#if canImport(WidgetKit)
import WidgetKit
#endif
检查iOS版本
if #available(iOS 14,*) {
WidgetCenter.shared.reloadAllTimelines()
}
最后一步-最多展示
将 WidgetKit 添加到构建阶段->链接库,并使其成为可选
我错过了最后一步,然后代码也开始在iOS 13中运行。
,我们有
#if canImport(WidgetKit)
@available(iOS 14.0,*)
- 和 WidgetKit 在我们的主要目标中是可选的
而且崩溃仍在发生,显然即使在 iOS 14 上也是如此。
我们将所有 WidgetCenter 调用移动到一个包含所有度量值和一个附加度量值的文件中:
NSClassFromString("WidgetKit.WidgetCenter")
出于某种原因,我们还无法解释,这实际上在某些情况下返回 nil。我们阻止了崩溃,但在这些情况下,这意味着我们无法真正使用 WidgetCenter API。