seong_hye, the developer

Swift) WidgetKit이란? 본문

IOS

Swift) WidgetKit이란?

seong_hye 2022. 8. 2.

📘 Swift) WidgetKit

홈화면이나 잠금화면에서 확인 가능한 위젯을 어떻게 만들 수 있는지

어떤 프레임워크를 사용하는지 알아보자


🔹 WidgetKit이란?

iOS 14 이상에서 도입된 홈 화면/잠금 화면 위젯을 만들 수 있게 해주는 프레임워크SwiftUI 기반으로 앱의 주요 정보를 작고 빠르게 확인할 수 있는 인터페이스를 제공함


🔹 WidgetKit의 기본 개념

구성 요소 설명
WidgetKit 프레임워크 위젯을 만들기 위한 핵심 프레임워크
Widget Extension 앱과는 별개의 실행 단위 (독립적인 타겟)
Timeline 위젯이 보여줄 데이터를 시간 기반으로 정의
TimelineEntry 특정 시간에 표시될 데이터 단위
TimelineProvider Timeline을 생성하고 관리하는 객체
WidgetConfiguration 위젯의 종류, 스타일, 설정 방식 정의

🔹 Xcode에서 Widget 생성 방법

 

추가하고자 하는 앱의 File -> New -> Target을 클릭

 

Widget Extension을 선택한 후 이름과 원하는 내용을 선택하여 생성 가능


🔹 기본 구성 흐름

✅ TimelineEntry

struct SimpletEntry: TimelineEntry {
	let data: Date
    let configuration: ConfigurationAppIntent
}

TimelineEntry 프로토콜을 채택하고 있기에 Date에 대한 정보는 필수

위젯이 들고 있어야하는 정보들을 선언하고 사용할 수 있게 함

 

✅ Widget View

struct TestingEntryView : View {
	var entry: Provider.Entry
    
    var body: some View {
    	VStack {
        	...
        }
    }
}

위젯에 대한 뷰를 그리는 객체

실제 위젯이 어떻게 그려지느냐를 나타내는 곳

 

✅ Widget

struct Testing: Widget {
	let kind: String = "Testing"
    
    var body: some WidgetConfiguration {
    	AppIntentConfiguration(kind: kind, intent: ConfigurationAppIntent.self, provider: Provider()) {	entry in
        	TestingEntryView(entry: entry)
            	.containerBackground(.fill.tertiary, for: .widget)
            }
        }
    }

위젯이 실질적으로 돌아가는 부분

 

AppIntentConfiguration의 경우 iOS 17+ 부터 나온 기능

- kind: 위젯의 identifier에 해당하는 부분으로 bundleIdentifier처럼 설정할 수 있음

- intent: AppIntent로 앱 기능을 호출 할 수 있도록 해줌

 

🔍 APPIntent

iOS 16+ (특히 iOS 17+) 부터 도입된 Swift 기반의 선언적 인텐트 시스템

사용자가 앱 외부에서 입의 기능을 실행할 수 있게 만드는 구조

ex) Siri, 위젯, Shortcuts(단축어), Spotlight


🔹 위젯 크기 종류

크기  설명
.systemSmall 작은 정사각형
.systemMedium 작은 직사각형
.systemLarge 큰 직사각형
.acessoryInline 잠금화면 글자 스타일 (iOS 16+)
.accessoryCircular 원형 잠금화면 위젯
.accessoryRectangular 잠금화면 사각형 위젯

 


🔹 화면에 위젯 띄우는 방법


- 화면을 꾹 눌러 홈 화면 편집 화면에서 위젯 추가를 통해 원하는 위젯을 추가할 수 있음

- 원하는 어플을 꾹 눌러 나오는 화면 중 원하는 위젯을 선택하여 추가할 수 있음


 

Comments