从 Objective-C 应用访问 WidgetCenter

Accessing WidgetCenter from Objective-C App

我有一个现有的 Objective-C 应用程序并为其开发了一个 SwiftUI iOS 14 小部件。到目前为止,一切都很好。现在我正在尝试从我的 Objective-C 应用程序重新加载时间线。我知道没有 Objective-C api 可以访问 WidgetCenter,所以我已经实施了 Apple 文档中概述的桥接步骤(至少我认为我已经实施了,因为我是 Swift 的新手) .我似乎无法在我的 Objective-C 应用程序中获得 Widget Center 或 WidgetCenter.shared.reloadAllTimelines()。我尝试了很多方法都没有成功,所以我一定做错了什么。任何帮助或建议将不胜感激。

我遇到了同样的问题。解决方案是创建一个 swift 文件,例如:WidgetKitHelper。创建分配的 swift-objc header (桥接 header 文件)如果它没有自动生成,您可以手动添加它(搜索它)。 在帮助器 object 中,您可以访问 widgetkit,如果您完成其余操作以便能够从您的 objc 代码中看到 swift 代码,您可以将其用作包装器。

提示:

import WidgetKit

@available(iOS 14.0, *)
@objcMembers final class WidgetKitHelper: NSObject {

    class func reloadAllWidgets(){

        #if arch(arm64) || arch(i386) || arch(x86_64)
        WidgetCenter.shared.reloadAllTimelines()
        #endif

    }
}

obj-c代码:

首先通过添加导入swift代码:

#import "YourProjectName-Swift.h"

那么你可以使用:

[WidgetKitHelper reloadAllWidgets];