티스토리 뷰
앱에서 Widget이나 NotificationCenter 등 앱 외에 번들을 추가하게 되면 메인 앱에 있는 데이터를 필요로 할때가 있습니다.
App 과 extension으로 추가한 번들간에 데이터 공유 방법을 설명하겠습니다.

앱 프로세스와 extension process는 별도의 프로세스로 동작하기 때문에 두 프로세스가 공유하는 컨테이너가 있어야만 데이터를 공유할수 있습니다.
공유하는 방법(UserDefaluts, CoreData, KeyChain, realm etc)은 여러가지 있지만 UserDefaluts를 이용해 공유하는 방법을 설명해보겠습니다.

App > 우측 상단 + > App Groups 추가


* 등록 안되고 프로비저닝 오류 뜰 시




UserDefaults.standard.set("value", forKey: "key")
기존에 이런식으로 UserDefaults 값을 사용하고 있는데
standard로 이용시에 앱에서만 사용되고 extension된 파일에서는 공유가 안되는 문제가 있습니다.
데이터를 공유하기위해 UserDefaults(suiteName: String?) 를 이용해서 데이터를 공유할 예정입니다.
extension UserDefaults {
static var shared: UserDefaults {
let groupIdentifier = "group.com.testApp.AppSharedTest"
return UserDefaults(suiteName: groupIdentifier)!
}
}
편의성을 위해 선언해놓은 그룹 identifier를 이용해 싱글톤 객체를 생성합니다.
UserDefaults.shared.set("value", forKey: "key")
의 형식으로 extension과 앱에서 사용하면 됩니다.UserDefaults.standard 와 UserDefaults.shared의 저장 영역은 서로 다르므로 공유가 되지않습니다.
UserDefaults.standard는 앱 컨테이너, 익스텐션 컨테이너에서 독립적으로 사용되고
App groups 를 이용해 묶어놓은 번들은 UserDefaults.shared 를 이용해 서로 공유한다고 보면 될것 같습니다.
참고 자료
https://eunjin3786.tistory.com/213