samsung-ga / woody-iOS-tip

🐶 iOS에 대한 소소한 팁들과 개발하다 마주친 버그 해결기, 그리고 오늘 배운 것들을 모아둔 레포
19 stars 0 forks source link

[TIL] WidgetKit #29

Open samsung-ga opened 2 years ago

samsung-ga commented 2 years ago

Widgetkit

시작하기




Configuration Deitals 추가

properties

kind

provider

intent

content

modifiers

추가적인 configuration 정보를 modifier을 통해 제공 가능하다.

@main
struct GameStatusWidget: Widget {
    var body: some WidgetConfiguration {
        StaticConfiguration(
            kind: "com.mygame.game-status",
            provider: GameStatusProvider(),
        ) { entry in
            GameStatusView(entry.gameStatus)
        }
        .configurationDisplayName("Game Status") // ✅
        .description("Shows an overview of your game status") // ✅
        .supportedFamilies([.systemSmall, .systemMedium, .systemLarge, .systemExtraLarge]) // ✅
    }
}

앱의 위젯이 위젯갤러리에서 보이기 위해서는, 유저가 반드시 앱이 설치된 이후, 위젯을 포함한 앱을 한번 실행해야한다. ✨ 당연한 소리!!




Provide Timeline Entries




Placeholder 표시 + 민감한 데이터 숨기기

콘텐츠 보여주기

위젯들은 읽기 전용이고, 상호작용적인 요소들은 제공하지 않는다.





Dynamic 콘텐츠??



User Interaction에 대한 respond





여러개의 위젯을 사용할 경우





Preview Widget

Group { EmojiRangerWidgetEntryView(entry: SimpleEntry(date: Date(), relevance: nil, character: .panda)) .previewContext(WidgetPreviewContext(family: .accessoryCircular)) .previewDisplayName("(family)") EmojiRangerWidgetEntryView(entry: SimpleEntry(date: Date(), relevance: nil, character: .panda)) .previewContext(WidgetPreviewContext(family: .accessoryRectangular)) .previewDisplayName("(family)") EmojiRangerWidgetEntryView(entry: SimpleEntry(date: Date(), relevance: nil, character: .panda)) .previewContext(WidgetPreviewContext(family: .accessoryInline)) .previewDisplayName("(family)") EmojiRangerWidgetEntryView(entry: SimpleEntry(date: Date(), relevance: nil, character: .panda)) .previewContext(WidgetPreviewContext(family: .systemSmall)) .previewDisplayName("(family)") EmojiRangerWidgetEntryView(entry: SimpleEntry(date: Date(), relevance: nil, character: .panda)) .previewContext(WidgetPreviewContext(family: .systemMedium)) .previewDisplayName("(family)") }