锁屏 swift 小部件仅适用于 iOS 16 用户

Mar*_*ark 6 iphone ios swift swiftui ios16

我有多个适用于 iOS 14 及更高版本用户的小部件。但对于新的锁屏小部件,它仅适用于 iOS 16 用户。如何只为 iOS 16 用户制作底部两个小部件?如果我取消注释第一行,那么我相信它将使所有小部件仅对 iOS 16 用户可用,但我不能这样做,我希望我的用户能够继续使用主屏幕小部件(如果他们使用的是 iOS 14)- 15.

import WidgetKit
import SwiftUI


//@available(iOSApplicationExtension 16.0, *)
@main
struct Widgets: WidgetBundle {
    @WidgetBundleBuilder
    var body: some Widget {
        Widget1()
        Widget2()
        Widget3()
        LockscreenWidget1()
        LockscreenWidget2()
    }
}
Run Code Online (Sandbox Code Playgroud)

Kai*_*ian 9

您需要在 Widget 逻辑中配置它。

例如

@main
struct MyWidget: Widget {
    
    private let supportedFamilies: [WidgetFamily] = {
        if #available(iOSApplicationExtension 16.0, *) {
            return [.systemSmall, .systemMedium, .systemLarge, .systemExtraLarge, .accessoryInline, .accessoryCircular, .accessoryRectangular]
        } else if #available(iOSApplicationExtension 15.0, *) {
            return [.systemSmall, .systemMedium, .systemLarge, .systemExtraLarge]
        } else {
            return [.systemSmall, .systemMedium, .systemLarge]
        }
    }()
    
    var body: some WidgetConfiguration {
        StaticConfiguration(kind: kind, provider: Provider()) { entry in
            MyWidgetEntryView(entry: entry)
        }
        .configurationDisplayName("Demo Name")
        .description("Description of the demo.")
        .supportedFamilies(supportedFamilies)
    }
}
Run Code Online (Sandbox Code Playgroud)