在范围内找不到 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
}