1. 메인 앱 타겟의 Signing & Capabilities로 이동하여 App Groups 기능을 추가합니다.

 

2. + 버튼을 클릭하여 새 그룹을 추가하거나 이전에 만든 그룹을 선택하세요.

3. 위젯에 대해서도 1번과 2번 단계를 반복하세요.

 

4. UserDefault(suiteName: _ ) 을 사용하여 앱(위젯과 앱) 간의 데이터를 교환할 수 있게 됩니다.

 - suiteName 은 App Group 에서 설정한 Container 의 이름과 반드시 같아야 합니다.

/// 현재 카테고리 저장하기
func saveCurrentCategoryToUserDefault() {
    if let sharedDefaults = UserDefaults(suiteName: Constants.appGroupIdentifier) {
        sharedDefaults.set(currentCategory.rawValue, forKey: Constants.currentCategoryKey)
        sharedDefaults.synchronize()
        WidgetCenter.shared.reloadAllTimelines()
    }
}

 

다음은 위젯에서 저장한 데이터를 불러오는 코드입니다.

func fetchCurrentIndex() -> Int {
    if let sharedDefaults = UserDefaults(suiteName: Constants.appGroupIdentifier),
       let category = sharedDefaults.string(forKey: Constants.currentCategoryKey) {
        return sharedDefaults.integer(forKey: category)
    } else {
        return 0
    }
}
ytw_developer