Swift 예제: iOS 앱에 위젯 추가 및 연동
전체 코드
개발 환경
- Xcode 15.4, Swift 5.9
- iOS App + Widget Extension
- SwiftUI + UIKit Representable
목적
- 위젯 개발 기본 학습
- Deep Link를 이용한 위젯 -> 앱 간 데이터 전달
- App Groups 기능을 이용한 아이폰 메인 앱과 위젯간 데이터 연동
- 파일 데이터 연동
- 코어 데이터 연동
- 비동기 네트워크 데이터 가져오기 및 이미지 캐시 사용
참고 글
- https://stackoverflow.com/questions/65556274/ios-add-button-to-widget-extension/66006151#66006151
- [iOS – SwiftUI] 1. 위젯 Widget 사용 방법 개념 (WidgetKit, WidgetFamily)
- SwiftUI: Xcode 15 버전 이상에서 iOS 하위 버전 (15.0 이상) 호환되는 위젯 생성
- 비디오 반복 관련: https://stackoverflow.com/a/40396824
동작 내용
메인 위젯 (DynamicWidget1)
- InstantPoca(가제): 자주 보고 싶은 사진 또는 비디오를 등록하면 위젯에서 클릭해서 빠르게 열 수 있는 앱입니다.
- 자주 보고 싶은 사진 또는 비디오를 파일 브라우저 또는 사진 라이브러리로부터 추가할 수 있습니다.
- 추가하면 실시간으로 위젯에도 해당 사진/비디오의 섬네일 버튼이 뜨고 누르면 바로 사진/비디오를 볼 수 있습니다.
학습용 위젯 (StaticWidget1)
- 인터넷에서 비동기 데이터를 받아와 표시하고 사진도 표시합니다.
- Deep Link를 이용해 위젯의 데이터를 메인 앱으로 넘기는 방법을 배웠습니다.
주요 과정 정리
🚧 이 글은 작성중입니다.
빠른 시일 내에 포스트 작성을 완료하겠습니다.
학습용 위젯
- iOS 15.0 이상에서 호환되도록 설정하기 (참고)
- 위젯의 타임라인 갱신 간격 설정하기
- 위젯의 데이터를 메인 앱으로 넘기기
- 비동기로 네트워크에서 이미지를 가져온 뒤 캐시로 표시
- 위젯에서 바로 받아올 수 없고 이미지 캐시를 이용해야 함
메인 위젯
- 메인 앱 만들기
- 사진/비디오 업로드(파일 보관함, 사진 라이브러리로부터)
- 미리보기 표시
- Core Data에 업로드
- 작은 크기의 섬네일 파일 만들기: 파일 크기가 커지는 경우 위젯에서 이미지를 불러오지 못할 수 있다. 기본 제공하는
QuickLookThumnail
을 이용
- 위젯 만들기
- 위젯 UI 그리기
- 메인 앱과 연동:
App Groups
를 사용해서 섬네일 및 데이터 엔티티 연동 - 앱의 특정 부분(업로드)에서 위젯을 실시간으로 고칠 수 있도록 함
0개의 댓글