본문 바로가기
네트워크

[iOS] About WidgetKit - 1

by dsungc 2024. 10. 24.

WidgetKit

Widget - https://developer.apple.com/documentation/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배열을 통해 위젯을 업데이트 할 시기 전달

- 업데이트 할 시기는 사용자가 설정한 시간에 해당

Widget 동작방식

- 업데이트 시기를 정해놓는 이유

애플이 전파하길...

사용자가 하루에 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