WidgetKit 을 사용하여 위젯을 만들 수 있습니다
위젯은 iOS 뿐만 아닌 다른 플랫폼에서도 적용할 수 있으며 애플워치에서는 더 유용하게 사용될 수 있습니다.
OverView
- 위젯 (Widgets):
- 위젯은 앱에서 중요한 정보나 기능을 앱을 실행하지 않고도 바로 볼 수 있도록 해주는 작은 요소입니다. iPhone과 iPad에서는 위젯을 Today View, 홈 화면, 잠금 화면에 추가할 수 있고, Mac에서는 데스크탑과 알림 센터에 배치할 수 있습니다. iOS 17과 macOS 14부터는 iPhone 위젯을 Mac 데스크탑이나 알림 센터에서도 사용할 수 있습니다. Apple Watch에서는 Smart Stack에 위젯이 표시됩니다.
- 스마트 스택 (Smart Stacks):
- iPhone에서 사람들은 여러 위젯을 쌓아 올려서 Smart Stacks를 만듭니다. Smart Stacks에서는 App Intents 프레임워크와 기기 내 인공지능을 사용하여 현재 상황에 맞는 위젯을 상단에 표시하는 Smart Rotate 기능이 작동합니다.
- Apple Watch에서도 사용자는 Smart Stack에 위젯을 추가하고, 이를 고정하거나 상황에 맞게 자동으로 정렬되도록 할 수 있습니다.
- 워치 컴프리케이션 (Watch Complications):
- Apple Watch에서 Complication은 사용자가 손목을 들어올렸을 때 실시간으로 중요한 정보를 볼 수 있게 해주는 작은 정보 요소입니다. 또한, Smart Stack에서 최대 3개의 Complication을 배치할 수 있습니다.
- 더 쉽게 얘기하면 Complication 이란 시계에서 시간 뿐만 아닌 다른 기능들을 의미합니다.
- 라이브 액티비티 (Live Activities):
- Apple Watch에서 Live Activity 란 최신화된 앱의 정보를 나타내는 기능입니다.
- 라이브 액티비티는 이벤트나 작업 정보를 잠금 화면 또는 Dynamic Island에서 실시간으로 표시하는 기능입니다. 업데이트는 ActivityKit을 통해 이루어지며, 필요시 Apple Push Notification 서비스(APNs)를 사용해 실시간 알림을 받을 수 있습니다.
- 컨트롤 (Controls):
- 컨트롤은 앱의 특정 기능을 실행할 수 있는 버튼이나 토글 스위치로, 제어 센터, 잠금 화면, Action 버튼에서 동작할 수 있습니다. 예를 들어, 버튼을 눌러 특정 동작을 실행하거나 앱의 특정 화면을 열 수 있으며, 토글 스위치를 사용해 불을 켜고 끄거나 차고 문을 열고 닫는 등의 작업을 할 수 있습니다.
단계적으로 개발하기
위젯을 만들때는 사용자가 한눈에 쉽게 볼 수 있는 기능을 단계적으로 개발해야 합니다.
- WidgetKit의 플랫폼 지원:
- WidgetKit은 iPad, iPhone, Mac, Apple Watch에서 사용할 수 있지만, 각 디바이스와 사용자 개인의 요구에 맞게 적절한 방식으로 기능을 제공합니다. 예를 들어, WidgetKit은 모든 플랫폼에서 다양한 크기의 위젯을 지원하며, Live Activities와 컨트롤 기능은 iPhone과 iPad에서만 사용할 수 있습니다.
- 공유되는 기술과 디자인:
- WidgetKit에서 지원하는 모든 기능이 모든 플랫폼에 동일하게 적용되지는 않지만, 위젯, Live Activities, 컨트롤, 워치 Complication은 기술 및 디자인 측면에서 유사점을 공유합니다. 이러한 공통점 덕분에, 개발자는 여러 기능을 동시에 개발하고 다양한 맥락에서 기능을 확장하기가 용이합니다.
- 단계적 개발 권장:
- 기능 개발은 반복적인 접근 방식을 사용할 것을 권장합니다. 예를 들어, 처음에는 작은 위젯부터 시작해 WidgetKit 확장 기능을 개발한 후, 점차 다른 크기의 위젯이나 추가 기능을 디자인하고 다른 플랫폼으로 확장하는 것이 좋습니다. 이렇게 하면 다양한 맥락에서 사용자들이 앱의 콘텐츠를 확인할 수 있게 됩니다.
- 플랫폼 확장 계획:
- 처음부터 여러 플랫폼에서 사용 가능한 기능을 계획하고 디자인하여, 가능한 한 많은 맥락에서 사용자가 앱의 콘텐츠를 확인할 수 있도록 하는 것이 중요합니다.
상호작용과 개인화 이해하기
상호작용 (Interactivity)
- 앱과의 연결: 사람들은 위젯, 워치 complications, 또는 Live Activity를 탭하여 해당하는 앱이나 앱의 특정 장면(scene)으로 이동할 수 있습니다. 예를 들어, "Emoji Ranger"의 위젯이나 워치 complications을 탭하면, 해당 위젯에 표시된 캐릭터와 일치하는 장면이 앱에서 열리게 됩니다.
- 앱 실행 없이 상호작용: 위젯, 컨트롤, 또는 Live Activity에 포함된 버튼이나 토글을 사용하여 앱을 실행하지 않고도 특정 상호작용을 할 수 있습니다. 예를 들어 위젯을 사용자가 탭하여 앱의 영웅의 치유 능력을 일시적으로 향상시키는 버튼을 구현할 수 있습니다.
개인화 (Personalization)
- 위젯과 complications 의 구성: 사람들은 자신의 필요에 맞게 위젯이나 워치 complications을 구성할 수 있습니다. 예를 들어, "Emoji Rangers" 프로젝트의 위젯은 사용자가 위젯에 표시될 영웅을 선택할 수 있게 해줍니다.
- 사용자 맞춤 배치: 사람들은 위젯이나 워치 합병증을 자신에게 가장 적합한 방식으로 배치할 수 있습니다. iPhone이나 iPad에서 위젯을 쌓아두고 Smart Rotate 기능을 활성화하면, WidgetKit은 상황에 맞게 가장 중요한 위젯을 자동으로 상단에 배치하여 사용자에게 적절한 시점에 중요한 정보를 보여줍니다. Apple Watch의 Smart Stack에서도 기본 위젯이 표시되거나, 사용자가 직접 고정 위치에 위젯을 배치할 수 있습니다.
시간에 따라 컨텐츠 업데이트하기
- 위젯과 워치 complication은 콘텐츠 업데이트를 위한 특별한 메커니즘을 사용합니다. 개발자는 타임라인 형태로 데이터 업데이트 일정을 만들고, 이를 WidgetKit에 전달합니다. 이후 WidgetKit은 에너지를 효율적으로 사용하여 위젯이나 complication의 콘텐츠가 적절한 시점에 업데이트되도록 관리합니다. 타임라인에 대한 자세한 내용은 Keeping a widget up to date에서 확인할 수 있습니다.
- Live Activities는 타임라인을 사용하지 않고, 대신 ActivityKit과 Apple Push Notification Service (APNs) 를 이용해 실시간으로 데이터를 업데이트합니다. 즉, ActivityKit 푸시 알림을 통해 콘텐츠가 변경되거나 추가되는 방식입니다. 자세한 내용은 https://developer.apple.com/documentation/ActivityKit 에서 확인할 수 있습니다.
- control은 타임라인을 사용하지 않고, 사용자가 control을 조작하거나, 앱이 다시 로드되거나, 또는 시스템이 APNs로부터 원격 푸시 알림을 받을 때 콘텐츠가 업데이트됩니다.
위젯 디자인할 때
- 작고 제한된 공간
- 위젯을 만들 때는 위젯은 화면에서 차지하는 공간이 작기 때문에 복잡한 정보나 과도한 요소를 담을 수 없습니다.
- 집중적으로 한눈에 확인 가능한 디자인
- 사용자들이 빠르게 정보를 파악할 수 있도록, 핵시 정보만을 간결하게 표시하는 것이 중요합니다. 즉, 불필요한 정보나 복잡한 시각적 요소는 피하고, 간결하고 명확한 정보 전달에 초점을 맞춰야 합니다.
- 디자인 가이드라인
- 구체적인 디자인 가이드는 애플에서 Human Interface Guidelines 에서 가이드라인을 제공하며, 각 요소에 맞는 디자인 원칙을 참조해야 합니다. 가이드라인에는 위젯, complication, Live Activities, Controls 에 대한 자세한 디자인 지침이 표함되어 있습니다.
'SwiftUI' 카테고리의 다른 글
프로그래머스 - 최댓값과 최솟값 (0) | 2024.10.10 |
---|---|
WWDC 20 - Meet WidgetKit (위젯 도입) (19) | 2024.10.09 |
WWDC24 Translation API (번역 API) (3) | 2024.10.05 |
WWDC20 Data Enssentials in SwiftUI (EnvironmentObject, ObservableObject, ObservedObject, StateObject, AppStorage, SceneStorage, 생명주기) (1) | 2024.10.03 |
SwiftUI - MapKit 에 대한 모든 것 (0) | 2024.09.08 |