본문 바로가기

iOS 앱 개발자 프로젝트

[iOS] Widget - IntentConfiguration (1)

어제 (6월 17일) 우리 프로젝트의 1차 mvp가 출시되었습니다.

속으론 엄청나게 기쁘지만 기쁨도 잠시-

남은 기간 추가적으로 해야할 것들에 집중합니다.

 

아래의 WWDC23을 참고하면 위젯에서 할 수 있는 많은 것들을 참고할 수 있습니다. 

 

Bring widgets to life - WWDC23 - Videos - Apple Developer

Learn how to make animated and interactive widgets for your apps and games. We'll show you how to tweak animations for entry transitions...

developer.apple.com

 


 

구현하고자 하는 위젯은 iOS 16 이상에서만 사용 가능하다. 하지만,

iOS 14에서 추가했던 Widget Extension의 기본적인 코드 구조를 이해하고 넘어가야 한다. 

 

먼저 Widget의 구성(configuration)을 알아보자.

 

Widget (Configuration)
Provider  +  View content 

 

 

 

 

1. Provider (snapshot + Timeline entry)

  • 위젯의 화면 '갱신'을 담당 → Timeline entry를 포함하여 Timeline을 통해 위젯의 화면을 갱신하도록 요청한다.
  • Timeline은 TimeLineEntry로 구성된 배열과 갱신에 대한 policy를 parameter로 가진다.
  • 위의 policy는 .atEnd / never / after(_ date: Date)의 3가지가 존재한다.
  • snapshot은 위젯의 현재 상태를 나타내는 즉각적인 이미지 [A single immediate snapshot, representing the widget’s current state] 라는 정의만 일단 이해하자.

 

2. View conent

  • 위젯의 화면 담당

 

 

WidgetKit

 

  • SwiftUI용 Widget API 및 WidgetKit 프레임워크를 사용
  • 위젯을 빌드하고 iOS, iPadOS 및 macOS 어디에서나 사용할 수 있다.

 

App Extension Programming Guide

 

 

  • widget은 app extension을 사용해서 만든다.
  •  App Extension Programming Guide 그림을 보면 알 수 있듯, app과 app extension는 각각 container가 있다.
  • →  기본적으로 데이터 공유가 안된다.
  • →  데이터를 공유하려면  shared container를 사용한다.

 

 

Widget 만들기

 

1. File → New → Target → Widget Extension 

  • Include Configuration App Intent 선택

2. (생성된 위젯 그룹에서) New File → SiriKit Intent Definition File 선택

 

 

3. 위젯에서 바로가기 메뉴를 사용자가 선택할 있게 하려면 Custom Intent Type 필요하다. Intent 파일을 선택하고 + 를 눌러서 New Intent 한다.

 

New Intent 클릭하면 아래의 화면이 뜬다.

 

 

이 디폴트 화면의 옵션 값과 이름 값을 아래와 같이 수정!

 


1) Intent를 옵션에 사용하겠다.

2) 파라미터 value를 위젯에서 수정하겠다. ← 이 부분이 우리 조가 원하는 방향

이름은 TodoList라고 짓고, 카테고리는 View로 변경, 그 외 옵션 값들도 변경

 

repository에 따른 TodoList를 보여주기 위해 parameteter로 repository 추가

 

 

이렇게 추가하면 빌드하면 돌려주면~ XCode는 TodoListIntent를 알아서 만들어준다.

→ Custom Class 쪽 빨간 화살표를 누르면 볼 수 있다.

 

 

이제 TodoList 인텐트에 repository 파라미터가 추가되었다. (코드에서 이 파라미터를 참조할 수 있다.)