4

我已将 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 上崩溃

4

3 回答 3

8

另一个人(谢谢你,马克)给了我解决方案。将 WidgetKit.framework 标记为“可选”就可以了!

于 2020-08-29T09:56:17.767 回答
3

对于那些仍然有问题的人。试试这些改变。

进行可选导入

#if canImport(WidgetKit)
import WidgetKit
#endif

检查 iOS 版本

if #available(iOS 14, *) {
     WidgetCenter.shared.reloadAllTimelines()
 }

最后一步 - 大多数小鬼

WidgetKit添加到Build Phase -> Link Libraries并使其成为可选

我错过了最后一步,然后代码也开始在 iOS 13 中工作。

于 2020-09-10T17:03:59.303 回答
0

我们有

  • #if canImport(WidgetKit)
  • @available(iOS 14.0, *)
  • 并且 WidgetKit 在我们的主要目标中是可选的

并且崩溃仍在发生,显然即使在 iOS 14 上也是如此。

我们将所有 WidgetCenter 调用移动到一个包含所有度量和一个附加度量的文件中:

  • NSClassFromString("WidgetKit.WidgetCenter")

出于某种原因,我们还无法解释,这实际上在某些情况下返回 nil。我们阻止了崩溃,但在这些情况下,这意味着我们不能真正使用 WidgetCenter API。

于 2021-02-12T08:46:35.927 回答