WidgetKit 전략 구상하기
위젯, 워치 컴플리케이션, 라이브 액티비티 구현 계획을 세울 때, 그 특징과 작업, 관련 프레임워크 및 제약 사항을 살펴보자.
개요
WidgetKit을 사용하여 위젯, 워치 컴플리케이션, Live Activities를 구축하세요. 이러한 기능을 통해, 플랫폼과 기기들을 아우르는 생태계를 조성하여, 앱의 범위를 확장할 수 있습니다. 위젯, 컴플리케이션, Live Activities는 WidgetKit, SwiftUI 및 App Intents를 포함한 관련 프레임워크 세트를 사용하여, 제한적이지만 효과적이고 눈길을 사로잡는 공간을 차지합니다. 이들 간의 디자인, 기능 및 코드는 유사하기 때문에, 코드와 디자인 구성 요소를 재사용하기에 완벽한 대상입니다.
앱 개발 과정에서 비용이 많이 드는 변경을 방지하려면, 디자인을 제작하고 코드를 작성하기 전에 WidgetKit 채택을 계획하세요. 계획을 세울 때, 고려하세요:
- 각 플랫폼별 기능 가용성
- WidgetKit 외에 사용할 프레임워크
- 위젯, 워치 컴플리케이션 및 Live Activities에 필요한 외형과 지원 가능한 크기
- 콘텐츠 업데이트를 지원하는 기술
- 애니메이션
- 심층 링크, 버튼 및 토글을 통한 앱과의 상호 작용
- 위젯 및 워치 컴플리케이션의 구성 옵션
- Smart Stacks 내에서의 가시성
- 기능적 제약사항
다양한 크기와 플랫폼을 넘나들며 직관적인 경험 제공
위젯은 잠금 화면의 원형 액세서리 위젯 및 Apple Watch의 컴플리케이션부터, iPad와 Mac의 초대형 위젯까지 많고 다양한 크기로 제공됩니다. 지원하려는 크기와 컴플리케이션을 선택하는건 여러분에게 달렸지만, 가능한 한 많은 크기와 컴플리케이션을 지원하는 것을 고려하세요.
이 표는 각 플랫폼별로 사용할 수 있는 기능을 보여줍니다:
위젯 크기 또는 기술 | iPhone | iPad | Apple Watch | Mac |
소형 시스템 위젯 | 홈 화면, 오늘 보기 및 스탠바이 | 홈 화면, 오늘 보기 및 잠금 화면 | 지원 안 함 | 지원 |
중형 시스템 위젯 | 홈 화면 및 오늘 보기 | 홈 화면 및 오늘 보기 | 지원 안 함 | 지원 |
대형 시스템 위젯 | 홈 화면 및 오늘 보기 | 홈 화면 및 오늘 보기 | 지원 안 함 | 지원 |
초대형 시스템 위젯 | 지원 안 함 | 홈 화면 및 오늘 보기 | 지원 안 함 | 지원 |
원형 액세서리 위젯 | 잠금 화면 | 잠금 화면 | 워치 컴플리케이션 및 스마트 스택 | 지원 안 함 |
모서리 액세서리 위젯 | 지원 안 함 | 지원 안 함 | 워치 컴플리케이션 | 지원 안 함 |
직사각형 액세서리 위젯 | 잠금 화면 | 잠금 화면 | 워치 컴플리케이션 및 스마트 스택 | 지원 안 함 |
인라인 액세서리 위젯 | 잠금 화면 | 잠금 화면 | 워치 컴플리케이션 | 지원 안 함 |
Live Activities | 지원 | 지원 | 지원 안 함 | 지원 안 함 |
Live Activities는 iPhone과 iPad에서 사용할 수 있으며 잠금 화면에 표시됩니다. Dynamic Island를 지원하는 기기에서는, Dynamic Island에서 Live Activities가 컴팩트하고, 미니멀하고 또 확장된 형태로 나타납니다. Dynamic Island를 지원하지 않는 기기에서는, Live Activities가 홈 화면에 잠시동안 표시되고, 여러분이 사용자에게 업데이트에 대한 알림을 선택한 경우 다른 앱의 오버레이로 사용자에게 데이터 업데이트를 알릴 수 있습니다.
중요
여러분은 미니멀하고 컴팩트한 화면 표시부터 더 크고 확장된 잠금 화면 표시까지, 모든 Live Activity 표시를 지원해야 합니다.
WidgetKit 채택에 반복적으로 접근합니다. 예를 들어, Creating a widget extension에서 설명한대로 iPhone, iPad 및 Mac의 WidgetKit 생태계에서 콘텐츠를 폭넓게 노출될 수 있는 설정 불가능한 WidgetFamily.systemSmall 위젯부터 시작하세요. 이후, 구성, 추가 위젯 크기, 그리고 —여러분의 앱의 기능에 따라— Live Activities 또는 워치 컴플리케이션을 포함한 watchOS 앱 지원을 추가합니다.
추가 프레임 활용
위젯, 워치 컴플리케이션 및 Live Activities는 Xcode 프로젝트에 추가하는 위젯 확장을 사용합니다. WidgetKit의 역할은 기능을 활성화하기 위한 인프라와 구성을 제공하는 것입니다. 여러분이 지원하려는 기능과 플랫폼에 따라, 여러분은 WidgetKit을 다른 프레임워크와 조합하여 사용합니다:
- 각 기능의 사용자 인터페이스를 만들기 위해, SwiftUI를 사용합니다.
- 위젯과 Live Activities에 상호작용을 추가하기 위해, SwiftUI와 App Intents 프레임워크를 사용합니다.
- 워치 컴플리케이션을 제공하려면, watchOS 앱을 만드세요.
- 위젯을 구성 가능하게 만들고, 사전 구성된 워치 컴플리케이션을 제공하고, Smart Stacks와 Widget Suggestions 같은 기능을 활성화하려면, App Intents와 SiriKit 인텐트를 사용합니다.
- Live Activities를 시작, 업데이트 및 종료하려면 ActivityKit을 사용합니다.
다양한 모습 지원
컨텍스트에 따라, 위젯 또는 Live Activity는 해당 컨텍스트에 가장 적합하도록 모습을 변경합니다. 예를 들어, WidgetFamily.systemSmall 위젯은 다음과 같이 나타납니다:
- iPhone과 iPad의 홈 화면에서, fullColor 모습을 띠며 Light 또는 Dark Mode로 표시됩니다.
- iPad와 iPhone의 잠금화면에서, 생동감있고, 흐릿한 외관을 제공하는 vibrant 모습을 띱니다. StandBy와 StandBy in Night Mode의 iPhone 잠금화면에서, 위젯은 vibrant 모습을 사용해서 크기를 확대하여 렌더링합니다.
- Mac에서, Light와 Dark Mode의 Notification Center에서 fullColor 모습을 띱니다. 데스크톱에서, 위젯은 vibrant 모습으로 뒤로 물러난 듯 나타나고 사용자가 위젯과 상호작용하면 fullColor 모습으로 변경됩니다.
비슷하게, WidgetFamily.accessoryRectangular 위젯은 다음과 같이 나타납니다:
- iPhone과 iPad의 잠금화면에서, vibrant 모습을 띱니다.
- Apple Watch에서, 배경이 없고 accented 모습을 가진 워치 컴플리케이션과 fullColor 모습의 Smart Stack으로 나타납니다.
여러분이 여러분의 앱에 추가하는 각 기능마다, 위젯, 워치 컴플리케이션, 또는 Live Activity가 적용 가능한 모든 환경과 모습을 잘 지원하는지 확인하세요.
더 많은 정보는, Preparing widgets for additional platforms, contexts, and appearnces를 확인하세요.
디자인 지침은, Human Interface Guidelines > Widgets를 참조하세요.
콘텐츠 업데이트 애니메이션
iOS 16, macOS 13 또는 이전 버전을 실행하는 기기에서는 위젯에서 애니메이션을 사용하지 않습니다. 그러나 Live Activities는 시스템의 애니메이션 타이밍을 활용하여 동적 콘텐츠와 뷰를 추가 또는 제거를 애니메이션으로 처리합니다. 예를 들어, 여러분은 콘텐츠 또는 상태 변경에 move(edge:)와 같은 내장된 전환을 사용할 수 있습니다.
iOS 17 및 macOS 14부터는 위젯에서 애니메이션을 사용할 수 있으며, 위젯과 Live Activities 모두 커스텀 애니메이션을 사용할 수 있습니다. 더 많은 정보는, Animating data updates in widgets and Live Activities를 확인하세요.
타임라인과 함께 최신 정보 제공
위젯과 워치 컴플리케이션은 여러분의 앱과는 다른 매커니즘을 사용하여 콘텐츠를 업데이트합니다: 이들은 여러분의 앱에서 생성한 데이터 업데이트의 타임라인을 사용하여 WidgetKit에 전달합니다. 여러분의 앱이 새로운 데이터를 받을 때마다 여러분은 이 타임라인을 유지하지만, 장치의 배터리 수명을 최적화하기 위해, 각 앱에는 위젯이나 컴플리케이션을 업데이트할 수 있는 예산이 주어집니다. 또한, 시스템은 전력을 절약하기 위해 업데이트를 일괄해서 계획적으로 처리합니다. 타임라인 작동 방식과 여러분이 여러분의 위젯 및 워치 컴플리케이션을 최신 상태로 유지할 수 있는 방법에 대한 더 많은 정보는 Keeping a widget up to date 및 Making network requests in a widget extension을 확인하세요.
Live Activities는 콘텐츠를 업데이트하기 위해 타임라인을 사용하지 않습니다. 대신, ActivityKit과 Apple Push Notification Service(APNs)를 사용하여 ActivityKit 푸시 알림을 보냅니다. 더 많은 정보는, ActivityKit을 확인하세요.
위젯 및 Live Activity에 특정 앱 기능 추가
기본적으로, 사용자들은 해당하는 앱을 실행하기 위해 위젯, 워치 컴플리케이션, 또는 Live Activity를 탭합니다. 경험을 더 직관적이게 만들고 더 적은 상호작용을 요구하기 위해, 여러분들은 딥 링크를 활용하여 위젯에 보이는 콘텐츠와 일치하는 앱의 화면을 실행시킬 수 있습니다.
WidgetFamily.systemSmall 또는 그보다 큰 위젯과 같은, 충분한 공간을 제공하는 위젯 — 그리고 확장된 Live Actitivies 또는 잠금 화면 표시 — 에는 여러분의 뷰에 SwiftUI의 Link를 추가하여 사용자가 여러분의 앱에서 다른 화면을 열 수 있도록 할 수 있습니다.
메모
iOS 16 및 macOS 13 또는 그 이전 버전에서는, 대형(large)과 초대형(extra-large) 위젯들만 Link를 사용할 수 있습니다.
iOS 17 및 macOS 14부터, 위젯은 App Intents 프레임워크와 SwiftUI를 사용하여 여러분의 앱과 직접적인 상호작용을 지원합니다. Button과 Toggle 모두 이를 위한 전용 이니셜라이저를 제공합니다. 더 많은 정보는, Adding interactivity to widgets and Live Activities를 확인하세요.
구성 가능한 위젯 및 워치 컴플리케이션 제공
사용자 지정 가능 속성을 제공하는 구성 가능한 iOS 및 macOS 위젯을 공급하여 사용자가 위젯 내의 화면에서 보고싶은 정보를 선택할 수 있도록 합니다. 예를 들어, 사용자들은 주식 시장 위젯에서 특정 주식에 대한 정보를 지속적으로 받기를 선택하거나, 택배 배송 위젯을 활용하기 위해 배송 추적 번호를 입력하는 것을 선택할 수 있습니다. 구성 가능한 위젯은 Siri 및 Shortcuts 앱과 같은 시스템 수준의 서비스 지원에 사용하는 메커니즘인 App Intents 프레임워크와 여러분이 정의한 커스텀 인텐트를 사용합니다. 구성 가능한 위젯을 만드는 방법에 대한 더 많은 정보는, Making a configurable widget을 확인하세요.
Apple Watch에서는, WidgetKit과 App Intents 프레임워크를 활용하여 사용자들에게 사전 구성된 워치 컴플리케이션을 제공하세요.
Smart Stacks에서 가시성 향상
iPhone과 iPad에서는, Smart Stacks를 만들기 위해 사용자들이 위젯 스택을 생성하고, 위젯 스택을 수동으로 스와이프하거나, Smart Rotate를 사용합니다. Smart Stack에서, WidgetKit은 사용자의 상황에 맞는 위젯을 스택 상단에 표시합니다. 예를 들어, 사용자가 집을 나설 때마다 Smart Stack의 상단에 날씨 위젯이 나타날 수 있습니다. 시스템이 적절한 순간에 Smart Stack의 상단에 위젯을 표시하도록 하려면, App Intents 프레임워크를 사용하세요.
Apple Watch에서, Smart Stack은 기본 위젯과 사용자가 추가한 위젯 목록을 표시합니다. iPhone 및 iPad와 마찬가지로 사용자가 Smart Stack에 여러분들의 위젯을 추가할 수 있도록 App Intents 프레임워크를 사용하세요.
더 많은 정보는, Increasing the visibility of widgets in Smart Stacks를 확인하세요.
사용자 프라이버시 고려
잠금 화면과 시계 전면은 항상 표시되며, 기기가 잠겨있거나 Always On을 지원할 경우 민감한 정보를 숨길 수 있도록 사용자는 위젯과 컴플리케이션을 구성할 수 있습니다. 위젯, Live Activity, 또는 컴플리케이션에 표시되는 데이터를 검토하고, 민감한 정보의 검열을 지원하도록 하세요.
그룹 컨테이너에 공유 데이터 저장
여러분은 위젯 확장을 생성하여 여러분들의 앱에 추가해서, 위젯, 워치 컴플리케이션, Live Activities를 추가하고, 확장 타겟과 여러분의 앱은 동일한 앱 그룹에 속하게 됩니다. 그 결과, 여러분들은 앱과 위젯 확장이 모두 접근할 수 있는 공유 컨테이너에 파일과 데이터를 저장할 수 있습니다. 예를 들어, 앱에서 데이터를 다운로드한 후 공유 컨테이너 데이터베이스에 저장하고, 위젯이 해당 데이터베이스에 접근할 수 있습니다. 앱 그룹 및 공유 컨테이너 접근에 대한 추가 정보는, Configuring App Groups를 확인하세요.
기능적 제한 사항 존중
위젯, 워치 컴플리케이션 , 그리고 Live Activities는 항상 보여집니다. 이들은 배터리 수명과 사용자 프라이버시를 보호하기 위해, 특정 제한 사항을 따릅니다. 예를 들어, Live Activities는 사용자의 위치 정보에 접근할 수 없습니다. 다음 표는 각 기능의 배터리 수명 또는 사용자 프라이버시에 영향을 미치는 가용성 기능을 보여줍니다:
기능 | 위젯 | 워치 컴플리케이션 | Live Activities |
네트워크 접근 | 가능 | 가능 | 불가능 |
위치 접근 | 가능 | 가능 | 불가능 |
더 많은 정보는, Accessing location information in widgets를 확인하세요.
Developing a WidgetKit strategy
Developing a WidgetKit strategy | Apple Developer Documentation
Explore features, tasks, related frameworks, and constraints as you make a plan to implement widgets, watch complications, and Live Activities.
developer.apple.com