본문 바로가기

iOS/스터디

[WWDC Video Study] Widgets Code-along

Link

Widgets Code-along, part 1: The adventure begins - WWDC 2020 - Videos - Apple Developer

Widgets Code-along, part 2: Alternate timelines - WWDC 2020 - Videos - Apple Developer

Widgets Code-along, part 3: Advancing timelines - WWDC 2020 - Videos - Apple Developer

 

실습 내용 있는 깃헙!

mini0212/SwiftUIStudy

Part 1

Widget이란?

SwiftUI로 작성되는 것으로 iOS, iPadOS, MacOS에서 네이티브 뷰를 생성하는 것과 동일한 선언 코드이며, 시간이 지남에 따라 업데이트 된다.

예시 프로젝트

Apple Developer Documentation

Widget추가하기

File - New - Target에서 Widget Extension검색 후 추가

원하는 파일(.swift)을 타겟에 추가

 

+)

예시에는 위젯에 placeholder를 만들기 위해서

struct PlaceholderView: View {
    var body: some View {
        AvatarView(.panda)
            .isPlaceholder(true)
    }
}

위 코드를 추가해줬는데 실제 실습하면서 추가하니 .isPlaceholder(Bool) 라는 함수가 존재하지 않았다.

찾아보니 베타? 버전이라서 안된다고 하는 것 같다.

대신

.redacted(reason: .placeholder)

 이렇게 써주면 플레이스홀더로 사용할 수 있다.

 

Part 2

위젯 크기의 종류
타임라인

타임라인의 마지막에는 무슨 일이 일어날까? 더 많은 항복들을 제공하려면 어떻게 할까?

→ 타임라인 재로드 정책을 선택한다

struct TimelineReloadPolicy { 
  atEnd 
  after(date)
  never 
}
  • atEnd

    위젯이 타임라인의 마지막 항목(위에서는 5번)에 도달하게 되면 업데이트 예약을 시작하라는 메세지가 표시된다

  • after(date)

    위젯이 제공된 날짜에 업데이트 예약을 시작하도록 지시한다

    예를 들어 오후 10시로 설정해 두면 오후 10시에 업데이트

  • never

    시스템 독립적으로 위젯을 업데이트 하지 않는다.

Configuration

  • siriKit
  • InIntent - Add Configuration and Intelligence to your Widget(참고)

Deep Linking

터치 영역..?

SwiftUI link API를 통해 위젯 내에 탭 가능한 영역을 만든다.

Part 3

  • 위젯은 백그라운드 세션을 포함하여 만든 모든 URL세션에 응답하지만, delegate가 존재하지 않는다
  • 대신 위젯 구성에서 백그라운드로 호출되는 한정자가 있다

Intent추가하기

File - New - Target - Intent Extension

*Starting Point → none 으로 하기