์‰˜ ์Šคํฌ๋ฆฝํŠธ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ž…์ถœ๋ ฅ ๋น„๊ต ์ž๋™ํ™” (feat. ํฌ๋กฌ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ ๋งŒ๋“ค๊ธฐ)
ยท
CS
xcode์—์„œ ์‹คํ–‰ํ•˜๋Š”๊ฒŒ ์˜ ๋ถˆํŽธํ•ด์„œ vscode๋กœ ์‹คํ–‰ํ™˜๊ฒฝ์„ ์˜ฎ๊ฒผ๋‹ค.ํ•˜์ง€๋งŒ ๋งค๋ฒˆ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ๋ณต๋ถ™ํ•ด์„œ ์‹คํ–‰ํ•˜๊ณ  ์ด๋Ÿฌ๋Š”๊ฒŒ ๋„ˆ๋ฌด ๋น„ํšจ์œจ์ ์ด๋ผ๊ณ  ๋А๊ผˆ๋‹ค.vscode๋Š” ์ž๋™ํ™”๊ฐ€ ๊ฐ„ํŽธํ•˜๋‹ˆ ์ด๋ฅผ ํ™œ์šฉํ•ด๋ณด์ž.1. multi-command ๋‹ค์šด๋กœ๋“œvscode๋Š” task๋ผ๋Š” ๊ณ ์œ ์˜ ์ž‘์—… ํ„ฐ๋ฏธ๋„์„ ์ƒ์„ฑํ•ด ์‹คํ–‰ํ•˜๋Š”๋ฐ, ์ด๊ฒŒ ํ„ฐ๋ฏธ๋„๋ณด๋‹ค ์ข€ ๋А๋ฆฟ๋А๋ฆฟํ•˜๋‹ค.๋น ๋ฆฟ๋น ๋ฆฟํ•œ ์ž…์ถœ๋ ฅ์˜ ๋„ค์ดํ‹ฐ๋ธŒ ํ„ฐ๋ฏธ๋„์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์—ˆ๊ณ , ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ 'multi-command'๋ฅผ ์„ค์น˜ํ–ˆ๋‹ค.2. ๋‹จ์ถ•ํ‚ค ์ถ”๊ฐ€๋จผ์ € ๋‹จ์ถ•ํ‚ค๋กœ ์‰˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ถ”๊ฐ€ํ•ด๋ณด์ž.๋‚˜๋Š” cmd+r ๋‹จ์ถ•ํ‚ค๋กœ ์‰˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ ์ž ํ•œ๋‹ค.๋งฅ ๊ธฐ์ค€์œผ๋กœ 'cmd+shift+p' ๋ฅผ ๋ˆ„๋ฅด๊ณ , 'open keyboard shortcut (json)'์œผ๋กœ ํ‚ค ๋ฐ”์ธ๋”ฉ์„ ..
[Swift] ์ด๋ฏธ์ง€ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ Nuke ๋ถ„์„
ยท
learnings/Swift
Nuke: Image Loading Systemlet image = try await ImagePipeline.shared.image(for: url)func loadImage() async throws { let imageTask = ImagePipeline.shared.imageTask(with: url) for await progress in imageTask.progress { // Update progress } imageView.image = try await imageTask.image}Task์™€ Combine์„ ํ™œ์šฉํ•ด ์ด๋ฏธ์ง€๋ฅผ ๋น„๋™๊ธฐ๋กœ ๋ถˆ๋Ÿฌ์˜ค๋Š” ํ”„๋ ˆ์ž„์›Œํฌ.์ธํ„ฐํŽ˜์ด์Šค๋Š” Swift Concurrency์ด๋‹ค.String์œผ๋กœ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ์žฌ๋ฐŒ๋‹ค.func..
[iOS/Swift] Say Hello to Swift 6.2, WWDC25
ยท
learnings/Swift
(ํฌ์ŠคํŒ… ๋‚ด์šฉ ์™ธ ๋งŽ์€ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ๊ณ , ๋ณ€๊ฒฝ๋์Šต๋‹ˆ๋‹ค.)New Feature in ConcurrencyDefault Actor Inference; ๊ธฐ๋ณธ ์•กํ„ฐ ์ถ”๋ก ; SE-466Swift 6.2๋ถ€ํ„ฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ์ฒด๋ฅผ Main Actor๋กœ ์ถ”๋ก ํ•ฉ๋‹ˆ๋‹ค.SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor defaults// As-is@MainActorclass DataController { func load() { } func save() { }}struct App { let controller = DataController() init() { controller.load() }}// To-be// ์ด์ œ ๋ชจ๋“  ๊ฐ์ฒด๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Global Acto..
์†Œ์ผ“ ๋’ท์กฐ์‚ฌ์ข€ ํ•ด๋ดค์Šต๋‹ˆ๋‹ค
ยท
CS/๋„คํŠธ์›Œํฌ
: ๊ฐœ๋ฐœ์ž๊ฐ€ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ถ”์ƒํ™”๋œ, ํŒŒ์ผ ์œ ์‚ฌ API๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ปค๋„์˜ ํ†ต์‹  ์ฑ„๋„ ๊ฐ์ฒด(ํฌ์ŠคํŒ… ๋‚ด ๋Œ€๋ถ€๋ถ„์˜ ์ปค๋„ ์ฝ”๋“œ๋Š” Darwin XNU API๋กœ ๊ธฐ์ˆ ํ–ˆ์Šต๋‹ˆ๋‹ค.)์™œ ํ•„์š”ํ•œ๊ฐ€?ํ”„๋กœ์„ธ์Šค๋Š” ์ง์ ‘ ๋„คํŠธ์›Œํฌ ์žฅ์น˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Œ. ์ปค๋„๋งŒ์ด ์žฅ์น˜์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์Œ๋”ฐ๋ผ์„œ, ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค๋Š” ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์™€ ํ†ต์‹ ํ•˜๋ ค๋ฉด ์ปค๋„์—๊ฒŒ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋Š” API๊ฐ€ ํ•„์š”. ์ด๋•Œ ์ปค๋„๊ณผ ์†Œํ†ตํ•˜๋Š” ์ฐฝ๊ตฌ๊ฐ€ ์†Œ์ผ“์ฆ‰, ์†Œ์ผ“์€ “์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค์™€ ์ปค๋„ ๋„คํŠธ์›Œํฌ ์Šคํƒ ์‚ฌ์ด์˜ ๊ณ„์•ฝ๋œ ์ธํ„ฐํŽ˜์ด์Šค”์†Œ์ผ“์€ ๋„คํŠธ์›Œํฌ๋ฅผ ์ถ”์ƒ์ ์œผ๋กœ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฐ์ฒด์ด๋ฉฐ, ์‹ค์งˆ์ ์ธ ๋…ธ๋“œ ์•ˆ์˜ ์ข…๋‹จ์ ์ด๋‹ค.์œ„ ๊ทธ๋ฆผ์˜ ์˜ˆ์‹œ์ฒ˜๋Ÿผ, ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋Š” ์†Œ์ผ“์„ ํ†ตํ•ด ๋งˆ์น˜ ์ง์ ‘ ์—ฐ๊ฒฐ๋œ ๊ฒƒ ์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.์ฆ‰, ์–‘ ์ข…๋‹จ์˜..
[iOS/Swift] URLProtocol์„ ์‚ฌ์šฉํ•ด ๋„คํŠธ์›Œํ‚น์„ ํ…Œ์ŠคํŠธํ•ด๋ณด์ž
ยท
learnings/Swift
์•ฑ์ด ๋„คํŠธ์›Œํฌ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด, ์ด๊ฒƒ์„ ํ…Œ์ŠคํŠธํ•˜๋Š”๊ฒƒ์€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.๋„คํŠธ์›Œํ‚นํ•˜๋Š” ๊ฐ์ฒด๋Š” ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๋„คํŠธ์›Œํฌ ์‘๋‹ต์— ์˜๋„ํ•œ๋Œ€๋กœ ๊ธฐ๋Šฅํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.์˜๋„ํ•œ๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๋ฉด์„œ๋„ ๋ฐฐํฌํ•  ์ƒ๊ฐ์ด์‹ ๊ฐ€์š”?ํ…Œ์ŠคํŠธ๋Š” ๋งŒ๋Šฅ์ด ์•„๋‹™๋‹ˆ๋‹ค๋งŒ, ์ ์–ด๋„ ์ž„์˜์˜ ํ…Œ์ŠคํŠธ ์ž…๋ ฅ์— ๋Œ€ํ•ด์„œ ์˜๋„ํ•œ๋Œ€๋กœ ๋™์ž‘ ํ•˜๋Š”์ง€ ์ •๋„๋Š” ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.(๋„คํŠธ์›Œํฌ์—๋งŒ ๊ตญํ•œ๋˜๋Š” ์ด์•ผ๊ธฐ๋Š” ์•„๋‹ˆ์ง€๋งŒ์š”!)URLSession์„ ์‚ฌ์šฉํ•˜๋Š” ๋„คํŠธ์›Œํฌ ๊ฐ์ฒด๋Š” ์–ด๋–ป๊ฒŒ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์„๊นŒ?iOS์•ฑ์—์„œ ๋„คํŠธ์›Œํ‚น ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์—ฌ๋Ÿฌ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.๊ทธ์ค‘ URLSession์„ ์‚ฌ์šฉํ–ˆ์„ ๊ฒฝ์šฐ๋ฅผ ๊ฐ€์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.๊ธฐ์กด์—๋Š” URLSession์„ ํ…Œ์ŠคํŠธํ•˜๋ ค๋ฉด, DataTask๋“ฑ์˜ ํ•จ์ˆ˜๋ฅผ Warpingํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์„ ์„ ์–ธํ–ˆ์Šต๋‹ˆ๋‹ค...
[iOS/Swift] ๋ทฐ ์ขŒํ‘œ๊ณ„์™€ UIView.Frame
ยท
learnings/Swift
๋ทฐ ์ขŒํ‘œ๊ณ„UIView์˜ ๊ณต์‹ ๋ฌธ์„œ์—๋Š” ์ขŒํ‘œ๊ณ„์— ๋Œ€ํ•ด ์ง์ ‘์ ์ธ ์–ธ๊ธ‰์€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์งค๋ง‰ํ•˜๊ฒŒ View Programming Guide for iOS ๋ผ๋Š” ๋งํฌ๋กœ ์–ธ๊ธ‰ํ•˜๊ณ  ์žˆ๊ณ , View and Window Architecture - View Geometry and Coordinate Systems์—์„œ ๋ทฐ ์ขŒํ‘œ๊ณ„์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.๋ฒˆ์—ญํ•˜๋ฉด ๋ทฐ์˜ ๊ธฐํ•˜ํ•™์  ๊ตฌ์กฐ์™€ ์ขŒํ‘œ๊ณ„ ์ •๋„๊ฐ€ ๋˜๊ฒ ๋„ค์š”.๋ทฐ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ขŒ์ƒ๋‹จ์ด (0,0)๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ณ  ์ด๋ฅผ origin point๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜ํ‰ ๋ฐฉํ–ฅ์ด x์ถ•์ด๋ฉฐ ์ˆ˜์ง ๋ฐฉํ–ฅ์ด y์ถ• ์ด๊ณ , ์ขŒํ‘œ๊ณ„์˜ ๊ฐ’์€ ๋ถ€๋™์†Œ์ˆ˜์ ์œผ๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.๋ชจ๋“  ๋ทฐ์™€ ํ™”๋ฉด์€ ์ž์‹ ๋งŒ์˜ ์ขŒํ‘œ๊ณ„๋ฅผ ๊ฐ–๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐœ๋ฐœ์ž๋Š” ์–ด๋–ค ์‹์œผ๋กœ๋“  ์ขŒํ‘œ๊ณ„๋ฅผ ์กฐ์ž‘ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์˜ํ–ฅ์— ๋Œ€ํ•ด ์ธ์ง€ํ•˜๊ณ  ์žˆ์–ด์•ผ..