在范围内找不到WidgetCenter

时间:2020-07-24 00:37:02

标签: ios swift widgetkit

我正在为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的体系结构限制吗?

3 个答案:

答案 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
}