iyOmSd/Title: Swift

[Swift] Realm 데이터 공유 (Widget과 Main앱 데이터 공유) AppGroup

냄수 2022. 2. 11. 19:50
반응형

위젯앱을 개발하면서

Realm을 사용하여 데이터를 꺼내오려고 하는데 동작이 잘 되지않더라구요!

그래서 좀 삽질을 한 내용을 기록해볼까해요

 

현재 메인앱에서 데이터를 저장하고 불러오는게 가능해요

메인앱에서 사용하는 데이터를 위젯으로 불러와서 보여주려고 하는 방법입니다!

 

 

분명 Realm연결도 잘되고 잘 불러오는 것 같은데 

메인앱에는 데이터가 있는데

위젯에는 자꾸 없다고 뜨더라구요

.

.

.

이 문제의 원인은

Realm의 파일 위치가 위젯과 메인앱은 달라요

당연히 메인에 있는 데이터를 불러올 수 없었다는...ㅠ

// 위젯
🟣realm위치: file:///var/mobile/Containers/Data/PluginKitPlugin/5D8DF5A8-5857-4FBA-8341-80147A2781A7/Documents/todo.realm
 
 // 메인앱
🟣realm위치: file:///var/mobile/Containers/Data/Application/A0A0BCB8-1720-4B4F-A1EE-110AA8BDAC7F/Documents/todo.realm

 

위젯과 메인앱의 데이터 교환은 일반적인 방법으로는 할 수 없고

AppGroup을 통해서 할 수 있어요

 

타겟쪽에서

 

Signing & Capabilities 쪽에 + 를 눌러서

App Groups를 추가하고

사용할 id를 설정해주세요!

 

메인앱과 위젯 둘다 추가해줘야해요

 

 

그리고 이제 realm을 생성하는 path를 다르게 설정해줘야해요

let path = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: appGroupID)?.appendingPathComponent("\(fileName).realm")
let config = Realm.Configuration(fileURL: path)
realm = try? Realm(configuration: config)

 

 

file:///private/var/mobile/Containers/Shared/AppGroup/3FB724A2-113B-4E9C-844B-A9CEE4E19BA5/todo.realm

위치가 이와같은 형식으로 변경되요

 

그러면 정상적으로 메인앱과 위젯데이터가 공유되는걸 확인 할 수 있어요!

 

반응형