簡體   English   中英

我已將 Widgetkit 添加到我的應用程序中,但現在當應用程序在 Xcode 12 beta 上啟動時在 iOS 13 上崩潰

[英]I have added Widgetkit to my app but now crash on iOS 13 when the app starts on Xcode 12 beta

我已將 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添加到Build Phase -> Link Libraries並使其成為可選

我錯過了最后一步,然后代碼也開始在 iOS 13 中工作。

我們有

  • #if canImport(WidgetKit)
  • @available(iOS 14.0, *)
  • 和 WidgetKit 在我們的主要目標中是可選的

崩潰仍在發生,顯然即使在 iOS 14 上也是如此。

我們將所有 WidgetCenter 調用移動到一個包含所有度量值和一個附加度量值的文件中:

  • NSClassFromString("WidgetKit.WidgetCenter")

出於某種原因,我們還不能解釋,這實際上在某些情況下返回 nil 我們阻止了崩潰,但在這些情況下,這意味着我們無法真正使用 WidgetCenter API。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM