我已将 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 中,我在 swift 中导入 class。
但是如果不在任何地方添加#import "myApp-Swift-h",或者不使用它 class,它就会一直崩溃。
谁能告诉我我做错了什么或发生了什么事?
提前致谢。
编辑:
我在 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 并使其成为 optional
我错过了最后一步,然后代码也在 iOS 13 中开始工作。
我们有
#if canImport(WidgetKit)
@available(iOS 14.0, *)
- WidgetKit 在我们的主要目标中是可选的
崩溃仍在发生,显然甚至在 iOS 14.
我们将所有 WidgetCenter 调用移动到一个文件中,其中包含所有度量和一个附加度量:
NSClassFromString("WidgetKit.WidgetCenter")
出于某种原因,我们还无法解释,在某些情况下这实际上返回 nil。我们阻止了崩溃,但在那些情况下,这意味着我们无法真正使用 WidgetCenter API.
我已将 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 中导入 class。
但是如果不在任何地方添加#import "myApp-Swift-h",或者不使用它 class,它就会一直崩溃。
谁能告诉我我做错了什么或发生了什么事?
提前致谢。
编辑: 我在 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 并使其成为 optional
我错过了最后一步,然后代码也在 iOS 13 中开始工作。
我们有
#if canImport(WidgetKit)
@available(iOS 14.0, *)
- WidgetKit 在我们的主要目标中是可选的
崩溃仍在发生,显然甚至在 iOS 14.
我们将所有 WidgetCenter 调用移动到一个文件中,其中包含所有度量和一个附加度量:
NSClassFromString("WidgetKit.WidgetCenter")
出于某种原因,我们还无法解释,在某些情况下这实际上返回 nil。我们阻止了崩溃,但在那些情况下,这意味着我们无法真正使用 WidgetCenter API.