【问题标题】:I have added Widgetkit to my app but now crash on iOS 13 when the app starts on Xcode 12 beta我已将 Widgetkit 添加到我的应用程序中,但现在当应用程序在 Xcode 12 beta 上启动时在 iOS 13 上崩溃
【发布时间】:2020-12-17 10:46:45
【问题描述】:

我已将 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中,我用swift导入了那个类。

但是如果没有在任何地方添加 #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 上崩溃

【问题讨论】:

  • 请看我的回答,轻松解决这个问题,stackoverflow.com/a/64809435/1002338
  • 请看我的回答,轻松解决这个问题,stackoverflow.com/a/64809435/1002338
  • @Mona 这个解决方案是不可能的,因为必须支持使用旧版本 ios 的用户
  • @Tomeu Mascó 是的。应用程序的目标 iOS 版本可以保持不变。即使是旧今天小部件的目标 iOS 也可以保持原样。这只是将您添加到项目中的新小部件目标的 iOS 版本设置为 14。
  • 主应用和小部件的目标 iOS 可以不同。

标签: ios objective-c swift xcode12 widgetkit


【解决方案1】:

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

【讨论】:

  • 谢谢!除了使用 canImport 之外,这对我有用。对于那些想知道的人:转到 frameworks 文件夹,将 WidgetKit.framework 添加到您的主要目标,然后将其设置为可选。
【解决方案2】:

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

进行可选导入

#if canImport(WidgetKit)
import WidgetKit
#endif

检查 iOS 版本

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

最后一步 - 最具影响力

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

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

【讨论】:

    【解决方案3】:

    我们有

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

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

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

    • NSClassFromString("WidgetKit.WidgetCenter")

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

    【讨论】:

      猜你喜欢
      • 2021-06-20
      • 2021-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多