마지막 위젯을 그리는 뷰에 대해 설명하겠습니다. struct widgetWidgetEntryView : View { var entry: Provider.Entry var body: some View { Text(entry.date, style: .time) } } 일반적인 SwiftUI 에서 보여지는 뷰 입니다. @Environment(\.widgetFamily) private var family 를 선언하고 바디에서 switch famliy 를 이용하면 case 에 따른 뷰를 그릴수있습니다. struct OrdersWidgetView: View { var entry: OrdersWidget.Entry @Environment(\.widgetFamily) private var family var body:..
위젯의 핵심인 TimelineProvider에 대해 알아보겠습니다. 처음 설치했을때 샘플로 되어있는 코드입니다. struct Provider: TimelineProvider { func placeholder(in context: Context) -> SimpleEntry { SimpleEntry(date: Date()) } func getSnapshot(in context: Context, completion: @escaping (SimpleEntry) -> ()) { let entry = SimpleEntry(date: Date()) completion(entry) } func getTimeline(in context: Context, completion: @escaping (Timeline) -> (..

위젯 생성되는 파일중에 Widget에 들어가면 struct widgetWidget: Widget { let kind: String = "widgetWidget" var body: some WidgetConfiguration { StaticConfiguration(kind: kind, provider: Provider()) { entry in widgetWidgetEntryView(entry: entry) } .configurationDisplayName("My Widget") .description("This is an example widget.") .supportedFamilies([.systemSmall,.systemMedium,.systemLarge,.accessoryCircular,.access..

번들 밑에 있는 파일에 들어가보겠습니다. import WidgetKit import SwiftUI struct Provider: TimelineProvider { func placeholder(in context: Context) -> SimpleEntry { SimpleEntry(date: Date()) } func getSnapshot(in context: Context, completion: @escaping (SimpleEntry) -> ()) { let entry = SimpleEntry(date: Date()) completion(entry) } func getTimeline(in context: Context, completion: @escaping (Timeline) -> ()) { var..

위젯을 target을 추가하면 자신이 추가한 확장자명으로 된 폴더가 하나 만들어지게 됩니다. 먼저 bundle로 가보겠습니다. import WidgetKit import SwiftUI @main struct widgetWidgetBundle: WidgetBundle { var body: some Widget { widgetWidget() } } 와 같은 형식으로 되어있고 번들에는 앞으로 만들 위젯에 대한 구조체를 선언해서 놓으면 됩니다. 애플에서 제공하는 FoodTruck 샘플을 보면 아래와 같이 사용하고 있습니다. import WidgetKit import SwiftUI @main struct Widgets: WidgetBundle { var body: some Widget { // MARK: - Li..

위젯휴먼가이드라인에 있는 내용 중에 꼭 챙겨야 할 정보 몇개만 번역 돌려서 올려놨습니다. 이 외에도 몇개가 있는데 꼭 개발전에 확인하고 점검하신다음 개발을 시작하면 좋을것 같습니다. 요약 1. 앱만 실행하는 위젯으로 만들지 말기 2. 다크모드 지원하기 3. 글자는 SystemFont 를 사용하고, 11포인트 이상으로 쓰기 Avoid creating a widget that only launches your app. People appreciate widgets because they provide instant access to meaningful content. A widget that behaves like an app icon offers no additional value, which means ..

iOS 14에서 새롭게 추가된 기능 Widget이 궁금해서 공부한 개인적인 내용을 공유해보겠습니다. 위젯이 나온 이유를 찾아보기위해 WWDC20 키노트도 봤지만 반복되는 앱 아이콘, 그룹화된 폴더 형식으로 이루어진 홈화면에 변화를 가져오기 위해 선택한것 같습니다. 위젯은 단일 위젯과 스마트 스택안에 여러개의 위젯으로 이루어진 위젯이 있습니다. 위젯의 종류는 iOS 14 기준 4가지, iOS 16 잠금화면에 추가된 style 3가지 해서 총 7가지이다. (+ 다이나믹 아일랜드 화면도 위젯에서 작성) 이번에는 ios 14 에 나온 위젯 3가지 (extraLage는 iPad전용이라 제외)와 16에 추가된 3가지에 대해서만 설명하겠습니다. Widget 종류 systemSmall (iOS 14.0 이상) syst..