SwiftUI) WidgetKit을 사용해서 Widget을 만들기(4) - 앱에서 위젯으로 데이터 보내기 app Group

2023. 8. 28. 15:11·앱/SwiftUI

앱에서 위젯으로 데이터를 보내줘야할 경우가 당연하게 생긴다. (그냥 하드코딩 하고싶지는 않자나?)

다음과 같은 방법을 통해서 데이터를 보내줄수 있다.

1. App Group 추가해주기

우리의 메인 앱의 Target으로 가게 되면 거기에서

Signing & Capabilityies에서 all 왼쪽에 있는 + Capability를 누르면

Untitled.pngUntitled.png

appGroups를 추가할수 있다.

해당 방법을 통해서 위젯과 앱 둘다 appgroups를 추가 하고 동일한 groupId로 설정해준다.

app Groups란?

Untitled.png

동일한 팀이 개발한 앱 사이의 공유 컨테이너를 액세스 가능하도록 하는 그룹을 생성하는것이다.

이를 통해 프로세스간의 통신을 할수 있도록 한다.

스크린샷_2023-08-27_오후_11.17.04.png

$(TeamIdentifierPrefix).com.example.mygroup 

를 사용해서 자동으로 ID를 확인하고 넣어줄수 있다. 뒤에 group은 자동으로 넣도록.

보통 그룹을 생성할때는

group.com.

과 같은 방법으로 만들어주는거를 추천한다.

2. UserDefaults를 공유 설정

Untitled.png

기존의 standard로 만들어진 UserDefaults를 사용하는것이 아닌. 새로이 suiteName으로 init한다.

suteName으로 init하는 이유는 특정 데이터베이스로 접근하기 위한 것

extension UserDefaults {     static var shared: UserDefaults {         let appGroupId = "group.clocks"         return UserDefaults(suiteName: appGroupId)!     } } 

이렇게 만들어주자!

💡 중요한점은 appGroupid 가 위에서 만들었던 appGroupIdentifier와 동일하도록 한다.

3. 공유된 UserDefaults에 정보 저장하기

공유된 UserDefaults를 사용하기 위해서는 기존의 UserDefaults.standard가 아닌 아까 만든 suiteName으로 생성된 userdefaults를 사용해야한다.

하지만 SwiftUI에서는 @AppStoreage 프로퍼티 래퍼를 사용해서 UserDefaults를 사용하는데 어떻게 해야할까?

답은 간단하다.

기존의 코드에서 store라는 파라미터를 통해서 명시적으로 어느 userDefault에 저장할지를 알려주면된다.

var currentSelectedGlobalTime = "Africa/Algiers" UserDefaults.shared.set(currentSeletedGlobalTime, forKey: "timezone") 

4. 공유된 정보 가져오기

위젯에서 이제 명시적으로 불러오기만 하면 된다.

옵셔널 처리는 거지같이 햇습니다.

UserDefaults.shared.string("globalTimeID") ??  "none" 

샘플코드

Untitled.pngUntitled.pngUntitled.png

굉장히 만족스럽게 잘 나온다.

반응형

'앱 > SwiftUI' 카테고리의 다른 글

SwiftUI) WidgetKit을 사용해서 Widget을 만들기(3) - Provider  (0) 2023.08.28
SwiftUI) WidgetKit을 사용해서 Widget을 만들기(3) - EntryView  (0) 2023.08.28
SwiftUI) WidgetKit을 사용해서 Widget을 만들기(4) - 앱의 데이터 변화를 위젯에서 감지하기  (0) 2023.08.28
Swift) Convenience init, Designated init을 사용해서 초기화하기  (0) 2023.08.28
SpriteKit) SpriteKit과 scene에 대해서 [SwiftUI]  (0) 2023.08.28
'앱/SwiftUI' 카테고리의 다른 글
  • SwiftUI) WidgetKit을 사용해서 Widget을 만들기(3) - Provider
  • SwiftUI) WidgetKit을 사용해서 Widget을 만들기(3) - EntryView
  • SwiftUI) WidgetKit을 사용해서 Widget을 만들기(4) - 앱의 데이터 변화를 위젯에서 감지하기
  • Swift) Convenience init, Designated init을 사용해서 초기화하기
진ddang
진ddang
안녕하세요 진땅의 개발자 블로그 입니다. 피드백은 환영입니다. 깃헙 : https://github.com/it794613
    반응형
  • 진ddang
    맛동산이
    진ddang
  • 전체
    오늘
    어제
    • 분류 전체보기 (199)
      • 일기 그리고 목표 (1)
      • 웹 (20)
        • 리액트 (19)
      • 앱 (115)
        • Swift 문법 (15)
        • Swift (65)
        • SwiftUI (32)
        • 리액트 네이티브 (3)
      • CS (30)
        • 컴퓨터그래픽스 (8)
        • 운영체제 (6)
        • 네트워크 (16)
      • 알고리즘 (13)
        • 백준 (12)
        • 프로그래머스 (1)
      • 대외활동 (7)
        • ict한이음(2022.04) (2)
        • 멋쟁이 사자처럼 (5)
        • Apple Developer Academy (0)
      • 다양한 내용들 (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    웹
    widget
    composable architecture
    c++
    멋사
    멋쟁이사자처럼
    Swift
    SwiftUI
    ReactorKit
    백준
    문법
    대외활동
    스유
    widgetkit
    리액트
    후기
    uikit
    알고리즘
    TCA
    컴퓨터그래픽스
    운영체제
    cs
    swift concurrency
    위젯킷
    영남대
    Protocol
    네트워크
    스위프트
    spritekit
    dispatchqueue
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
진ddang
SwiftUI) WidgetKit을 사용해서 Widget을 만들기(4) - 앱에서 위젯으로 데이터 보내기 app Group
상단으로

티스토리툴바