我已将Widgetkit添加到我的应用程序中,但是当该应用程序在Xcode 12 Beta上启动时,现在在iOS 13上崩溃

问题描述

我已将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。