我们如何添加锁屏小部件(需要 iOS 16)并仍然支持 iOS 15?

Gar*_*abo 7 ios lockscreenwidget widgetkit swiftui

我们如何将锁屏小部件添加到现有的小部件包中并仍然支持 iOS 15?:thinking_face: 例如,这不会编译

struct SecondExtraBundle: WidgetBundle {
    @WidgetBundleBuilder
    var body: some Widget {
        DailyHeartRatesWidget()
        if #available(iOSApplicationExtension 16.0, *) {
            LockScreenRecoveryScoreWidget()//Requires iOS 16? 
        } else {
            // Fallback on earlier versions
        }
    }
    
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*ven 20

我认为这应该有效。EmptyWidgetConfiguration如果不支持该小部件,只需返回一个即可。

struct SomeWidgetBundle: WidgetBundle {
    @WidgetBundleBuilder
    var body: some Widget {
        AlwaysAvailableWidget()
        LockScreenWidget()
    }
}

struct LockScreenWidget: Widget {
    var body: some WidgetConfiguration {
        if #available(iOSApplicationExtension 16.0, *) {
            return StaticConfiguration(
                kind: "some.kind",
                provider: LockScreenWidgetTimelineProvider()
            ) { provider in
                Text("Some view")
            }
            .configurationDisplayName("Some display name")
            .description("Some description")
            .supportedFamilies([.accessoryCircular])
        } else {
            return EmptyWidgetConfiguration()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这在 Xcode 14 之前不起作用,但SE-0360已经实现,您现在可以执行此操作。