WidgetKit
- iOS8 ~ iOS13 Today Extension 을 통해 위젯 지원
- iOS14부터 WidgetKit 도입 > Widget Extension을 통해 위젯 개발 가능
- SwiftUI로만 개발 가능 (UIViewRepresentable로도 개발 불가능)
- iOS14 소개 당시, 홈 화면과 오늘 보기 두 군데만 지원
- iOS16부터 잠금 화면 지원
- iOS17부터 Mac Desktop, iPad Lock Screen, Watch Smart Stack, StandBy 까지 네 군데 추가 지원
Widget 구성요소
1. Widget Extension 추가 ( Activate “WidgetExtensionˮ Scheme? > Activate 로 설정)
- Include Live Activity(iOS16 도입): 앱의 실시간 정보를 다이나믹 아일랜드에 표시하는 기능
- Include Configuration App Intent: 활성화 시, 사용자가 위젯 편집이 가능하도록 하는 기능
저는 간단한 위젯을 구현하는 것이 목표였기 때문에 두 항목 다 체크하지 않았습니다!
2. Provider, Entry, EntryView, Widget
Provider
- TimelineProvider배열을 통해 위젯을 업데이트 할 시기 전달
- 업데이트 할 시기는 사용자가 설정한 시간에 해당
- 업데이트 시기를 정해놓는 이유
애플이 전파하길...
사용자가 하루에 90번 정도 홈 화면을 본다고 합니다.
그런데 우리가 평소 사용할 때만 생각해도 홈 화면에 머무는 시간이 그리 길지는 않죠?
짧은 시간내에 위젯을 보고 스쳐 지나갈텐데 위젯의 로딩 시간이 길어진다면..? 굳이 위젯을 사용하지 않을 것 같습니다.
이를 해결하기 위해 미리 위젯뷰를 그리는 작업을 진행 시키고 시간에 맞춰 뷰를 업데이트 하는 것이죠!
- TimelineProvider Protocol 구성성분
1. placeholder
- 이름 자체에서 알 수 있듯이, placeholder > 최초 렌더링 시 사용
- 잠금화면에서 민감한 정보를 숨기도록 선택한 경우, 잠금 해제 전까지 위젯을 숨길 placeholder로 숨김
2. getSnapshot
- 위젯 추가 시, 위젯 갤러리에서 미리보기 화면
- 데이터를 네트워크 통신을 통해 가져오거나 계산이 오래 걸리는 경우를 대비해 mock 데이터를 이용해 위젯에 그림
3. getTimeline
- 홈 화면에 있는 위젯을 언제 업데이트 시킬 것인지 구현
- TimeReloadPolicy > .atEnd, .after, .never
Entry
- 위젯에 필요한 데이터 구성
- TimelineEntry를 통해 추후 위젯이 다시 그려질 시간도 함께 포함
- date: 위젯이 다시 그려질 시간
- relevance: score에 따라 어떤 위젯을 우선적으로 보여줄 지 결정 > score가 높으면 최상단으로 설정
EntryView
- 제공받은 Entry를 기반으로 위젯에 나타날 뷰를 그리는 기능
Widget
- 최종적으로 WidgetConfiguration 구성
- kind: 우젯의 고유한 문자열
- body: 최종적으로 반환 EntryView를 그려내고 위젯의 이름, 크기, 설명 등을 추가 설정
- supportedFamiles를 통해 제공할 위젯 크기 설정
'네트워크' 카테고리의 다른 글
대칭키 & 비대칭키 (0) | 2024.10.30 |
---|---|
[iOS] About Notification & Delegation (0) | 2024.10.26 |
[iOS] About JWT(Jason Web Token) (0) | 2024.10.17 |
[iOS] About Cookie/Session (0) | 2024.10.13 |
[iOS] About CoreData (0) | 2024.10.13 |