Swift 예제: iOS 앱에 위젯 추가 및 연동

전체 코드

 

개발 환경

  • Xcode 15.4, Swift 5.9
  • iOS App + Widget Extension
  • SwiftUI + UIKit Representable

 

목적

  • 위젯 개발 기본 학습
  • Deep Link를 이용한 위젯 -> 앱 간 데이터 전달
  • App Groups 기능을 이용한 아이폰 메인 앱과 위젯간 데이터 연동
    • 파일 데이터 연동
    • 코어 데이터 연동
  • 비동기 네트워크 데이터 가져오기 및 이미지 캐시 사용

 

참고 글

 

동작 내용

메인 위젯 (DynamicWidget1)
  • InstantPoca(가제): 자주 보고 싶은 사진 또는 비디오를 등록하면 위젯에서 클릭해서 빠르게 열 수 있는 앱입니다.
  • 자주 보고 싶은 사진 또는 비디오를 파일 브라우저 또는 사진 라이브러리로부터 추가할 수 있습니다.
  • 추가하면 실시간으로 위젯에도 해당 사진/비디오의 섬네일 버튼이 뜨고 누르면 바로 사진/비디오를 볼 수 있습니다.

 

학습용 위젯 (StaticWidget1)
  • 인터넷에서 비동기 데이터를 받아와 표시하고 사진도 표시합니다.
  • Deep Link를 이용해 위젯의 데이터를 메인 앱으로 넘기는 방법을 배웠습니다.

 

주요 과정 정리


🚧 이 글은 작성중입니다.

빠른 시일 내에 포스트 작성을 완료하겠습니다.


 

학습용 위젯
  1. iOS 15.0 이상에서 호환되도록 설정하기 (참고)
  2. 위젯의 타임라인 갱신 간격 설정하기
  3. 위젯의 데이터를 메인 앱으로 넘기기
  4. 비동기로 네트워크에서 이미지를 가져온 뒤 캐시로 표시
    • 위젯에서 바로 받아올 수 없고 이미지 캐시를 이용해야 함

 

메인 위젯
  1. 메인 앱 만들기
    1. 사진/비디오 업로드(파일 보관함, 사진 라이브러리로부터)
    2. 미리보기 표시
    3. Core Data에 업로드
    4. 작은 크기의 섬네일 파일 만들기: 파일 크기가 커지는 경우 위젯에서 이미지를 불러오지 못할 수 있다. 기본 제공하는 QuickLookThumnail을 이용
  2. 위젯 만들기
    1. 위젯 UI 그리기
    2. 메인 앱과 연동: App Groups를 사용해서 섬네일 및 데이터 엔티티 연동
    3. 앱의 특정 부분(업로드)에서 위젯을 실시간으로 고칠 수 있도록 함