1

I have the following code in my WidgetBundle class, but I want to remove the @available tag since as is, if the user is not iOS 16, they won't have access to Home Screen or Lock Screen widgets at all.

struct WidgetBundler: WidgetBundle {
    
    @WidgetBundleBuilder
    var body: some Widget {
        HomeScreenWidget()
        LockScreenWidget()
    }
}

The compiler does not like this code, and it was the only other way I could think of to get around this issue:

struct WidgetBundler: WidgetBundle {
    
    @WidgetBundleBuilder
    var body: some Widget {
        if #available(iOSApplicationExtension 16, *) {
            HomeScreenWidget()
            LockScreenWidget()
        } else {
            HomeScreenWidget()
        }
    }
}

How do I remove the @available tag and get it so users can access the Home Screen widgets even on iOS 14 and 15?

bmeikle
  • 291
  • 1
  • 3
  • 5
  • 3
    Does this answer your question? [How can we add a Lock Screen Widget (requiring iOS 16) and still support iOS 15?](https://stackoverflow.com/questions/72688852/how-can-we-add-a-lock-screen-widget-requiring-ios-16-and-still-support-ios-15) – aheze Jul 28 '22 at 23:11

2 Answers2

2

This solution works:

@main
struct WidgetsBudle: WidgetBundle {

    var body: some Widget {
        if #available(iOSApplicationExtension 16.0, *) {
            return ios16Widgets
        } else {
            return ios14Widgets
        }
    }

    @WidgetBundleBuilder
    var ios14Widgets: some Widget {
        HomeScreenWidget()
    }

    @WidgetBundleBuilder
    var ios16Widgets: some Widget {
        HomeScreenWidget()
        LockScreenWidget()
    }

}
Serzhas
  • 854
  • 12
  • 23
0

You can use this approach mentioned in avanderlee

    @main
    struct WidgetsBudler: WidgetBundle {
        @WidgetBundleBuilder
        var body: some Widget {
            widgets()
        }
    
        func widgets() -> some Widget {
            if #available(iOS 16.0, *) {
                return WidgetBundleBuilder.buildBlock(HomeScreenWidget(),
        LockScreenWidget())
            } else {
                return HomeScreenWidget()
            }
        }
    }
mzdogan
  • 91
  • 1
  • 12