Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/developeracademy-postech/2024-nc2-m2-widgetkit
Apple Developer Academy 3rd Morning Session NC2 Pair2(Soy&Sora - SOSO)'s WidgetKit
https://github.com/developeracademy-postech/2024-nc2-m2-widgetkit
Last synced: about 1 month ago
JSON representation
Apple Developer Academy 3rd Morning Session NC2 Pair2(Soy&Sora - SOSO)'s WidgetKit
- Host: GitHub
- URL: https://github.com/developeracademy-postech/2024-nc2-m2-widgetkit
- Owner: DeveloperAcademy-POSTECH
- Created: 2024-06-17T01:37:39.000Z (8 months ago)
- Default Branch: main
- Last Pushed: 2024-06-27T02:20:32.000Z (8 months ago)
- Last Synced: 2024-11-17T06:16:24.739Z (3 months ago)
- Language: Swift
- Size: 15.8 MB
- Stars: 2
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 2024-NC2-M2-WidgetKit
Apple Developer Academy 3rd Morning Session NC2 Pair2(Soy&Sora - SOSO)'s WidgetKit## ๐ฅ Youtube Link
(์ถํ ๋ง๋ค์ด์ง ์ ํ๋ธ ๋งํฌ ์ถ๊ฐ)## ๐ก About WidgetKit
> WwDC23๋ถํฐ WidgetKit์ Interactivity๋ฅผ ์ง์, ์ฌ์ฉ์๊ฐ ์ฑ์ ์คํํ์ง ์๊ณ ๋ ์์ ฏ ๋ด์์ ์ง์ ์์ ์ด ๊ฐ๋ฅํ๋๋ก ์ง์ํ๋ค. 'Button', 'Link', 'AppIntent' ์ปดํฌ๋ํธ๋ฅผ ํ์ฉํ์ฌ ํญ๋ชฉ์ ์๋ฃ๋ก ํ์ํ๊ฑฐ๋ ์ค์ ์ ์ ํํ๋ ๋ฑ์ ์์ ์ด ๊ฐ๋ฅํ๋ค. Interactive Widget์ ์ฌ์ฉ์์ ํ๋์ ๋ฐ๋ผ ์ฝํ ์ธ ๋ฅผ Refreshํ ์ ์์ด Apple ๊ธฐ๊ธฐ์์ ๋ ํ๋ถํ๊ณ ๋ชฐ์ ๊ฐ ์๋ ๊ฒฝํ์ ์ ๊ณตํ๋ค.
## ๐ฏ What we focus on?
> WidgetKit์์ iOS17๋ถํฐ ์ ๊ณตํ๋ interactivity๋ฅผ ํ์ฉํด ์ฑ์ ์คํํ์ง ์๊ณ ๋ ์ฑ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ค.## ๐ผ Use Case
> ๋งค์ผ ํ์ธํ๋ ์ด์ธ๋ฅผ HomeScreen์์ ๋ฐ๋ก ๋ณผ ์ ์๋๋ก ํ๋ฉฐ, ๋ถ์ฐจ์ ์ผ๋ก ์์ดํฐ์ ๊พธ๋ฏธ๋ ๋ฐ ๋์์ ์ค๋ค.## ๐ผ๏ธ Prototype
- ์์ ฏ ์ด๋ฏธ์ง (WidgetFamily: .systemSmall, .systemLarge / .systemMedium) : ์์ ฏ์ ์ค์นํ์ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ํ๋๋ ํ๋ฉด
|
![]()
--|--|
.systemSmall | .systemMedium- HeaderView : ์ค๋์ ์ด์ธ๊ฐ ๋ํ๋๋ View
- MainView : ์ดํ์์ ์ฒ์์ผ๋ก ๋ํ๋๋ View
- Widget์ด ์ ์ฉ๋ HomeScreen
## ๐ ๏ธ About Code
```
struct ToggleFortuneIntent: AppIntent {
static var title: LocalizedStringResource = "Toggle Fortune Display"
func perform() async throws -> some IntentResult {
let defaults = UserDefaults(suiteName: "group.com")
let isShowingFortune = defaults?.bool(forKey: "isShowingFortune") ?? true
defaults?.set(!isShowingFortune, forKey: "isShowingFortune")
WidgetCenter.shared.reloadTimelines(ofKind: "TodayFortune")
return .result()
}
}
```
```
Button(intent: ToggleFortuneIntent()){
if !entry.isShowingFortune { ... } else { ... }
}
```
Interactivity๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํด์ AppIntent๊ฐ ํ์ํจ.
AppIntent๋ iOS๊ฐ ํ์ํ ๋, ์๋ฅผ ๋ค์ด ์ฌ์ฉ์๊ฐ ์์ ฏ ๋ฒํผ๊ณผ ์ํธ์์ฉํ ๋ App ์์ ์ ์์คํ ์ ๋ ธ์ถํ๋ ์ญํ ์ ์ํ.
ํด๋น ์ฝ๋์์๋ UserDefaults์ ์ ์ฅ๋ "isShowingFortune" ๊ฐ์ ๋ถ๋ฌ์ค๋๋ก ํ๊ณ , "isShowingFortune"์ ๊ฐ์ ๋ฐ๋ผ Widget์์ ์ค๋์ ์ด์ธ ๋๋ ๋ ์ ํด๋นํ๋ ์ด๋ฏธ์ง๋ฅผ ๋ณด์ด๋๋ก ํจ## ๐ฉโ๐ป Contributor
|
![]()
--|--|
Soy|Sora