๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐ŸŽ iOS & Swift

(60)
[iOS] ์ด๋ฏธ์ง€ ์š”์ฒญ ์ทจ์†Œํ•˜๊ธฐ ์ด๋ฏธ์ง€ ๋˜ ๋„ˆ๋ƒ? ๊ฑฐ์˜ ๋ชจ๋“  ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ด๋ฏธ์ง€๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์‹ค์ƒ ์ด๋ฏธ์ง€๊ฐ€ ์—†๋Š” ์•ฑ์€ ์—†๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์ฃ . ๊ทธ๋ฆฌ๊ณ  ์•„์ด์ฝ˜, ๋กœ๊ณ  ๋“ฑ์„ ์ œ์™ธํ•œ ์ด๋ฏธ์ง€๋Š” ์›๊ฒฉ ์„œ๋ฒ„์—์„œ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋Œ€๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€๊ฐ€ ์›๊ฒฉ ์„œ๋ฒ„์— ์žˆ๋‹ค๋Š” ์˜๋ฏธ๋Š” ์–ด๋–ค ์˜๋ฏธ์ผ๊นŒ์š”? ๊ฒฐ๊ตญ ๊ทธ ์—ญ์‹œ ๋„คํŠธ์›Œํฌ ์š”์ฒญ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ผ์ • ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๊ณ  ๋น„์šฉ์ด ๋“ ๋‹ค๋Š” ์ด์•ผ๊ธฐ์ž…๋‹ˆ๋‹ค. ์‹œ๊ฐ„๊ณผ ๋น„์šฉ์ด ๋“œ๋Š” ์ž‘์—…์ด๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” ์š”์ฒญ ํšŸ์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ฑฐ๋‚˜, ์ ์ ˆํ•œ ํƒ€์ด๋ฐ์— ์š”์ฒญ์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€ ์š”์ฒญ ์ทจ์†Œ(Cancel) ์ž‘์—…์˜ ํ•„์š”์„ฑ ๊ทธ๋ฆฌ๊ณ  ์ด๋ฏธ์ง€ ์š”์ฒญ์˜ ๊ฒฝ์šฐ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋Š” ๋น„๋™๊ธฐ ์ž‘์—…์ด๊ธฐ ๋•Œ๋ฌธ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์—์„œ ๊ฒฝ์Ÿ ์กฐ๊ฑด์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์š”์ฒญ ์ž‘์—…์ด ๋จผ์ € ๋๋‚ ์ง€ ์˜ˆ์ธกํ•˜๊ธฐ๋„ ์–ด๋ ต์ฃ . ํ…Œ์ด๋ธ” ๋ทฐ๋‚˜ ์ปฌ๋ ‰์…˜ ๋ทฐ ์ฒ˜๋Ÿผ ๋งŽ์€ ์…€์„ ๊ฐ€์งˆ ..
[iOS] commit hitch ์ œ๊ฑฐํ•˜๊ธฐ ๋ฌธ์ œ ๋น„๋งˆ์ดํ”Œ๋žœ 1.4.3 ๋ฒ„์ „์˜ ๋ฉ”์ธ ํ™”๋ฉด์—์„œ ์Šคํฌ๋กค ์‹œ ๋Š๊น€ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. 1. ์ฝ”๋“œ์— ๋ฌธ์ œ์ผ ๊ฒƒ์ด๋‹ค. 2. ๋ Œ๋”๋ง ๋ฌธ์ œ์ผ ๊ฒƒ์ด๋‹ค. iOS ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ UI ๋ Œ๋”๋ง ๊ณผ์ •์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค. Render Loop, Hitch ๋“ฑ๋“ฑ์˜ ํ‚ค์›Œ๋“œ๊ฐ€ ๋‚˜์˜ค๋”๊ตฐ์š”. ํ‚ค์›Œ๋“œ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋˜ ์ค‘ ๊ด€๋ จ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์€ WWDC ์„ธ์…˜์ด ๋ช‡ ๊ฐœ ๋‚˜์™”์Šต๋‹ˆ๋‹ค. ์šฐ์„  ์˜์ƒ๋ถ€ํ„ฐ ๋ณด๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์˜์ƒ์„ ์ฐพ์•„๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค: Explore UI animation hitches and the render loop Demystify and eliminate hitches in the render phase Find and fix hitches in the commit phase ์˜์ƒ์„ ์ฐพ์•„๋ณด๋ฉด ์•Œ๊ฒ ์ง€๋งŒ ์šฐ..
[iOS] ๋ฐ˜๋‚˜์ ˆ๋™์•ˆ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ 91% ๊ฐ์†Œ์‹œํ‚ค๊ธฐ ๋“ค์–ด๊ฐ€๋ฉฐ https://apps.apple.com/kr/app/%EB%B9%84%EB%A7%88%EC%9D%B4%ED%94%8C%EB%9E%9C-%EC%97%AC%ED%96%89-%EC%BD%94%EC%8A%A4-%EC%8A%A4%ED%86%A0%EC%96%B4/id1627682568 (๐Ÿ‘‡ ์•ฑ ์Šคํ† ์–ด ๋งํฌ) ‎๋น„๋งˆ์ดํ”Œ๋žœ - ์—ฌํ–‰ ์ฝ”์Šค ์Šคํ† ์–ด ‎์—ฌํ–‰ ์ฝ”์Šค ์Šคํ† ์–ด, ๋น„๋งˆ์ดํ”Œ๋žœ ํ˜„์ง€์ธ ํฌ๋ฆฌ์—์ดํ„ฐ๋“ค์ด ๋งŒ๋“  ๋‹ค์–‘ํ•œ ์ปจ์…‰์˜ ์—ฌํ–‰ ์ฝ”์Šค ์ฝ˜ํ…์ธ ๋กœ ์—ฌํ–‰ ๊ณ„ํš ์‹œ๊ฐ„์„ ํ™• ์ค„์—ฌ๋ณด์„ธ์š”! ํฌ๋ฆฌ์—์ดํ„ฐ๊ฐ€ ์—„์„ ํ•œ ์žฅ์†Œ๋“ค์„ ํšจ์œจ์ ์ธ ๋ฃจํŠธ๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ์ผ apps.apple.com ๋‚˜๋Š” ํ˜„์žฌ ์—ฌํ–‰ ์ฝ”์Šค ์Šคํ† ์–ด ๋น„๋งˆ์ดํ”Œ๋žœ์˜ ์œ ์ง€, ๋ณด์ˆ˜, ์‹ ๊ทœ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์„ ๋งก๊ณ  ์žˆ๋‹ค. . ๊ทธ๋™์•ˆ ํŒ€์— ํ•ฉ๋ฅ˜ํ•˜๊ณ  ํฌ๊ณ  ์ž‘์€ 5-6์ฐจ๋ก€์˜ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•ด์™”๋Š”๋ฐ, ์งง..
[Swift] Stored Property vs Computed Property vs Method Stored Property vs Computed Property vs Method ์ตœ๊ทผ์— ๊ธฐ์ดˆ๊ฐ€ ๋ถ€์กฑํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๋Š๊ปด ํ‹ˆํ‹ˆํžˆ ํ‰์†Œ์— ๊ถ๊ธˆํ–ˆ๋˜ ๊ฒƒ์ด๋‚˜ ๋ฌธ๋ฒ•๋“ค์„ ๋‹ค์‹œ ๋ณด๊ณ  ์žˆ๋Š”๋ฐ ์ƒ๊ฐ๋ณด๋‹ค ์žฌ๋ฐŒ๋‹ค.. (์ž, ์ผ๋‹จ ์ž์‹ ์„ ์†์—ฌ..!!) ์—ฐ์‚ฐ ํ”„๋กœํผํ‹ฐ๋ฅผ ์–ธ์ œ ์“ฐ๋Š” ๊ฒƒ์ด ์ข‹์„์ง€ ๊ณ ๋ฏผ์„ ํ•˜๋‹ค๊ฐ€ ๊ดœ์ฐฎ๋‹ค๊ณ  ๋Š๋‚€ ๊ด€์ ์˜ ๊ธ€์ด ์žˆ์–ด์„œ ๋ฉ”๋ชจํ•ด๋†“๋Š”๋‹ค. ์ €์žฅ ํ”„๋กœํผํ‹ฐ(Stored Property) - ๊ฐ’์˜ ๋ณ€ํ™”๊ฐ€ ์—†๊ณ , ์ •๊ธฐ์ ์œผ๋กœ ์ ‘๊ทผ(Read)ํ•ด์„œ ์“ฐ๋ ค๊ณ  ํ•  ๋•Œ - ๋งŒ๋“ค์–ด๋†“๊ณ  ๊ฑฐ์˜ ์ฝ์ง€ ์•Š๊ฒŒ๋˜๋Š” ์ €์žฅ ํ”„๋กœํผํ‹ฐ์ธ ๊ฒฝ์šฐ lazy ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•ด๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค. - ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Property Observer๋ฅผ ํ†ตํ•ด์„œ๋„ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•ด๋ณผ ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ? (- ์š” ๋ถ€๋ถ„์€ ์‚ด์ง ์™€๋‹ฟ์ง€ ์•Š๋Š”๋‹ค.) ์—ฐ์‚ฐ ํ”„๋กœํผํ‹ฐ(Co..
[iOS] ๋„คํŠธ์›Œํฌ ํ†ต์‹  ํ†บ์•„๋ณด๊ธฐ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์—(0) ์š”์ฆ˜ ๊ณต๋ถ€์˜ ์–ด๋Š ์ •๋„ ์‹œ๊ฐ„์€ ๋„คํŠธ์›Œํฌ ํ†ต์‹  ๋ถ€๋ถ„์— ๋Œ€ํ•œ ํ•™์Šต, ๋„คํŠธ์›Œํฌ ๋ ˆ์ด์–ด ์ถ”์ƒํ™”์— ๋Œ€ํ•œ ๊ฒƒ์„ ์—ฐ๊ตฌํ•ด๋ณด๊ณ  ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋งŒ์˜ ๋„คํŠธ์›Œํฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ ํƒ ๊ธฐ์ค€๋„ ๊ณ ๋ฏผํ•ด๋ณด๋Š” ์ค‘ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์€ ์ •๋ง ์š”์ฒญ(Request)๊ณผ ์‘๋‹ต(Response)์ด ๋‹ค๋ผ๋Š” ๊ฒƒ์„ ์š”์ฆ˜ ๋” ๊ฐ•ํ•˜๊ฒŒ ๋Š๋‚€๋‹ค. ์Šค์Šค๋กœ ์ •๋ฆฌ๊ฐ€ ์–ผ์ถ” ๋˜๋ฉด, ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์— ๋Œ€ํ•ด์„œ ๋‚ด ๋‚˜๋ฆ„๋Œ€๋กœ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ์ž์›(๋ฆฌ์†Œ์Šค)์ด ์žˆ๋Š” ์„œ๋ฒ„ ์ชฝ์— ์š”์ฒญํ•  ์š”์ฒญ์„œ๋ฅผ ๋งŒ๋“ค๊ณ , ๊ฐ€์ ธ์˜จ ์ž์›์„ ์•ฑ์˜ ์ƒํ™ฉ์— ๋งž๊ฒŒ ์ ์ ˆํžˆ ํ•ด๋…ํ•˜๊ณ  ๊ฐ€๊ณตํ•ด์„œ ์“ฐ๋Š” ๊ฒƒ ์ด๊ฒƒ์ด ๋‹ค๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ์š”์ฒญ์„ ํ†ตํ•ด ์ž์›์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์“ฐ๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์ž…์žฅ์—์„œ๋Š” ์š”์ฒญ์ด ํŠนํžˆ๋‚˜ ์ค‘์š”ํ•˜๋‹ค๊ณ  ๋ณธ๋‹ค. ์š”์ฒญ์„œ์— ํ•„์š”ํ•œ ์ •๋ณด๋Š” ํฌ๊ฒŒ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. URL(Path, Qu..
[RxSwift] Disposable๊ณผ DisposeBag ๋“ค์–ด๊ฐ€๋ฉฐ ๊ธฐ๋ก์˜ ์†Œ์ค‘ํ•จ์„ ์•Œ๋ฉด์„œ๋„ ๋ฌด์–ธ๊ฐ€๋ฅผ ๊พธ์ค€ํžˆ ๊ธฐ๋กํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์ฐธ ์–ด๋ ค์šด ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ์ €๋Ÿฐ ์ƒ๊ฐ์„ ๋งŽ์ด ํ–ˆ์ง€๋งŒ ๊ทธ๋ƒฅ ํ•‘๊ณ„๋Œ€์ง€๋ง๊ณ , ๋ช‡ ์ž๋ผ๋„ ๋‚จ๊ฒจ๋†“๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฒฐ๋ก ์„ ๋‚ด๋ ธ์Šต๋‹ˆ๋‹ค. ๊นŠ์ด ์žˆ๋Š” ๊ธ€์€ ๋‹ฌ์— 1~2๋ฒˆ ์ •๋„ ์ ๋Š” ๊ฒƒ์œผ๋กœ ํ•˜๊ณ  ์šฐ์„ ์€ ๊พธ์ค€ํžˆ ๋ฉ”๋ชจ(ex. ํ‚ค์›Œ๋“œ, ์š”์•ฝ ๋“ฑ)๋ฅผ ํ•˜๋Š” ์‹์œผ๋กœ ๊ฐ€๋ณด๋ ค๊ณ  ํ•ด์š”. ๊นƒํ—ˆ๋ธŒ์— ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ์ด ํŽธํ•ด์„œ ๋ณดํ†ต ๋ฉ”๋ชจ๋‚˜ ๊ธฐ๋ก์„ ๊นƒํ—ˆ๋ธŒ์— ํ•˜๋Š” ํŽธ์ด์ง€๋งŒ, ์•ž์œผ๋กœ ๋ธ”๋กœ๊ทธ์—๋„ ๋™์‹œ์— ๊พธ์ค€ํžˆ ํฌ์ŠคํŒ…ํ•  ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค. ํŒŒ์ดํŒ…!! Disposable RxSwift > Disposable // Disposable.swift /// Represents a disposable resource. public protocol Disposable { /// Dispose resourc..
[LLDB ๊ด€๋ จ ๋นŒ๋“œ ๋ฌธ์ œ] warning: libobjc.A.dylib is being read from process memory. This indicates that LLDB could not find the on-disk shared cache for this device. This will likely reduce debugging performance. ์ตœ๊ทผ์— ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๊ฐ€ ์ฝ˜์†” ์ฐฝ์— ๋œจ๋ฉด์„œ ๋นŒ๋“œ๊ฐ€ ์ž˜๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๋ฅผ ๊ฒช์—ˆ๋‹ค. warning: libobjc.A.dylib is being read from process memory. This indicates that LLDB could not find the on-disk shared cache for this device. This will likely reduce debugging performance. rm -r ~/Library/Developer/Xcode/iOS\ DeviceSupport ๋‹ค์Œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๋‹ค์‹œ ๋นŒ๋“œํ•˜๋‹ˆ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค. ๋ ˆํผ๋Ÿฐ์Šค https://stackoverflow.com/questions/72598348/xcode-14-beta-build-issues-wi..
[iOS] Date compare(_:) ๋ฉ”์„œ๋“œ ๋ฉ”์„œ๋“œ ์ •์˜ func compare(_ other: Date) -> ComparisonResult ๋‹ค๋ฅธ ๋‚ ์งœ์™€ ๋น„๊ตํ•ด์ฃผ๋Š” ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ ์˜ˆ์‹œ import Foundation // Date String let targetDateString = "2022-08-10" let comparisonDateString = "2022-12-08" let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd" // Optional Binding guard let pastDate = dateFormatter.date(from: targetDateString), let futureDate = dateFormatter.date(from: com..