티스토리 뷰

앱에서 Widget이나 NotificationCenter 등 앱 외에 번들을 추가하게 되면 메인 앱에 있는 데이터를 필요로 할때가 있습니다.

App 과 extension으로 추가한 번들간에 데이터 공유 방법을 설명하겠습니다.

앱 프로세스와 extension process는 별도의 프로세스로 동작하기 때문에 두 프로세스가 공유하는 컨테이너가 있어야만 데이터를 공유할수 있습니다.

공유하는 방법(UserDefaluts, CoreData, KeyChain, realm etc)은 여러가지 있지만 UserDefaluts를 이용해 공유하는 방법을 설명해보겠습니다.

App Group 추가

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

그룹 Identifier 추가
정상 등록시 이렇게 표현

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

Identifiers +
App Groups 선택
설명과 식별자 입력 후 등록
Identifier 선택 > Capabilities > App Groups 선택 > Configure에서 값 선택 save > 프로비저닝 업데이트

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

https://ios-development.tistory.com/702

https://ios-development.tistory.com/169

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함