I tried to add iOS 17 version check inside WidgetBundle but the widget extension keep on crashing .
Getting Thread 1: Swift runtime failure: Unexpectedly found nil while unwrapping an Optional value
. After removing the iOS 17 check it works fine.
Is there any way to provide version check inside widgetBundle?
struct MyWidgets: WidgetBundle {
@WidgetBundleBuilder
var body: some Widget {
widget1()
widget2()
if #available(iOSApplicationExtension 16.1, *) {
LiveActivity()
}
if #available(iOSApplicationExtension 17.0, *) {
ContactdWidget()
}
}
}
Try WidgetBundleBuilder.buildBlock
for every separate version check and provide all supported widgets inside buildBlock for a particular version
struct MyWidgets: WidgetBundle {
@WidgetBundleBuilder
var body: some Widget {
getWidgets()
}
private func getWidgets()-> some Widget{
if #available(iOS 16.1, *){
return getNewiOSWidgets()
}else{
//Older widgets
}
}
@available(iOSApplicationExtension 16.1, *)
private func getNewiOSWidgets()->some Widget{
if #available(iOS 17.0, *) {
return WidgetBundleBuilder.buildBlock(
Widget1(),
Widget2(),
LiveActivityWidget()
)
}else{
return WidgetBundleBuilder.buildBlock(
Widget3(),
Widget4(),
LiveActivityWidget()
)
}
}
}