본문 바로가기

[Widget Extension #1] 최신 데이터 갱신 본문

iOS Technologies

[Widget Extension #1] 최신 데이터 갱신

SJ_Repsect 2025. 8. 13. 17:39

악의적인 코드로부터 앱을 보호하기 위해 Apple은 거의 모든 기기의 샌드박스에 앱을 배치합니다.

각 샌드박스에는 해당 앱만 접근할 수 있는 컨테이너 디렉터리가 있습니다.

생성한 두 앱 간 또는 앱과 앱 익스텐션 간에 파일 공유하기 위해서 두 프로세스 모두에 앱 그룹을 구성해야합니다.

적절한 권한이 있는 프로세스는 앱 그룹 디렉터리의 URL을 요청하고, 해당 디렉터리의 파일에 접근할 수 있습니다.

 


앱 그룹을 생성하면 여러 프로세스가 파일을 공유할 수 있는 디스크 공유 공간이 생성됩니다.

또한 Mach IPC, POSIX 세마포어 및 공유 메모리, UNIX 도메인 소켓, 기타 IPC 메커니즘을 사용하여 프로세스 간의 추가정인 프로세스 간 통신(IPC) 이 가능합니다.

 

즉, 직접 메모리 공유는 불가하고, App Group을 통해 데이터를 교환해야 합니다.

 

+ 위젯에서는 타임라인에 네트워크 직접 호출이나 APNs Push로 위젯에 데이터를 갱신 시킬 수 도 있습니다.
네트워크 직접 호출의 경우는 예산이 한정적이기 때문에 오랜시간 동안 걸리는 작업은 제한될 수 있습니다.

 

https://developer.apple.com/documentation/widgetkit/making-network-requests-in-a-widget-extension

 

Making network requests in a widget extension | Apple Developer Documentation

Update your widget with new information you fetch with a network request.

developer.apple.com

 

 

 

그래서 어떻게 위젯에 데이터를 갱신 시킬수 있는가 ? 


위젯은 기본적으로 새로고침 하면 네트워킹 및 처리로 인해 시스템 리소스가 소모되고 배터리가 소모된다.

이러한 성능 저하를 줄이고 배터리 수명을 유지하려면 업데이트 요청 빈도와 횟수를 제한해야한다.

 

일반적으로 24시간 단위로 40회~70회 정도의 Refresh 과정이 있다. 이는 15분~60분 간격으로 새로고침되고, 사실 사용자의 사용패턴에 따라 변동한다.

 

콘텐츠를 최신 상태로 유지할 수 있는 몇 가지 방법이다.

 

1. 정기적이고 예측 가능한 이벤트에 맞춰 위젯을 업데이트하는 타임라인을 만드는 방법.

2. 앱에서 데이터가 변경되면 위젯의 타임라인을 다시 로드하도록 설정하는 방법

- WidgetCenter.shared.reloadTimelines(kind:)  호출

3. WidgetKit 푸쉬 알림을 사용하는 방법

https://developer.apple.com/documentation/widgetkit/updating-widgets-with-widgetkit-push-notifications?changes=_3

 

Updating widgets with WidgetKit push notifications | Apple Developer Documentation

Use WidgetKit to receive push tokens and reload your widgets with remote push notifications.

developer.apple.com

 

 

내가 사용하는 사용 패턴

1. App Groups로 공유 저장소를 만든다.

2. 작은 값들은 UserDefaults(suiteName:) 으로 , 구조화/대용량 파일들은 SwiftData/Core Data 사용

3. 민감한 정보는 Keychain Access Group으로 공유

4. 보여줘야할 데이터가 예측 가능한 시간이라면 Timeline으로 리프레시

5. 앱에서 데이터를 갱신할 경우 WidgetCenter.shared.reloadTimelines(kind:) 호출

 

최대한 서버에 부하를 줄 수있는 네트워크 요청을 제거하기 위해 앱을 실행 시 데이터 가져오기 (이때 데이터가 크다면 ETag를 활용하여 해시값으로 데이터 최신여부 파악)

 

'iOS Technologies' 카테고리의 다른 글

iOS App SandBox  (0) 2025.11.08
Workspace에서 Embed 전략  (0) 2025.10.20
xcodebuild로 프로젝트 빌드 시간 측정하는 방법  (0) 2025.10.17
App Extension #1  (4) 2025.06.05
UIResponder & UIEvent & UITouch  (0) 2025.05.24
Comments