WidgetKit 위젯 만들기
타임라인을 사용하는 홈 화면 위젯을 만듭니다.
WidgetKit 위젯 만들기은(는) CoddyKit의 무료 Swift Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Swift Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
위젯이란
위젯은 홈 화면, 잠금 화면 또는 StandBy에 표시되는 작고 한눈에 보기 쉬운 뷰입니다. 미니 앱은 아니므로 스크롤하거나 임의의 코드를 실행할 수 없습니다. WidgetKit을 통해 제공한 일정에 따라 시스템이 새로 고치는 데이터의 스냅샷을 표시합니다.
import WidgetKit
import SwiftUI
// A widget = configuration + timeline of entries
// + a SwiftUI view that renders one entry위젯 확장 대상
위젯은 기본 앱이 아니라 별도의 위젯 확장 대상에 포함됩니다. 위젯 확장은 자체 번들을 가지고 별도의 프로세스에서 실행됩니다. Xcode의 위젯 확장 템플릿을 사용해 추가하면 구성과 제공자의 기본 구조가 자동으로 생성됩니다.
import WidgetKit
// File > New > Target > Widget Extension
// The extension declares one or more widgets
// in a WidgetBundle if you have several.위젯 유형
위젯은 Widget 프로토콜을 준수하고, 구성을 반환하는 body를 제공합니다. 구성은 종류 식별자, 타임라인 제공자, 그리고 각 항목을 렌더링하는 뷰를 하나로 연결합니다.
import WidgetKit
import SwiftUI
struct WeatherWidget: Widget {
var body: some WidgetConfiguration {
StaticConfiguration(
kind: "WeatherWidget",
provider: WeatherProvider()) { entry in
WeatherView(entry: entry)
}
.configurationDisplayName("Weather")
.description("Shows the current forecast.")
}
}정적 구성과 App Intent 구성
StaticConfiguration은 사용자 옵션이 없는 위젯에 사용합니다. AppIntentConfiguration을 사용하면 사용자가 App Intent를 통해 위젯을 맞춤 설정할 수 있습니다(도시나 계정 선택 등). 콘텐츠가 고정된 경우에는 정적 구성을, 설정 가능한 위젯에는 인텐트 기반 구성을 선택하십시오.
import WidgetKit
// StaticConfiguration -> no user choices
// AppIntentConfiguration -> user-editable parameters
let kinds = "static vs configurable"
_ = kinds타임라인 항목
위젯이 표시할 수 있는 각각의 시점은 TimelineEntry입니다. date와 뷰에 필요한 데이터를 담은 구조체입니다. 제공자는 이러한 항목의 순서를 제공합니다.
import WidgetKit
struct WeatherEntry: TimelineEntry {
let date: Date
let temperature: Int
let condition: String
}위젯 뷰
뷰는 일반적인 SwiftUI로 작성하지만 제약이 있습니다. 스크롤할 수 없고 상호작용이 제한되며, 여러 고정 크기에서 모두 올바르게 보여야 합니다. 항목을 읽고 한눈에 보기 쉬운 요약을 깔끔하게 배치하십시오.
import SwiftUI
import WidgetKit
struct WeatherView: View {
let entry: WeatherEntry
var body: some View {
VStack {
Text(entry.condition)
Text("\(entry.temperature) degrees")
.font(.title)
}
}
}지원되는 패밀리
supportedFamilies로 지원할 크기를 선언합니다. .systemSmall, .systemMedium, .systemLarge, 잠금 화면의 .accessoryRectangular/.accessoryCircular 등을 지정할 수 있습니다. 위젯 패밀리 환경을 사용해 패밀리별로 레이아웃을 조정하십시오.
import WidgetKit
import SwiftUI
// .configurationDisplayName(...)
// .supportedFamilies([.systemSmall, .systemMedium,
// .accessoryRectangular])
let families = "declare supported sizes"
_ = families패밀리에 맞게 조정하기
뷰 내부에서 @Environment(\.widgetFamily)를 읽어 레이아웃을 분기하십시오. 별도의 위젯을 작성하지 않고도 작고 간결한 위젯과 더 많은 내용을 담는 중간 크기 위젯에 각각 맞출 수 있습니다.
import SwiftUI
import WidgetKit
struct AdaptiveView: View {
@Environment(\.widgetFamily) var family
let entry: WeatherEntry
var body: some View {
if family == .systemSmall {
Text("\(entry.temperature)")
} else {
Text("\(entry.condition) \(entry.temperature)")
}
}
}컨테이너 배경
최신 위젯은 containerBackground(for: .widget)으로 배경을 선언해야 시스템이 StandBy와 잠금 화면 같은 여러 상황에서 위젯을 올바르게 렌더링할 수 있습니다. 이를 지정하지 않으면 위젯이 거부되거나 잘못 표시될 수 있습니다.
import SwiftUI
import WidgetKit
struct Bg: View {
var body: some View {
Text("Hi")
.containerBackground(for: .widget) {
Color.blue
}
}
}앱과 데이터 공유하기
위젯 프로세스는 별도로 실행되므로 앱의 메모리 상태를 읽을 수 없습니다. 두 대상이 모두 접근할 수 있는 공유 컨테이너인 앱 그룹을 통해 데이터를 공유하십시오. 일반적으로 공유 UserDefaults 스위트나 그룹 컨테이너의 파일을 사용합니다.
import Foundation
let shared = UserDefaults(
suiteName: "group.com.example.app")
// App writes; widget reads the same suite.
_ = shared위젯 새로 고침
앱의 데이터가 변경되면 WidgetCenter.shared.reloadTimelines(ofKind:)(또는 reloadAllTimelines())를 호출해 WidgetKit에 새로 고침을 요청하십시오. 그러면 시스템이 제공자에게 새로운 타임라인을 요청합니다.
import WidgetKit
func refreshWidget() {
WidgetCenter.shared.reloadTimelines(
ofKind: "WeatherWidget")
}빠른 확인
위젯이 호스트 앱과 데이터를 공유하는 방식을 떠올려 보십시오.
복습
WidgetKit 위젯을 만들었습니다.
- 위젯은 별도의 확장에 포함되며
Widget을 준수하고WidgetConfiguration을 반환합니다. StaticConfiguration또는AppIntentConfiguration,TimelineEntry, 그리고 제약이 있는 SwiftUI 뷰를 사용합니다.supportedFamilies를 선언하고widgetFamily에 따라 조정하며containerBackground를 추가합니다.- 앱 그룹을 통해 데이터를 공유하고
WidgetCenter.reloadTimelines로 새로 고칩니다.
자주 묻는 질문
“WidgetKit 위젯 만들기” 강의는 무료인가요?
네 — “WidgetKit 위젯 만들기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Swift Academy 강의 전체를 잠금 해제할 수 있습니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“WidgetKit 위젯 만들기”에서 뭘 배우나요?
타임라인을 사용하는 홈 화면 위젯을 만듭니다. 브라우저에서 직접 실행하는 실습 코드로 Swift Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Swift Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Swift Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“WidgetKit 위젯 만들기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Swift Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Swift Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- WidgetKit 위젯 만들기
- 타임라인 제공자와 스냅샷
- 앱 확장 기능 개요
- 앱 인텐트와 단축어