ios
-
NSAttributedString Performance OptimizationSwift 2025. 12. 6. 08:59
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค ๐UITextView๋ UILabel์์ ์์ฒ ์ค์ ํ ์คํธ๋ฅผ ๋ค๋ฃฐ ๋ ์ฑ์ด ๋ฒ๋ฒ ์ด๊ฑฐ๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํฐ์ง๋ ๊ฒฝํ ์์ผ์ ๊ฐ์?์ด๋ฒ ํฌ์คํ ์์๋ NSAttributedString์ ์ฑ๋ฅ ์ต์ ํ์ ๋ํด ๋ค๋ค๋ณด๊ฒ ์ต๋๋ค. Apple ์์ง๋์ด์ ๊ณต์ ๋ต๋ณ์ ํ ๋๋ก ๋ฐฉ๋ฒ๋ค์๋ฅผ ์ ๋ฆฌํด๋ดค์ด์.Attribute Dictionary๋ ์๋์ผ๋ก ์ค๋ณต ์ ๊ฑฐ๊ฐ์ฅ ๋จผ์ ์์์ผ ํ ์ฌ์ค์ NSAttributedString์ ๋ด๋ถ์ ์ผ๋ก ๋์ผํ attribute dictionary๋ฅผ ์๋์ผ๋ก uniquifyํฉ๋๋ค.Apple ์์ง๋์ด์ ๊ณต์ ๋ต๋ณ2015๋ , Apple์ TextKit ์์ง๋์ด Aki Inoue๊ฐ ๊ณต์ ํ์ธํด์ค ๋๋ชฉ์ด ์์ต๋๋ค. Memory optimization of NSAttributedStringD..
-
SwiftUI Preview - ThunkSwiftUI 2025. 11. 29. 21:38
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค ๐์ด๋ฒ ํฌ์คํ ์์๋ SwiftUI Preview๊ฐ ์ด๋ป๊ฒ ์ฝ๋ ๋ณ๊ฒฝ์ ์ค์๊ฐ์ผ๋ก ๋ฐ์ํ๋์ง ๊ทธ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๊น๊ฒ ํํค์ณ๋ณด๋ ค๊ณ ํฉ๋๋ค ๐๐ปPreview is not magicSwiftUI Preview๋ ๋ง์น ๋ง๋ฒ์ฒ๋ผ ์์์ ์ง ํ๊ณ ์๋ํ๋๊ฒ์ฒ๋ผ ๋ณด์ด์ฃ .struct ContentView: View { var body: some View { Text("Hello") // If you change this }}#Preview { ContentView() // It will be update immediately} ์ฑ ์ ์ฒด๋ฅผ ๋ค์ ๋น๋ํ์ง ์์๋ Preview๊ฐ ์ฆ์ ๋ฐ์๋๋ ์ด์ ๋ ๋ฐ๋ก Xcode๊ฐ ์๋ ์์ฑํ๋ Preview-Thunk ํ์ผ(.prev..
-
Pagination StrategyiOS 2025. 11. 22. 08:33
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค ๐์ด๋ฒ ํฌ์คํ ์ ๊ฐ๋ฐ์์ ํ์ด์ง๋ค์ด์ ๊ตฌํ ๋ฐฉ๋ฒ๋ก ์ ๋ํด ๊น์ด ์๊ฒ ์์๋ณด๊ฒ ์ต๋๋ค ๐๐ปPagination Deep Dive๊ฐ๋ฐ์ ํ๋ค ๋ณด๋ฉด ํ ๋ฒ์ฏค ๋ง์ฃผ์น๋ ์ํฉ์ด ์์ฃ .let posts = try await api.fetchAllPosts() // 10,000๊ฐ์ ๊ฒ์๊ธ...tableView.reloadData() // ์ฑ์ด ๋ฒ๋ฒ ๊ฑฐ๋ฆผ ๐ฑ ์์ฒ, ์๋ง ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ๋ก๋ํ๋ ค๋ค๊ฐ ์ฑ์ด ๋๋ ค์ง๊ฑฐ๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํฐ์ง๋ ๊ฒฝ์ฐ ๋ง์ด์์ ๐ ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ํ์ด์ง๋ค์ด์ (Pagination) ์ ๋ต์ ์ทจํด์ผํฉ๋๋ค. Why Pagination Matters?ํ์ด์ง๋ค์ด์ ์ ๊ฐ์ฅ ํฐ ์ด์ ๋ ๋ฐ๋ก ์ฑ๋ฅ๊ณผ ์ฌ์ฉ์ ๊ฒฝํ์ด์์.// ๐ฑ 10,000๊ฐ ๊ฒ์๊ธ → ์ ์ด ๋๊ธฐ, ๋ฉ๋ชจ๋ฆฌ ์๋ฐฑ..
-
Swift Closure Capture SemanticsSwift 2025. 11. 15. 09:07
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค ๐์ด๋ฒ ํฌ์คํ ์์๋ Swift Closure์ Capture Semantics์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค ๐๐ป ๊ธฐ๋ณธ ๋ฌธ๋ฒ์ ๋ชจ๋ ์๊ณ ๊ณ์คํ ๋, ์ค์ ๋ก ํท๊ฐ๋ฆฌ๋ ์ฌํ ๋ด์ฉ๋ค๋ง ์ง์ค์ ์ผ๋ก ๋ค๋ค๋ณผ๊ฒ์!Reference vs Value: ์บก์ฒ ์์ ์ ์ฐจ์ด๊ธฐ๋ณธ ๋์Swift ํด๋ก์ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ธ๋ถ ๋ณ์์ ๋ํ ์ฐธ์กฐ๋ฅผ ์บก์ฒํ๋ฉฐ, ์ด ์ฐธ์กฐ๋ ํด๋ก์ ๊ฐ ์ค์ ๋ก ์คํ๋๋ ์์ ์ ํ๊ฐ๋ฉ๋๋ค.var counter = 0let closure = { print(counter) }counter = 10closure() // 10 ์ถ๋ ฅ (0์ด ์๋!) ํด๋ก์ ์์ฑ ์์ ์ด ์๋ ์คํ ์์ ์ ๊ฐ์ด ์ฌ์ฉ๋ฉ๋๋ค.Capture List๋ก ๊ฐ ๋ณต์ฌํ๊ธฐ์บก์ฒ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ๋ฉด ํด๋ก์ ์์ฑ ์์ ์ ๊ฐ์ ์บก์ฒํ ์ ์์ต๋..
-
WKURLSchemeHandleriOS 2025. 11. 9. 08:37
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค ๐์ค๋์ iOS 11์์ ๋์ ๋ WKURLSchemeHandler์ ๋ํด ๊น์ด ์๊ฒ ์ดํด๋ณด๋ ค๊ณ ํฉ๋๋ค.WKWebView์์ ์ปค์คํ URL Scheme์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ฐพ๊ณ ๊ณ์ จ๋ค๋ฉด, ๋์์ด ๋์ง ์์๊น ํฉ๋๋ค! ๐๐ปFrom UIWebView To WKWebView2014๋ iOS 8๊ณผ ํจ๊ป WKWebView๊ฐ ์ถ์๋๊ธฐ ์ , iOS ๊ฐ๋ฐ์๋ค์ UIWebView๋ฅผ ์ฌ์ฉํ์ต๋๋ค.UIWebView๋ NSURLProtocol์ ํตํด ์ปค์คํ URL Scheme ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ์ต๋๋ค.NSURLProtocol์ ์๋ธํด๋์ฑํ๊ณ ๋ฑ๋กํ๋ฉด, ์ปค์คํ ์คํด(์: myapp://)์ผ๋ก ์์ํ๋ ๋ชจ๋ ์์ฒญ์ ๊ฐ๋ก์ฑ์ ์ฒ๋ฆฌํ ์ ์์์ฃ .// UIWebView ์๋์ NSURLProtocol ์ฌ์ฉ ์์cl..
-
Swift Build TechnologiesSwift 2025. 11. 1. 09:03
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค ๐์๋ฐฑ๋ง ๊ฐ์ App Store ์ฑ๊ณผ Apple ์์ฌ ์ด์์ฒด์ ๋ฅผ ๋น๋ํ๋ ๋ฐ ์ฌ์ฉ๋๋ Xcode์ ๋น๋ ์์ง์ ์คํ์์ค๋ก ๊ณต๊ฐ๋ฅผ 2์์ ํ์์ฃ ! ์ด๋ฒ ํฌ์คํ ์์๋ Swift Build๊ฐ ๋ฌด์์ด๊ณ , ์ ์ค์ํ๋ฉฐ, ๊ธฐ์กด SwiftPM ๋น๋ ์์คํ ๊ณผ ์ด๋ป๊ฒ ๋ค๋ฅธ์ง ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค ๐๐ปSwift๊ฐ ํฌ๋ก์ค ํ๋ซํผ ์ธ์ด๋ก ์ฑ์ฅSwift๋ 2015๋ ์คํ์์ค๋ก ๊ณต๊ฐ๋ ์ดํ ๋ง์ ์ฑ์ฅ์ ํด์์ต๋๋ค.2015: iOS/macOS ์ ์ฉ ↓2017: Linux ์ง์ ↓2020: Windows ์ง์ ↓2024: ์๋ฒ ๋๋ ์์คํ (๋ง์ดํฌ๋ก์ปจํธ๋กค๋ฌ) ↓2025: Android ์ง์ ์ด์ Swift๋โ๏ธ Wearables (Apple Watch)๐ฑ Mobile (iOS, Android)๐ป..
-
Swift SDK for Android - Android ์ฑ์ Swift๋ก ๊ฐ๋ฐํ๊ธฐSwift 2025. 10. 26. 09:08
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค ๐๋๋์ด Swift๋ก Android ์ฑ์ ๊ฐ๋ฐํ ์ ์๋ ์๋๊ฐ ์์ต๋๋ค!2015๋ ์คํ์์ค๋ก ๊ณต๊ฐ๋ ์ดํ Darwin ๊ธฐ๋ฐ ์์คํ (iOS, macOS ๋ฑ)์ ์ง์คํ๋ Swift๊ฐ ์ด์ Android ์ฑ ๊ฐ๋ฐ๊น์ง ์ง์ํ๊ฒ ๋์์ต๋๋ค. ์ด๋ฒ ํฌ์คํ ์์๋ Swift SDK for Android๋ฅผ ์์ํ๋ ๋ฐฉ๋ฒ๋ถํฐ ์ค์ ๋ก "Hello World"๋ฅผ Android ๊ธฐ๊ธฐ์์ ์คํํ๋ ๊ณผ์ ๊น์ง ์์ธํ ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค ๐๐ปSwift์ ํฌ๋ก์ค ํ๋ซํผ ์ฌ์ Swift๋ 2015๋ ์คํ์์ค๋ก ๊ณต๊ฐ๋ ์ดํ, Darwin ๊ธฐ๋ฐ ์์คํ ์ ์ง์คํ๋ ์ธ์ด์์ Linux, Windows, ๊ทธ๋ฆฌ๊ณ ๋ค์ํ ์๋ฒ ๋๋ ์์คํ ์ ์ง์ํ๋ ํฌ๋ก์ค ํ๋ซํผ ๊ฐ๋ฐ ์ธ์ด๋ก ์ฑ์ฅํ์ต๋๋ค.๊ทธ๋ฆฌ๊ณ ์ด์ Swift SDK for ..
-
Iterate Over Parameter PacksSwift 2025. 10. 18. 09:32
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค ๐์ด๋ฒ ํฌ์คํ ์์๋ Swift 6.0์์ ๋์ ๋ Pack Iteration์ ๋ํด ์ ๋ฆฌํด๋ณด๋ ค ํฉ๋๋ค. Swift 5.9์์ ๋์ ๋ Parameter Packs๋ฅผ ํจ์ฌ ๋ ์ฝ๊ณ ์ง๊ด์ ์ผ๋ก ๋ค๋ฃฐ ์ ์๊ฒ ํด์ฃผ๋ ๊ธฐ๋ฅ์ธ๋ฐ์, ์ค์ ์ฝ๋ ์์ ์ ํจ๊ป ์ดํด๋ณด๊ฒ ์ต๋๋ค ๐๐ปParameter Packs Recap๋จผ์ Parameter Packs๊ฐ ๋ฌด์์ธ์ง ๊ฐ๋จํ ๋ณต์ตํด๋ณผ๊น์?๋ค์ ์ฝ๋๋ฅผ ๋ณด๊ฒ ์ต๋๋ค. let areEqual = (1, true, "hello") == (1, false, "hello")print(areEqual)// false ์ ์ฝ๋๋ ๋จ์ํ ๋ ํํ์ ๋น๊ตํฉ๋๋ค. ํ์ง๋ง ์ด ์ฝ๋๋ ํํ์ 7๊ฐ์ ์์๊ฐ ์์ผ๋ฉด ์๋ํ์ง ์์์ต๋๋ค! Swift ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ค๋ซ๋์ ์ต๋..