bmeikle
bmeikle

Reputation: 411

How can I remove the @available tag in the this Swift struct?

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?

Upvotes: 1

Views: 243

Answers (2)

mzdogan
mzdogan

Reputation: 109

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()
            }
        }
    }

Upvotes: 0

Serzhas
Serzhas

Reputation: 914

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()
    }

}

Upvotes: 2

Related Questions