8

我正在为 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我没有考虑到架构限制吗?

4

3 回答 3

20

我相信 WidgetKit 应该支持该armv7架构,但是它无法编译WidgetCenterfor 的用法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
  }
}
于 2020-07-24T18:33:37.033 回答
3

你应该首先import WidgetKit在你的文件中,然后添加reloadAllWidget下面的函数。

@objc public func reloadAllWidget() {

    #if arch(arm64) || arch(i386) || arch(x86_64)

    WidgetCenter.shared.reloadAllTimelines()

    #endif
}

当你想更新时间线时,你使用self.reloadAllWidget()

于 2020-08-26T11:13:04.137 回答
3

就我而言,我只需要检查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
}
于 2020-09-23T11:45:24.777 回答