본문으로 건너뛰기

App - Extension 간 데이터 공유하기

App Groups Capability 추가 후 UserDefault를 통해 App과 Extension간 데이터 공유가 가능하다.

  1. 각 Target에 App Groups Capability를 추가한다.
  2. 값을 공유하고 싶은 각각의 Target에 UserDefaults를 생성한다.
  3. 각 Target에서 값을 변경하면 다른 Target에서 값이 변한다.
// MainAPP/store.swift

import SwiftUI

class MyStore: ObservableObject {
@AppStorage("KEY_NAME", store: UserDefaults(suiteName: "APP_GROUPS_NAME"))
var myCount = 0
}

struct MyView: View {
@StateObject myStore = MyStore()

var body: some View {
Button {
print(myStore.myCount) // 1
} label: {
Text("버튼")
}
}
}

// Extension/extension.swift

import SwiftUI

class MyExtension: ExtensionProtocol {
@AppStorage("KEY_NAME", store: UserDefaults(suiteName: "APP_GROUPS_NAME"))
var myCount = 0

// MARK: AppGroups에 등록한 값을 증가시키는 함수
func updateMyCount() {
myCount += 1
}

// MARK: 특정 이벤트를 감지하여 자동으로 호출되는 함수
override func handle(completionHandler: @escaping () -> Void) {
updateMyCount()
completionHandler()
}
}
앱 프로세스 구조

NOTICE

  • App Groups 를 사용하기 위해선 개발자 계정이 필요하다.
  • 각 Target은 독립된 하나의 프로덕트다.

Link