我正在为iOS 10+构建iOS应用。该应用程序在Debug配置中运行良好,但是在Release中无法编译引用WidgetCenter
的快速源代码。
即使我正在导入Cannot find WidgetCenter in scope
并有选择地嵌入框架,它也会输出错误WidgetKit
。
import Foundation
import WidgetKit
class MyWidgetCenter: NSObject {
@available(iOS 14, *)
func reloadTimelines(_ kind: String) {
// this line causes error: cannot find 'WidgetCenter' in scope
WidgetCenter.shared.reloadTimelines(ofKind: kind)
}
@available(iOS 14, *)
func reloadAllTimelines() {
// this line causes error: cannot find 'WidgetCenter' in scope
WidgetCenter.shared.reloadAllTimelines()
}
}
编辑:
当我设置Build Active Architecture Only
标志时,对于发布配置中的模拟器和我的连接设备(iPhone XR)来说,它构建良好。只有在为多种体系结构构建时,它才编译失败。我没有考虑WidgetKit
的体系结构限制吗?
答案 0 :(得分:13)
我相信WidgetKit应该支持armv7
体系结构,但是它无法为WidgetCenter
编译armv7
的用法。
我的解决方法是包装WidgetCenter
语句,以仅支持armv7
之外的我需要的体系结构
class MyWidgetCenter: NSObject {
@available(iOS 14, *)
func reloadTimelines(_ kind: String) {
#if arch(arm64) || arch(i386) || arch(x86_64)
WidgetCenter.shared.reloadTimelines(ofKind: kind)
#endif
}
@available(iOS 14, *)
func reloadAllTimelines() {
#if arch(arm64) || arch(i386) || arch(x86_64)
WidgetCenter.shared.reloadAllTimelines()
#endif
}
}
答案 1 :(得分:2)
您应该首先在文件中import WidgetKit
,然后在下面添加功能reloadAllWidget
。
@objc public func reloadAllWidget() {
#if arch(arm64) || arch(i386) || arch(x86_64)
WidgetCenter.shared.reloadAllTimelines()
#endif
}
要更新时间轴时,请使用self.reloadAllWidget()
答案 2 :(得分:1)
就我而言,我只需要检查arm64
。
@available(iOS 14, *)
@objc public func reloadWidget() {
// Compiler error fix. Arm64 - current 64-bit ARM CPU architecture,
// as used since the iPhone 5S and later (6, 6S, SE and 7),
// the iPad Air, Air 2 and Pro, with the A7 and later chips.
#if arch(arm64)
WidgetCenter.shared.reloadAllTimelines()
#endif
}