Programming/iOS

[WidgetKit] WidgetKit에 대해 알아보자 (구성요소, protocol 등)

devssun 2021. 10. 28. 21:25
728x90
반응형

WidgetKit

WidgetKit에 대해 알아보자

참고 링크

WidgetKit의 구성요소

  • Configuration : 위젯 식별하며, 위젯의 Content를 표시하면 SwiftUI View를 정의한다.
  • Timeline Provider : 시간이 지남에 따라 위젯 View를 업데이트하는 프로세스를 주도한다.
  • SwiftUI View : WidgetKit에서 위젯을 표시하는 데 사용하는 View이다.

TimelineEntry (protocol)

  • 위젯이 언제 언제 업데이트할 수 있도록 시간을 담은 배열을 보낸다.
  • date property를 필수로 갖는다.
    • 이 date는 위젯을 렌더링할 시간이 된다.

TimeProvider (protocol) ← Provider라는 타입이 채택중

  • widget의 디스플레이를 업데이트할 시기를 WidgetKit에 알려주는 타입니다.
  • WidgetKit은 Provider에게 timeline을 요청하고 provider는 widgetkit에게 Timeline을 전달한다.

Widgetkit이 바라는 것

  • snapshot : 위젯 추가할 때 보여주는 화면

  • Timeline : 위젯을 최신 상태로 유지하기 위한 Timeline

    • ex) 샘플 프로젝트는 현재 시간 + 1시간 씩 더한 배열을 생성한다.
    • 만일 지금이 2시라면 [2시, 3시, 4시, 5시, 6시] 배열이 생성되는 것이다.

TimelineReloadPolicy (struct)

  • Timeline 마지막에는 어떤 일이 일어날까? 어떻게 해야 항목들을 더 제공할 수 있을까?
    • atEnd
      • widgetkit은 timeline의 마지막 항목이 표시될 때 업데이트 예약을 시작하도록 알려준다.
      • 업데이트가 발생하면 timeline 메서드가 다시 호출되어 항목들을 더 제공한다.
    • after
      • 제공된 날짜에 업데이트 예약을 시작하도록 widgetkit에 지시한다.
      • ex) 오후 10시로 지정하면 Timeline에 관계없이 오후 10시에 업데이트를 예약한다.
    • never
      • 시스템이 위젯을 독립적으로 업데이트하지 않는다.
      • widgetcenter를 사용하여 widgetkit에 새 타임라인을 요청하도록 지시할 때까지 다른 timeline을 요청하지 않는다.

WidgetKit에서 사용할 수 있는 view

  • Widget은 SwiftUI로 만들지만 사용할 수 있는 view가 제한적이다. 공식 문서에서 확인할 수 있다. (https://developer.apple.com/documentation/widgetkit/swiftui-views)
  • 사용 못하는 view - List, Button, UIViewRepresentable, NSViewRepresentable 등은 widget에서 사용할 수 없다.
  • 위젯 내에서만 상호작용을 하는 것은 불가능한 일이니 참고하자.
반응형