WidgetKit에 대해서 간단하게 알아보겠습니다.
스마트폰의 홈 화면 또는 잠금 화면에 배치할 수 있는 작은 애플리케이션 창으로, 앱의 중요한 정보나 기능을 빠르게 확인하거나 접근할 수 있게 해줍니다
systemSmall
systemMedium
systemLarge
accesoryCircular
accesoryRectangle
accesoryInline
systemExtraLarge(iPad Only)
일반적으로 4개의 컴포넌트를 가집니다.
Timeline entry : Date(Mandatory) & contents
import Foundation
import WidgetKit
struct HelloWidgetEntry: TimelineEntry {
var date: Date
}
Timeline Provider : handling the process of updating a widget
Snapshot을 요청하는 방식
import WidgetKit
struct HelloWidgetTimelineProvider: TimelineProvider {
typealias Entry = HelloWidgetEntry
func placeholder(in context: Context) -> HelloWidgetEntry {
HelloWidgetEntry(date: Date())
}
func getSnapshot(in context: Context, completion: @escaping (HelloWidgetEntry) -> Void) {
completion(HelloWidgetEntry(date: Date()))
}
func getTimeline(in context: Context, completion: @escaping (Timeline<HelloWidgetEntry>) -> Void) {
completion(Timeline(entries: [HelloWidgetEntry(date: Date())], policy: .never))
}
}
WidgetView: UI View
import SwiftUI
import WidgetKit
struct HelloWidgetView: View {
var body: some View {
ZStack {
ContainerRelativeShape()
.fill(Color.orange.gradient)
.padding(10)
VStack {
Text("Hello")
.font(.title3)
Text("DevTechie")
.font(.title2.bold())
.foregroundStyle(.indigo.gradient)
}
}
}
}
Widget: Configuration to determine static or configurable. + Identifier
import WidgetKit
import SwiftUI
struct HelloStaticWidget: Widget {
var body: some WidgetConfiguration {
StaticConfiguration(kind: "com.kyle.helloStaticWidget", provider: HelloWidgetTimelineProvider(), content: { entry in
HelloWidgetView()
})
.supportedFamilies([.systemSmall])
}
}
Widget에 대해서 간단하게 알아봤습니다. 여러 용도로 사용할 수 있고 UX적으로도 유저들에게 노출하기에 좋은 기능입니다.