在范围内找不到 WidgetCenter
WidgetCenter not found in scope
我正在为 iOS 10+ 开发一个 iOS 应用。该应用程序在 Debug 配置中构建良好,但在 Release 中无法编译引用 WidgetCenter
.
的 swift 源代码
它输出错误 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
是否存在我没有考虑的架构限制?
我相信 WidgetKit 应该支持 armv7
架构,但是它无法为 armv7
.
编译 WidgetCenter
的用法
我的解决方法是包装 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
}
}
您应该先 import WidgetKit
在您的文件中,然后在下面添加函数 reloadAllWidget
。
@objc public func reloadAllWidget() {
#if arch(arm64) || arch(i386) || arch(x86_64)
WidgetCenter.shared.reloadAllTimelines()
#endif
}
当你想更新时间线时,你使用self.reloadAllWidget()
在我的例子中,我只需要检查 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
}
我正在为 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
是否存在我没有考虑的架构限制?
我相信 WidgetKit 应该支持 armv7
架构,但是它无法为 armv7
.
WidgetCenter
的用法
我的解决方法是包装 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
}
}
您应该先 import WidgetKit
在您的文件中,然后在下面添加函数 reloadAllWidget
。
@objc public func reloadAllWidget() {
#if arch(arm64) || arch(i386) || arch(x86_64)
WidgetCenter.shared.reloadAllTimelines()
#endif
}
当你想更新时间线时,你使用self.reloadAllWidget()
在我的例子中,我只需要检查 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
}