SWIFT
-
What's new in Xcode 16 (feat. WWDC 2024)Xcode 2024. 8. 9. 18:19
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค ๐์ด๋ฒ ํฌ์คํ ์์๋ WWDC 2024์์ Xcode 16 ์ธ์ ์ ๋ณด๊ฒ ์ต๋๋ค ๐๐ป ๋ฐํ๋ Xcode 16์์๋ ์ด๋ค ํธ๋ฆฌํ ๊ธฐ๋ฅ๋ค์ด ์๊ฒจ๋ฌ๊ณ , ์ฑ๋ฅ์ ์ข ๋ ์ข์์ก์๊น์? ๋ฐ๋ก ํ๋ฒ ๊ฐ์ด ์์ฒญํด๋ณด์์ฃ ! Xcode 16์ ์๋ก์ด ๊ธฐ๋ฅ - WWDC24 - ๋น๋์ค - Apple DeveloperXcode 16์ ์์ฐ์ฑ ๋ฐ ์ฑ๋ฅ ๊ด๋ จ ์ต์ ๊ฐ์ ์ฌํญ์ ์์๋ณด๊ณ , ์ฝ๋ ์์ฑ, ์ง๋จ ๋ฐ Xcode ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๊ด๋ จ ๊ฐ์ ์ฌํญ๋ ์์๋ณด์ธ์. ๋น๋์ ์ ๋ฐ์ดํธ์ ๋๋ฒ๊น ๋ฐ Instruments์ ๊ฐ์ ์ฌํญ์ ํ์ธํด ๋ณด์ธ์.developer.apple.com ๊ทธ๋์ ๋ ์ด์ ํ๊ตญ์ด ์๋ง์ ์ ๊ณตํด์ค์ ๋๋ฌด ์ข๋ค์ ๐ Xcode 16์ฝ๋ ์์ฑ ๊ธฐ๋ฅ์ฝ๋ ์์ฑ ๊ธฐ๋ฅ์ด ์ด์ ๋ ๋นํ์๋ ์ฝ๋๋ฅผ ์ถ์ฒํด์ค๋๋ค..
-
TCA - Shared StateTCA 2024. 8. 5. 18:35
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค ๐์ด๋ฒ ํฌ์คํ ์์๋ TCA์์ ์ฌ์ฉํ๋ Shared State์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค ๐๐ป ํด๋น ํฌ์คํ ์์๋ ๊ฐ๋ณ๊ฒ ์ด๋ค๊ฒ์ด๊ณ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง์ ๋ํด์ ์ดํด๋ณผ๊ฑฐ์์ ๐๋ง์ฝ Shared State์ ๋ํด ๋ ๊น๊ฒ ๋ณด์๊ธฐ ์ํด์๋ ํฌ์ธํธํ๋ฆฌ์ Shared State ์ํผ์๋๋ฅผ ๋ณด์๋๊ฑธ ์ถ์ฒ๋๋ ค์! Composable Architecture โบ Shared State in PracticeWe refactor two real world code bases to take advantage of the state sharing tools of the Composable Architecture. Along the way we get to delete hundreds of lines o..
-
YouTubePlayerKit์ ํ์ฉํ ์ผ์ธ ๊ตฌํํ๊ธฐLibrary 2024. 8. 1. 18:44
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค ๐์ด๋ฒ ํฌ์คํ ์์๋ YouTubePlayerKit์ด๋ผ๋ ์คํ์์ค๋ฅผ ์ด์ฉํด ์ ํฌ๋ธ์ ์ผ์ธ ๊ธฐ๋ฅ์ ๊ตฌํํด๋ณด๋ ค ํฉ๋๋ค ๐๐ป ์ด๋๊น์ง๋ ์ด๋ฒ์๋ ํ์ต ๋ชฉ์ ๋ณด๋ค๋ ์์ ์คํ ์์ค๋ฅผ ํ์ฉํด์ ๊ธฐ๋ฅ ๊ตฌํ์ ์ด์ ์ด ์์ต๋๋ค ๐จ๊ทธ๋ ๊ธฐ์, ํฌ๊ฒ ๊ฐ์ด ํ์ตํ๋ค๋ ๋๋๋ณด๋ค ์ด๋ฐ ์ฝ๋๋ก ์ผ์ธ ๋ฅผ ๊ตฌํํ ์ ์๊ตฌ๋ํ๊ณ ๋๊ทธ๋ฝ๊ฒ ๋ด์ฃผ์๋ฉด ์ข์๊ฒ ๊ฐ์์ ใ ใ YouTubePlayerKit?์ฐ์ YouTubePlayerKit์ด๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ด๋ค๊ฒ์ด๊ณ ์ ์จ๋ณด๋์ง ์ค์ํ๊ฒ ์ฃ ?์ ํฌ๋ธ์ ์์์ด๋ ์ผ์ธ ๋ฅผ iOS ์ฑ์์ ๋์์ผ ํ๋ค๋ฉด ์ด๋ป๊ฒ ํด๋ณด์ค๊ฒ ๊ฐ๋์? ์์ฒด AVPlayer๋ฅผ ํ์ฉํ๋ค? WKWebView๋ฅผ ํ์ฉํ๋ค? ๋ณดํต ๋ง์ด๋ค ์์ ๊ตฌํ์ ์ํด์๋ AVPlayer ์์ฒด ํ๋ ์ด์ด๋ฅผ ์๊ฐํ์คํ ๋ฐ์.์ด ๋ฐฉ๋ฒ์ผ..
-
UIScrollView์ contentInsetAdjustmentBehavioriOS 2024. 7. 18. 08:15
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค ๐์ด๋ฒ ํฌ์คํ ์์๋ UIScrollView์ contentInsetAdjustmentBehavior์ ๋ํด ์์๋ณด๊ณ ์ ์ฉํด๋ณด๋ ค ํฉ๋๋ค ๐๐ป contentInsetAdjustmentBehavior?์ฐ์ UIKit ํ๋ ์์ํฌ์์ ์ ๊ณตํ๋ UIScrollView์ ์ธ์คํด์ค ์์ฑ์ธ contentInsetAdjustmentBehavior๋ฅผ ๊ณต์๋ฌธ์๋ฅผ ์ดํด๋ณด๋ฉด ์กฐ์ ๋ ์ปจํ ์ธ ์คํ์ ์ ๊ฒฐ์ ํ๊ธฐ ์ํ ๋์์ด๋ผ๊ณ ์๊ฐํ๊ณ ์์ด์ ๐ค ์กฐ์ ๋ ์ปจํ ์ธ ์คํ์ ?? ์ด๊ฒ ๋์ฒด ๋ญ๋ง์ผ๊น์ ๐ค ํด๋น ์ธ์คํด์ค ์์ฑ์ UIScrollView์ get set ํ๋กํผํฐ๋ก ์๋์ ๊ฐ์ด ์ ์๋์ด ์์ต๋๋ค. var contentInsetAdjustmentBehavior: UIScrollView.ContentIns..
-
SwiftUI - ViewThatFitsSwiftUI 2024. 7. 15. 18:20
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค ๐์ด๋ฒ ํฌ์คํ ์์๋ SwiftUI์ ViewThatFits ์ปดํฌ๋ํธ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค ๐๐ป ์ค๋๋ง์ ์ ๋ง ๊ฐ๋ณ๊ฒ ์๋ฐ๊ฒ๋ ํ์ฉํด๋ณผ ์ ์๊ตฌ๋ ํ๋ ์ฃผ์ ์ด๋ ํธํ๊ฒ ๊ฐ์ด ํ์ด๋ณด์์ฃ ๐ ViewThatFitsํด๋น ์ปดํฌ๋ํธ๋ SwiftUI์์ ํ์ ์์ ๋ทฐ๋ค์ค์์ ํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ณต๊ฐ์ ์ ์ผ ์ ํฉํ ๋ทฐ๋ฅผ ์ ํํด ํ๋ฉด์ ๋ ๋๋งํด์ฃผ๋ ๋ทฐ ์ปดํฌ๋ํธ์ ๋๋ค.์ฆ, ํด๋น ๋ทฐ ์ปดํฌ๋ํธ๋ ๋๊ฒ ๋ค์ํ ํ๋ฉด ์ฌ์ด์ฆ๋ ๋ ์ด์์์์ ์ ์ฐํ๊ฒ ๋ทฐ๋ฅผ ์ ํํด์ ํ์ํ ๋ ์ด์ฉ๋ฉ๋๋ค.iOS 16.0 ์ด์์ด๋ผ๋ฉด ๋ชจ๋ ์ ์ฉํ ์ ์์ด์! ์ ์ธ์ ๋ณผ๊น์? @MainActor @frozen @preconcurrencystruct ViewThatFits where Content : View ์ด๋ ๊ฒ ์ผ๋ฐ์ ์ธ ๋ค๋ฅธ ..
-
Demystify SwiftUI containers (feat. WWDC 2024)SwiftUI 2024. 7. 11. 19:00
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค ๐์ด๋ฒ ํฌ์คํ ์์๋ WWDC 2024์์ ๋ง์์ฃผ๋ Demystify SwiftUI containers ์ธ์ ์ ๋ํด ๊ฐ์ด ๋ณผ๊น ํฉ๋๋ค ๐๐ป ์ธ์ ํ์ดํ๋ถํฐ ๋๊ปด์ง๋๊ฒ SwiftUI ์ปจํ ์ด๋ ๋ทฐ์ ๋ํด ์์๋ณด๋ฉด์ ์ด๋ป๊ฒ ๋ทฐ๋ค์ด ์ปจํ ์ด๋์ ์ํด ๊ด๋ฆฌ๋๋์ง ์ฐ๋ฆฌ์๊ฒ ์ค๋ช ํด์ค๊ฒ ๊ฐ์์ ๐ ๊ทธ๋ผ ๋ฐ๋ก ๋ค์ด๊ฐ๋ณผ๊น์? ๐๐ป Demystify SwiftUI containersSwiftUI๋ API์์ ๋ฆฌ์คํธ ์ปจํ ์ด๋์ ๊ฐ์ด ๋ชจ๋ ๊ธฐ๋ฅ์ ๊ฐ์ถ ๋ค์ํ ์ข ๋ฅ์ ์ปจํ ์ด๋๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ ๊ฒ ์ปจํ ์ด๋ ๋ทฐ๋ ์ปจํ ์ธ ๋ฅผ ๋ํํ๊ธฐ ์ํด์ ํํ ๋ทฐ ๋น๋ ํด๋ก์ฆ๋ฅผ ์ฌ์ฉํฉ๋๋ค.๋ทฐ ๋น๋๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ ์ฝ๋ฉ๋ ํ ์คํธ ๋ทฐ๋ค์ ๋ฆฌ์คํธ์ฒ๋ผ ์ฝํ ์ธ ๋ฅผ ์ ์ ์ผ๋ก ์ ์ํ ์ ์์ฃ ! ๋ํ, ForEach๋ฅผ ์ด์ฉํ์ฌ ๋์ ..
-
Tuist v4 ์ค์น ๋ฐ ์ฌ์ฉ (with. ์๋ํ)Tuist 2024. 7. 1. 18:52
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค ๐์ด๋ฒ ํฌ์คํ ์์๋ Tuist v4์ ๊ธฐ์ค์ผ๋ก ์ค์นํ๊ณ ๊ฐ๋จํ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ํ์ตํด๋ณด๊ฒ ์ต๋๋ค ๐๐ป Tuist v4ํ๋ก์ ํธ๋ฅผ ๊ด๋ฆฌํ๋ฉฐ ๋ชจ๋ํ์ ๋์์ ์ฃผ๋ ์ฐ๋ฆฌ ์ต์ํ Tuist๊ฐ 3 ๋ฒ์ ๋์์ 4 ๋ฒ์ ๋๋ก ์ค๋ฉด์ ๋ณํ๊ฐ ์๊ฒผ์ฃ .๋ก๊ณ ๊ฐ ๋ฐ๋์์๋ฟ๋ง ์๋๋ผ, ๊ธฐ์กด curl์ด๋ homebrew๋ฑ์ ์ด์ฉํด ์ค์นํ์๋ Tuist๊ฐ ์ด์ ๋ mise๋ฅผ ์ด์ฉํด ์ค์นํ๋ผ๊ณ ๊ถ์ฅํ๊ณ ์๊ฒจ๋ฌ์ต๋๋ค๐ ๋ฌผ๋ก , ์์ง๊น์ง๋ homebrew ๋ฐ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ์ค์นํ ์ ์์ง๋ง mise๋ฅผ ํ์ฉํ๋ผ๊ณ ๊ถ์ฅํ๋ค์.mise๋ ๋ง์ด์ค? ๋ง์ด์ฆ๋ก ์ฝ๋์ค ์์๋๋ฐ ๋ฏธ์ฆ๋ผ๊ณ ์ฝ๋๋ผ๊ตฌ์ ใ ใ ๋ฟ๋ง ์๋๋ผ, ํ๋ก์ ํธ ์์ฑ์ ์ํ ์์กด์ฑ๋ค์ ๊ด๋ฆฌํ๋๊ฒ๋ค๊ณผ ํ๊ฒ ๋ฐ ํ๋ก์ ํธ ์์ฑ์ ์ํด ์์ฑํ๋ ์ฝ๋๋ค์ ์ผ๋ถ๋ถ๋..
-
TCA - Dependency ์ค๊ณTCA 2024. 6. 29. 15:53
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค ๐์ด๋ฒ ํฌ์คํ ์์๋ TCA์์ Dependencies ์ค๊ณ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค ๐๐ปDesigning dependencies์ข ์์ฑ์ ๊ธฐ๋ฅ์ ์ฃผ์ ํ๊ณ ํ ์คํธ๋ฅผ ์ํด์ ์ฌ์ ์ํ๋๋ฐ ๋์์ด ๋๋ ์ค๊ณ๊ฐ ํ์ํฉ๋๋ค.์ฆ, ํต์ฌ์ ์ผ๋ก ๊ฐ์ ธ๊ฐ์ผํ ๊ฒ์ ์ข ์์ฑ์ ์ ์ดํ ์ ์๊ฒ ๋ง๋ค๊ธฐ ์ํด์ ๊ฒฉ๋ฆฌ ๋ฐ ํ ์คํธ๊ฐ ๊ฐ๋ฅํ๊ฒ ๋ง๋๋๊ฒ์ด์ฃ ! ํ๋จ๊ณ์ฉ ์์๋ณผ๊น์? Protocol-based dependenciesSwift์์ ์ข ์์ฑ์ ์ค๊ณํ๋ ๋ฐฉ๋ฒ ์ค ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋๊ฒ์ด ํ๋กํ ์ฝ์ ์ด์ฉํ๋๊ฒ์ ๋๋ค.์์๋ก, ์๋์ ๊ฐ์ด ์ค๋์ค ํ๋ ์ด์ ๋ํ ํ๋กํ ์ฝ์ ์ค๊ณํด๋ณธ๋ค๊ณ ๊ฐ์ ํด๋ด ์๋ค. protocol AudioPlayer { func loop(url: URL) async throws func play(u..