LoginSignup
1

More than 1 year has passed since last update.

サポートするWidgetFamilyをiOSのバージョンによって変える

Last updated at Posted at 2022-09-14

サポートするWidgetの種類をiOS16以降と未満で分けたいときは

if #available(iOSApplicationExtension 16.0, *){
            //ios16以降の処理
   }else{
            //ios16未満の処理
 }

だいたいこの書き方でわけれるのだけれど、

struct myWidget: Widget {
    let kind: String = "myWidget"
    var body: some WidgetConfiguration {
        StaticConfiguration(kind: kind,  provider: Provider_relative()) { entry in
            fcwidgetEntryView_relative(entry: entry,timerState: TimerState_Ja(rawValue: entry.timerState)?.ToString ?? "", deadLineInerval: entry.timeInterval )
        }
        .configurationDisplayName("Mywidget")
        .description("いろいろ表示します")
        .supportedFamilies([.accessoryRectangular,
                            .accessoryCircular,
                            .systemSmall] )
    } 
}

Widgetの中枢のこのビュー?だけは
if #available(iOSApplicationExtension 16.0, *)でStaticConfigurationをまるごと分岐しようが、@available(iOSApplicationExtension 16.0, *)を使おうがエラーがでます。なので別で関数を作ってはめれば通ります。

// これをどっかいに書いといて
func supportWidgetFamily() -> [WidgetFamily]{
        if #available(iOSApplicationExtension 16.0, *){
            return [.accessoryRectangular, .accessoryCircular, .systemSmall]               }
        else{
            return [.systemSmall]
        }
    }

struct myWidget: Widget {
    let kind: String = "myWidget"
    var body: some WidgetConfiguration {
        StaticConfiguration(kind: kind,  provider: Provider_relative()) { entry in
            fcwidgetEntryView_relative(entry: entry,timerState: TimerState_Ja(rawValue: entry.timerState)?.ToString ?? "", deadLineInerval: entry.timeInterval )
        }
        .configurationDisplayName("Mywidget")
        .description("いろいろ表示します")
        .supportedFamilies(supportWidgetFamily())//ここに入れる
    } 
}

これでiOS16にはロック画面ウィジェットを出しつつ、iOS15にはホーム画面ウィジェットを出せます。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1