안녕하세요. iOSangBong입니다.
오늘은 WidgetKit에 대해서 알아보겠습니다.
원래 프로젝트를 진행하기 위해 개인적으로 공부를 했었는데요...
회사 내부 사정으로 인해 일정이 변경이 되었습니다..
나중에 안쓰게 될지도 모르겠지만
기록은 남겨놓고 다시 하게된다면 보기 위해서 남기려고 합니다.
#. 공식문서
일단 공식문서를 한번 볼까요?
https://developer.apple.com/documentation/widgetkit
WidgetKit | Apple Developer Documentation
Extend the reach of your app by creating widgets, watch complications, and Live Activities.
developer.apple.com
생각보다 공식문서에 자세히 나와 있어서 참고하시면 좋을듯 합니다.
이제 공식문서를 참고해서 한번 잘 따라해보죠~!
1. 앱에 Target 추가
Xcode 상단의 File -> New -> Target을 누르면
아래와 같이 템플릿을 선택할 수 있는 화면이 나타나게 됩니다.
여기서 우리는 Widget Extension을 눌러주면 됩니다.
눌러주게 되면 아래와 같은 화면이 뜨게 되는데
여기서 Live Activity와 Configuration Intent는 무엇이냐면
일단 Live Activity는
이런식으로 스포츠 경기의 실시간 스코어나 배민의 음식 배달 현황 같이
실시간 데이터를 제공해주는 것이고
Configuration Intent는
이런식으로 사용자가 위젯편집을 이용해서 사용자 맞춤화를 할 수 있는 위젯입니다.
일단 저희는 둘다 사용하지 않을것이기 때문에
체크하지 않고 넘어가도록 하겠습니다.
그러면 이렇게 scheme를 활성화 해줄거냐고 얼럿이 나타나면
활성화 해주세요~!
그러면 이렇게 Widget이 잘뜨게 됩니다.
2. 위젯 세부사항 추가
처음에 생성하게 되면 BongSampleWidgetBundle과 BongSampleWidget이 생기게 되는데
BongSampleWidget을 들어가게되면 위와 같이 생성된 부분이 있는데 하나씩 뜯어 보겠습니다.
StaticConfiguration을 위젯의 구성이 변하지 않는 것으로
아까 알아본 Live Activity와 Configuration Intent를 체크 했다면
이곳에 ActivityConfiguration 이나 IntentConfiguration가
나타났을 겁니다.
하지만 저희는 변하지 않는 StaticConfiguration를 사용하겠습니다.
다시 본론으로 들어가보면
Kind는 위젯을 식별하는 문자열,
Provider는 위젯이 렌더링할 시기를 알려주는 타임라인을 준수하고 생성하는 개체 입니다.
마지막으로 Content는 SwiftUI를 호출하여 렌더링하게 됩니다.
3. Provider 알아보기
위젯이 렌더링할 시기를 알려주는 타임라인을 준수하고 생성하는 개체인
Provider는 크게 3가지 함수를 가지고 있습니다.
1. placeholder: 말그대로 데이터를 불러와서 View를 만들어주기 전 플레이스 홀더입니다.
2. getSnapshot: 위젯 갤러리에서 위젯을 고를 때 보이는 샘플데이터를 나타내는 화면입니다.
3. getTimeLine: 홈화면에 있는 위젯을 언제 업데이트 시킬것인지 구현하는 부분입니다.
일단 이정도로 이번글은 소개하고 다음에 더 자세히 포스팅을 해보겠습니다.
4. TimelineEntry 및 View
SimpleEntry 부분은 TimelineEntry를 준수하는 구조체로
Model 역할을 하는 부분입니다.
위 Provider에서 자주사용되고 있습니다.
BongSampleWidgetEntryView에서는 위젯에 나타낼 View를 만들어 주는 곳인데요.
위젯의 크기별로 분기처리하여 다른 View를 보여줄 수도 있습니다.
Widget에 포스팅을 하려고 했는데 시간도 오래걸리고 분량도 생각보다 길어지네요..
다음 편에 좀더 세부적인 설명으로 돌아오겠습니다.
다들 즐코딩하세요. 그럼 이만~