개발환경 : Xcode 12.0.1

1. wigetkit이란?

ios14부터 홈 화면에 widget을 넣을 수 있다. app이 가진 정보를 app을 열지 않고도 보여주고(일부) 필요할 경우 app을 실행해서 할 일 할 수 있게 해주는 정도의 기능이다.

애플 공식 가이드 글 : developer.apple.com/design/human-interface-guidelines/ios/system-capabilities/widgets

 

Widgets - System Capabilities - iOS - Human Interface Guidelines - Apple Developer

A widget elevates key content from your app and displays it where people can see it at a glance on iPhone, iPad, and Mac. Useful and delightful, widgets can also help people personalize their iPhone Home screens in unique ways. In iOS 14, iPadOS 14, and ma

developer.apple.com

2. 기존 app에 추가하기 위해서는?

Xcode > File > New > Target > WidgetKit을 선택하면 된다

3. 개발시 UI 구성은 반드시 swiftUI로 구성해야 한다.

이 때 app의 개발환경과는 별도이므로 app은 storyboard, widget은 swiftUI로 구성할 수 있다.

- swiftUI 관련 내용은 다음 블로그 포스팅을 참고 했다.

medium.com/harrythegreat/swiftui-%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC-1%ED%8E%B8-%EA%B8%B0%EB%B3%B8%EA%B5%AC%EC%A1%B0-11e7b589e6de

 

SwiftUI 튜토리얼 1편 — 기본구조

최근 SwiftUI를 공부하며 정리한 내용들을 복습하고자 블로깅하게되었습니다. Swift UI는 UIKit 위에서 빌드되는 프레임워크로 새로운 방식의 UI 인터페이스를 제공하며 선언형 방식의 구조를 가지고

medium.com

4. widgetkit에서 파일을 추가할 경우 반드시 target membership을 확인한다.

target membership을 설정해야 app의 파일과 widgetkiet의 ***homewidget.swift이외의 파일 내용을 ***homewidget.swift에서 접근할 수 있게 된다. 

target membership은 파일 선택후 file inspector(화면 우측 중앙)에서 변경 가능하다

설정하지 않았을 경우 다음과 같이 scope 에러가 나게 된다

RecordView3가 정의되어 있지만 homewidget에서 RecordView3에 접근할수 없다

5. widget은 timelineProvider가 제공하는 timelineEntry를 가지고 UI를 구성한다.

timelineprovider가 다음 entry를 제공하면 변경이 되게 된다.

5-1 timeline이 시간순으로 변경되는 중에 새로 갱신할 필요가 app에서 발생할 경우 다음과 같이 reload를 요청할 수 있다.

출처 : https://developer.apple.com/documentation/widgetkit/keeping-a-widget-up-to-date

 

Apple Developer Documentation

 

developer.apple.com

6. widget 등록 화면에서의 데이터 보여주기

다음과 같이 homewidget의 preview 데이터를 제공하면 widget 등록시 해당 데이터를 보여주고 사용자에게 어떤 위젯 형태(small, medium, large)를 선택할지 도움을 줄 수 있다.

해당 preview가 적용된 위젯 선택 화면은 다음과 같이 나오게 된다.

 

* one more thing!!

app과 widgetkit이 클래스나 파일을 공유할 때는 target membership이면 되지만 데이터를 공유하기 위해서

app group을 설정해주어야 한다.

Xcode > project 설정 > signing & capabilities > Capability 에서 app group을 설정

설정하면 다음과 같이 나온다

by 무위자연 2020. 10. 25. 07:49
| 1 |