Easily build widgets and make them available across iOS, iPadOS, and macOS using the WidgetKit framework and the new widget API for SwiftUI. Widgets now come in multiple sizes, and users can visit the new widget gallery to search, preview sizes, and place them anywhere on the Home screen to access important details at a glance. They can also add Smart Stacks — sets of widgets that use on-device intelligence to surface the right widget at the right moment, based on factors like time, location, and activity.
func getTimeline(for configuration: ConfigurationIntent, in context: Context, completion: @escaping (Timeline<Entry>) -> ()) { var entries: [SimpleEntry] = []
// Generate a timeline consisting of five entries an hour apart, starting from the current date. let currentDate = Date() for hourOffset in 0 ..< 5 { let entryDate = Calendar.current.date(byAdding: .hour, value: hourOffset, to: currentDate)! let entry = SimpleEntry(date: entryDate, configuration: configuration) entries.append(entry) }
let timeline = Timeline(entries: entries, policy: .atEnd) completion(timeline) } }
struct SimpleEntry: TimelineEntry { let date: Date let configuration: ConfigurationIntent }
struct Coding01WidgetsEntryView : View { var entry: Provider.Entry
var body: some View { Text(entry.date, style: .time) } }
@main struct Coding01Widgets: Widget { let kind: String = "Coding01Widgets"
var body: some WidgetConfiguration { IntentConfiguration(kind: kind, intent: ConfigurationIntent.self, provider: Provider()) { entry in Coding01WidgetsEntryView(entry: entry) } .configurationDisplayName("My Widget") .description("This is an example widget.") } }
struct Coding01Widgets_Previews: PreviewProvider { static var previews: some View { Coding01WidgetsEntryView(entry: SimpleEntry(date: Date(), configuration: ConfigurationIntent())) .previewContext(WidgetPreviewContext(family: .systemSmall)) } }